@asm-agent/coding-agent 0.8.8 → 0.9.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 +15 -0
- package/README.md +2 -7
- package/dist/asm-agent-runtime/src/__pycache__/asm_cm_driver.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/__pycache__/phase76_address_head.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__init__.py +1 -1
- package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/skill.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/bash.py +94 -31
- package/dist/asm-agent-runtime/src/rlm/repl.md +3 -3
- package/dist/asm-agent-runtime/src/rlm/repl.py +46 -45
- package/dist/asm-agent-runtime/test/__pycache__/test_bash.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/test/__pycache__/test_repl.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/test/test_bash.py +74 -19
- package/dist/asm-agent-runtime/test/test_repl.py +67 -3
- package/dist/asm-agent-runtime/uv.lock +446 -155
- package/dist/bundle/{anthropic-OFECORE7.js → anthropic-ZOZNPFXS.js} +2 -2
- package/dist/bundle/{azure-openai-responses-AOVTLR6N.js → azure-openai-responses-TDHCU647.js} +2 -2
- package/dist/bundle/{bundled-modules-JQCJDEIY.js → bundled-modules-Q2YODC4B.js} +3 -3
- package/dist/bundle/{chunk-M67RGWDQ.js → chunk-AMKLNEAK.js} +25 -44
- package/dist/bundle/{chunk-7TB7CGPV.js → chunk-FPY7FFJS.js} +978 -1821
- package/dist/bundle/{chunk-JC2TT4MZ.js → chunk-G6SC4YYW.js} +4942 -1916
- package/dist/bundle/{chunk-A65OM3TZ.js → chunk-QLHAP3FT.js} +1 -1
- package/dist/bundle/{cli-main-FNHDQGQD.js → cli-main-277AG2BR.js} +3 -3
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/{google-RVJL6RIQ.js → google-Q3AJWUOY.js} +1 -1
- package/dist/bundle/{google-vertex-EZTRRRH6.js → google-vertex-2CSNOUBS.js} +1 -1
- package/dist/bundle/{main-IYXIIAJN.js → main-TNXWJXIU.js} +3 -3
- package/dist/bundle/{mistral-FSGKSMA7.js → mistral-XRYJGLLG.js} +1 -1
- package/dist/bundle/{openai-codex-responses-VM5Y564D.js → openai-codex-responses-C6BRO2BN.js} +2 -2
- package/dist/bundle/{openai-completions-X46FOQDN.js → openai-completions-DNXCK2JW.js} +3 -3
- package/dist/bundle/{openai-responses-SOQNEPBE.js → openai-responses-BEMWVIXE.js} +2 -2
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-config.d.ts +1 -2
- package/dist/core/agent-session-config.d.ts.map +1 -1
- package/dist/core/agent-session-config.js +0 -3
- package/dist/core/agent-session-config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +0 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +0 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +0 -22
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +8 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +100 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/kernel/bootstrap.d.ts.map +1 -1
- package/dist/core/kernel/bootstrap.js +1 -1
- package/dist/core/kernel/bootstrap.js.map +1 -1
- package/dist/core/kernel/repl-manager.d.ts +32 -8
- package/dist/core/kernel/repl-manager.d.ts.map +1 -1
- package/dist/core/kernel/repl-manager.js +401 -102
- package/dist/core/kernel/repl-manager.js.map +1 -1
- package/dist/core/kernel/shared.d.ts +11 -7
- package/dist/core/kernel/shared.d.ts.map +1 -1
- package/dist/core/kernel/shared.js +2 -5
- package/dist/core/kernel/shared.js.map +1 -1
- package/dist/core/mcp/mcp-manager.d.ts +4 -2
- package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
- package/dist/core/mcp/mcp-manager.js +9 -7
- package/dist/core/mcp/mcp-manager.js.map +1 -1
- package/dist/core/prime-inference-auth.d.ts +0 -9
- package/dist/core/prime-inference-auth.d.ts.map +1 -1
- package/dist/core/prime-inference-auth.js +0 -50
- package/dist/core/prime-inference-auth.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +0 -1
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/session-manager.d.ts +0 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +0 -22
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +13 -43
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +0 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/acp-mcp.d.ts +6 -0
- package/dist/core/tools/acp-mcp.d.ts.map +1 -0
- package/dist/core/tools/acp-mcp.js +86 -0
- package/dist/core/tools/acp-mcp.js.map +1 -0
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ipython.d.ts.map +1 -1
- package/dist/core/tools/ipython.js +9 -4
- package/dist/core/tools/ipython.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts.map +1 -1
- package/dist/modes/acp/acp-mode.js +1 -1
- package/dist/modes/acp/acp-mode.js.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts +0 -2
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js +0 -2
- package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.js +0 -19
- package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-mode.d.ts +1 -10
- package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-mode.js +134 -274
- package/dist/modes/daemon/daemon-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-protocol.d.ts +11 -5
- package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-protocol.js +6 -8
- package/dist/modes/daemon/daemon-protocol.js.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts +0 -3
- package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.js +18 -52
- package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts +1 -6
- package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.js +0 -2
- package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
- package/dist/modes/interactive/auth-flows.d.ts +0 -2
- package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
- package/dist/modes/interactive/auth-flows.js +1 -101
- package/dist/modes/interactive/auth-flows.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +13 -3
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +2 -2
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts +12 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +63 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +10 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
- package/dist/modes/interactive/feature-hints.js +0 -4
- package/dist/modes/interactive/feature-hints.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +23 -279
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/settings.md +1 -31
- package/docs/usage.md +1 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +6 -5
- package/dist/core/agent-traces.d.ts +0 -130
- package/dist/core/agent-traces.d.ts.map +0 -1
- package/dist/core/agent-traces.js +0 -746
- package/dist/core/agent-traces.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -92
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -633
- package/dist/core/telemetry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-supervisor.js","sourceRoot":"","sources":["../../../src/modes/daemon/daemon-supervisor.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { chmodSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createServer, type Server, type Socket } from \"node:net\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { Writable } from \"node:stream\";\nimport { getLogger } from \"@asm-agent/ai\";\nimport { createCliSubprocessEnv, createCliSubprocessLaunchSpec } from \"../../cli/subprocess-launch.js\";\nimport {\n\tappendRotatingLog,\n\tgetCronJobsPath,\n\tgetDaemonLogPath,\n\tgetDaemonUpdateRestartManifestPath,\n\tgetSessionsDir,\n\tVERSION,\n} from \"../../config.js\";\nimport {\n\ttype AgentFamilyCatalogEntry,\n\ttype AgentSessionMessageAgentSummary,\n\tassertAgentFamilyReach,\n\tassertAgentSessionNameAvailable,\n\tformatAgentSessionNameUnavailable,\n\tsessionNameReservationKey,\n} from \"../../core/agent-messages.js\";\nimport {\n\ttype AgentSessionRuntimeConfig,\n\ttype DurableAgentSessionRuntimeConfig,\n\tdurableAgentSessionRuntimeConfig,\n\tmergeAgentSessionRuntimeConfig,\n} from \"../../core/agent-session-config.js\";\nimport {\n\ttype AgentCronJob,\n\tAgentCronJobStore,\n\tmigrateLegacyCronJobsToSessionArtifacts,\n\tSESSION_SCHEDULED_JOBS_FILENAME,\n} from \"../../core/cron-jobs.js\";\nimport {\n\tclearOrphanProcessJournal,\n\tkillOrphanProcess,\n\tORPHAN_PROCESS_JOURNAL_ENV,\n\treadActiveOrphanProcesses,\n\tshouldReapOrphanProcess,\n} from \"../../core/orphan-process-journal.js\";\nimport { PromptAdmissionCancelledError, waitForPromptAdmission } from \"../../core/prompt-admission.js\";\nimport {\n\tcanEvictWorker,\n\ttype IdleEvictionMinutes,\n\ttype WorkerEvictionSnapshot,\n} from \"../../core/session-action-store.js\";\nimport { canonicalSessionPath, getProcessStartId, SessionAlreadyActiveError } from \"../../core/session-lease.js\";\nimport { getSessionArtifactPathForFile, readSessionInfo, type SessionInfo } from \"../../core/session-manager.js\";\nimport { SettingsManager } from \"../../core/settings-manager.js\";\nimport { isProcessAlive, processIdExists, signalProcessGroupOrProcess } from \"../../utils/child-process.js\";\nimport type { AgentConnectionHeartbeat } from \"../agent-connection/types.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"../rpc/jsonl.js\";\nimport type { PrivateFrame } from \"../session-worker/private-framing.js\";\nimport { createActiveSessionId, type DaemonSocketClient } from \"./active-session-state.js\";\nimport { CommandRecoveryJournal, createCommandIdempotencyKey } from \"./command-recovery-journal.js\";\nimport { CompactAssistantStreamReconstructor, isCompactAssistantDelta } from \"./compact-session-stream.js\";\nimport { DAEMON_CATALOG_ROLE_ENV, DaemonCatalogClient } from \"./daemon-catalog-process.js\";\nimport { deserializeDaemonError, serializeDaemonError } from \"./daemon-errors.js\";\nimport {\n\tcollectDaemonClientEnv,\n\tcreateDaemonEventMeta,\n\tDAEMON_COMMAND_COMPATIBILITY,\n\tDAEMON_COMMAND_ENVELOPE_MIN_PROTOCOL_VERSION,\n\tDAEMON_DEFAULT_CLIENT_CAPABILITIES,\n\tDAEMON_DEFAULT_SERVER_CAPABILITIES,\n\tDAEMON_PROTOCOL_INFO,\n\tDAEMON_SCHEMA_ID,\n\tDAEMON_SCHEMA_REVISION,\n\tDAEMON_UPDATE_RESTART_FORMAT_VERSION,\n\ttype DaemonAttachResult,\n\ttype DaemonClientCapability,\n\ttype DaemonClosingReason,\n\ttype DaemonCommand,\n\ttype DaemonOutbound,\n\ttype DaemonResponse,\n\ttype DaemonUpdateRestartManifest,\n\tfailure,\n\tisDaemonCommandEnvelope,\n\tisDaemonMutatingCommand,\n\tsalvageDaemonCommandId,\n\tsuccess,\n\tUPDATE_RESTART_DRAIN_COMMANDS,\n} from \"./daemon-protocol.js\";\nimport { getDaemonRuntimeIdentity } from \"./daemon-runtime-identity.js\";\nimport { matchesSessionIdSuffix } from \"./daemon-session-id.js\";\nimport {\n\tclassifySessionRosterStatus,\n\tisSessionSummaryBusy,\n\ttype SessionSummary,\n\tsummaryForInactiveSession,\n} from \"./daemon-session-list.js\";\nimport {\n\tacquireDaemonSocketPathLease,\n\tcleanupDaemonSocketPath,\n\ttype DaemonSocketIdentity,\n\ttype DaemonSocketPathLease,\n\tdefaultDaemonSocketDir,\n\tdefaultDaemonSocketPath,\n\tgetDaemonSocketIdentity,\n\tnormalizeSocketPath,\n\tprepareDaemonSocketPath,\n\trestrictDaemonSocketPath,\n} from \"./daemon-socket.js\";\nimport {\n\tacquireDaemonSupervisorOwnership,\n\tisDaemonShutdownAdmissionActive,\n\twaitForDaemonStartupFence,\n} from \"./daemon-supervisor-ownership.js\";\nimport { DaemonWorkerClient } from \"./daemon-worker-client.js\";\nimport {\n\tDAEMON_WORKER_ACTIVE_SESSION_ID_ENV,\n\tDAEMON_WORKER_RECOVERY_JOURNAL_ENV,\n\tDAEMON_WORKER_ROLE_ENV,\n\tDAEMON_WORKER_STARTUP_GATE_COMMIT,\n\tDAEMON_WORKER_STARTUP_GATE_FD_ENV,\n\tDAEMON_WORKER_SUPERVISOR_SOCKET_ENV,\n\tDAEMON_WORKER_TOKEN_ENV,\n\ttype DaemonCreateCommand,\n\ttype DaemonWorkerDescriptor,\n\ttype DaemonWorkerFrameHeader,\n\ttype DaemonWorkerLifecycle,\n\tdurableDaemonCreateCommand,\n\tdurableDaemonWorkerDescriptor,\n\tSESSION_LEASE_OWNER_ID_ENV,\n\tSESSION_LEASES_ENABLED_ENV,\n} from \"./daemon-worker-protocol.js\";\nimport { MutationDrainLatch } from \"./mutation-drain-latch.js\";\nimport { createRlmLedgerRegistrySeedSource, RlmSpawnLedger } from \"./rlm-ledger.js\";\nimport { serializeSavedSessionInfo } from \"./saved-session-info.js\";\nimport { SNAPSHOT_TARGET_CHUNK_BYTES, SnapshotTranscriptCache } from \"./snapshot-transcript-cache.js\";\nimport { WorkerRecoveryJournal } from \"./worker-recovery-journal.js\";\n\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\ntype DaemonCommandBody = DistributiveOmit<DaemonCommand, \"id\">;\n\nconst structuredLog = getLogger(\"coding-agent.daemon-supervisor\");\nconst WORKER_CONNECT_TIMEOUT_MS = 30_000;\nconst WORKER_REQUEST_TIMEOUT_MS = 24 * 60 * 60 * 1000;\nconst INPUT_PAUSE_CLEANUP_TIMEOUT_MS = 5_000;\nconst UPDATE_RESTART_MUTATION_DRAIN_TIMEOUT_MS = 80_000;\nconst UPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS = 90_000;\n// The whole pre-commit prepare (drain + worker fencing) must finish inside the\n// caller's 120s prepare_update_restart request timeout, or roll back; otherwise\n// an abandoned prepare leaves the daemon permanently fenced with workers stopped.\nconst UPDATE_RESTART_PREPARE_DEADLINE_MS = 100_000;\nconst WORKER_RETRY_DELAYS_MS = [250, 1000, 5000] as const;\nconst DEFERRED_RECOVERY_RECHECK_MS = 5000;\nconst STOP_FINALIZATION_RECHECK_MS = 250;\nconst STOP_FINALIZATION_SIGKILL_GRACE_MS = 5000;\nconst STOP_FINALIZATION_RETRY_MS = 5000;\nconst STALE_RECLAIM_WAIT_MS = 10_000;\n// Polling loops probe existence cheaply via kill(0); the ps-backed zombie and\n// identity checks are throttled so a wedged worker cannot saturate the\n// supervisor event loop with synchronous subprocess spawns.\nconst LIVENESS_IDENTITY_RECHECK_MS = 500;\nconst OWNED_WORKER_DISCONNECT_GRACE_MS = 30_000;\nconst IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS = 5 * 60_000;\nconst IDLE_EVICTION_MIN_SWEEP_INTERVAL_MS = 60_000;\nconst IDLE_EVICTION_DRAIN_TIMEOUT_MS = 5_000;\nconst CHILD_PASSIVATION_PER_WORKER_CAP = 2;\nconst SUPERVISOR_CONFIG_FILE_NAME = \"supervisor-config\";\nconst WORKER_STARTUP_GATE_FD = 3;\n\nconst DAEMON_COMMAND_TYPES: ReadonlySet<string> = new Set([\n\t\"ack_result\",\n\t\"list\",\n\t\"list_saved_sessions\",\n\t\"create\",\n\t\"attach\",\n\t\"reattach\",\n\t\"detach\",\n\t\"complete_owned_session\",\n\t\"promote_owned_session\",\n\t\"kill\",\n\t\"rename\",\n\t\"prompt\",\n\t\"cancel_prompt_admission\",\n\t\"prompt_and_wait\",\n\t\"steer\",\n\t\"follow_up\",\n\t\"restore_next_turn\",\n\t\"restore_actions\",\n\t\"append_custom_message\",\n\t\"resume_queue\",\n\t\"send_message\",\n\t\"agent_messages_status\",\n\t\"agent_messages_pause\",\n\t\"agent_messages_resume\",\n\t\"agent_messages_clear\",\n\t\"abort\",\n\t\"start_side_question\",\n\t\"abort_side_question\",\n\t\"execute_bash\",\n\t\"execute_bash_and_wait\",\n\t\"abort_bash\",\n\t\"cancel_rlm_child\",\n\t\"delete_rlm_subagent\",\n\t\"wait_for_idle\",\n\t\"wait_for_headless_completion\",\n\t\"get_session_header\",\n\t\"get_state\",\n\t\"get_connection_state\",\n\t\"get_messages\",\n\t\"get_rlm_children\",\n\t\"get_session_stats\",\n\t\"get_context_tree\",\n\t\"get_commands\",\n\t\"get_resource_snapshot\",\n\t\"replace_acp_mcp_servers\",\n\t\"get_model_catalog\",\n\t\"get_available_models\",\n\t\"get_queue\",\n\t\"mutate_queued_message\",\n\t\"clear_queue\",\n\t\"abort_and_clear_queue\",\n\t\"acquire_session_input_pause\",\n\t\"release_session_input_pause\",\n\t\"cron_list\",\n\t\"heartbeats_list\",\n\t\"heartbeat_manage\",\n\t\"cron_add\",\n\t\"cron_cancel\",\n\t\"heartbeat_get\",\n\t\"heartbeat_set\",\n\t\"heartbeat_update\",\n\t\"set_model\",\n\t\"cycle_model\",\n\t\"set_scoped_models\",\n\t\"set_thinking_level\",\n\t\"cycle_thinking_level\",\n\t\"set_service_tier\",\n\t\"set_transport\",\n\t\"set_steering_mode\",\n\t\"set_follow_up_mode\",\n\t\"set_auto_compaction\",\n\t\"set_auto_retry\",\n\t\"compact\",\n\t\"refine\",\n\t\"abort_compaction\",\n\t\"abort_branch_summary\",\n\t\"abort_retry\",\n\t\"reload\",\n\t\"new_session\",\n\t\"switch_session\",\n\t\"fork\",\n\t\"navigate_tree\",\n\t\"import_jsonl\",\n\t\"export_html\",\n\t\"export_jsonl\",\n\t\"set_session_name\",\n\t\"get_rlm_max_depth_status\",\n\t\"set_rlm_max_depth\",\n\t\"rename_saved_session\",\n\t\"delete_saved_session\",\n\t\"get_session_context\",\n\t\"get_session_tree\",\n\t\"get_user_messages_for_forking\",\n\t\"get_last_assistant_text\",\n\t\"get_system_prompt\",\n\t\"get_tool_definition\",\n\t\"set_session_entry_label\",\n\t\"extension_ui_response\",\n\t\"prepare_update_restart\",\n\t\"retry_worker\",\n\t\"restart\",\n\t\"shutdown\",\n]);\n\ninterface ResidentWorker {\n\tdescriptor: DaemonWorkerDescriptor;\n\tdescriptorPath: string;\n\tclient?: DaemonWorkerClient;\n\theartbeatSnapshot?: AgentConnectionHeartbeat[];\n\theartbeatSnapshotStale?: boolean;\n\tsummaries: Map<string, SessionSummary>;\n\tsnapshotCache: Map<string, DaemonAttachResult>;\n\ttranscriptCaches: Map<string, SnapshotTranscriptCache>;\n\tsnapshotGenerations: Map<string, Map<string, SnapshotTranscriptGeneration>>;\n\tsnapshotLoads: Map<string, Promise<DaemonAttachResult>>;\n\trecovery?: Promise<void>;\n\tdeferredRecovery?: Promise<void>;\n\tintentionalStop: boolean;\n\tstopRevision: number;\n\tlaunchEnv?: Record<string, string>;\n\ttransientCreateCommand?: DaemonCreateCommand;\n\tstopFinalization?: Promise<void>;\n\townerCleanupTimer?: ReturnType<typeof setTimeout>;\n\tpromotedOwnerClientId?: string;\n\tupdateRestartPrepareClient?: DaemonWorkerClient;\n}\n\ninterface SnapshotDuplicateValidation {\n\tpromise: Promise<void>;\n\tresolve: () => void;\n\treject: (error: Error) => void;\n}\n\ninterface SnapshotTranscriptGeneration {\n\ttranscript: SnapshotTranscriptCache;\n\tresult: DaemonAttachResult;\n\tbegin?: Buffer;\n\tend?: Buffer;\n\tincoming: boolean;\n\tretired: boolean;\n\tduplicateChunkIndex?: number;\n\tduplicateResult?: DaemonAttachResult;\n\tvalidation?: SnapshotDuplicateValidation;\n}\n\ninterface DaemonSupervisorOptions {\n\tsocketPath?: string;\n\tdefaultSessionConfig: AgentSessionRuntimeConfig;\n\tdescriptorDir?: string;\n}\n\ninterface PersistedSupervisorConfig {\n\tversion: 1;\n\tsocketPath: string;\n\tdefaultSessionConfig: DurableAgentSessionRuntimeConfig;\n}\n\ninterface WorkerMatch {\n\tworker: ResidentWorker;\n\tsummary: SessionSummary;\n}\n\ninterface WorkerAttachData {\n\tresult: DaemonAttachResult;\n\tworker: ResidentWorker;\n\ttranscript?: SnapshotTranscriptCache;\n\treleaseTranscript?: () => void;\n}\n\ninterface SupervisorPromptAdmission {\n\tclient: DaemonSocketClient;\n\tactiveSessionId: string;\n\tpublicAdmissionId: string;\n\tworkerAdmissionId: string;\n\tstatus: \"waiting\" | \"owned\" | \"cancelled\";\n\tcontroller: AbortController;\n\tworker?: ResidentWorker;\n\tworkerActiveSessionId?: string;\n}\n\ninterface SupervisorSessionInputPause {\n\towner: DaemonSocketClient;\n\tworker: ResidentWorker;\n\tactiveSessionId: string;\n\trequestedActiveSessionId: string;\n\tleaseKey: string;\n\tpauseId: string;\n\treleaseTask?: Promise<DaemonResponse>;\n}\n\nfunction throwIfAdmissionCancelled(admission: SupervisorPromptAdmission | undefined): void {\n\tif (admission?.status === \"cancelled\") throw new PromptAdmissionCancelledError();\n}\n\nclass SupervisorRecoveryCancelledError extends Error {\n\treadonly code = \"supervisor_recovery_cancelled\" as const;\n}\n\nclass SnapshotLoadInvalidatedError extends Error {}\n\nclass WorkerStopTimeoutError extends Error {}\n\nfunction isSupervisorGenerationStale(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === \"supervisor_generation_stale\"\n\t);\n}\n\nfunction isSupervisorRecoveryCancelled(error: unknown): boolean {\n\treturn isSupervisorShutdownAdmissionCancelled(error) || isSupervisorGenerationStale(error);\n}\n\nfunction isSupervisorShutdownAdmissionCancelled(error: unknown): boolean {\n\treturn (\n\t\terror instanceof SupervisorRecoveryCancelledError ||\n\t\t(typeof error === \"object\" &&\n\t\t\terror !== null &&\n\t\t\t\"code\" in error &&\n\t\t\t(error as { code?: unknown }).code === \"supervisor_recovery_cancelled\")\n\t);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n\nfunction unrefDelay(ms: number): Promise<void> {\n\treturn new Promise((resolveDelay) => setTimeout(resolveDelay, ms).unref());\n}\n\nfunction commitWorkerStartupGate(gate: Writable): Promise<void> {\n\treturn new Promise((resolveCommit, rejectCommit) => {\n\t\tlet settled = false;\n\t\tconst finish = (error?: Error | null) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tif (error) {\n\t\t\t\trejectCommit(error);\n\t\t\t} else {\n\t\t\t\tresolveCommit();\n\t\t\t}\n\t\t};\n\t\tconst onError = (error: Error) => finish(error);\n\t\tgate.on(\"error\", onError);\n\t\tgate.once(\"close\", () => gate.off(\"error\", onError));\n\t\tgate.end(DAEMON_WORKER_STARTUP_GATE_COMMIT, (error?: Error | null) => finish(error));\n\t});\n}\n\nfunction withoutCommandId(command: DaemonCommand): DaemonCommandBody {\n\tconst { id: _id, ...body } = command;\n\treturn body as DaemonCommandBody;\n}\n\nfunction withoutSupervisorCreateFields(command: DaemonCreateCommand): DaemonCreateCommand {\n\tconst { launchEnv: _launchEnv, lifecycle: _lifecycle, ...workerCommand } = command;\n\treturn workerCommand;\n}\n\nfunction responseWithId(response: DaemonResponse, id: string | undefined): DaemonResponse {\n\treturn { ...response, id };\n}\n\nfunction isSessionSummary(value: unknown): value is SessionSummary {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as { id?: unknown; sessionId?: unknown; cwd?: unknown };\n\treturn (\n\t\ttypeof candidate.id === \"string\" && typeof candidate.sessionId === \"string\" && typeof candidate.cwd === \"string\"\n\t);\n}\n\nfunction isDaemonWorkerDescriptor(value: unknown, socketPath: string): value is DaemonWorkerDescriptor {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst descriptor = value as Partial<DaemonWorkerDescriptor>;\n\treturn (\n\t\t(descriptor.version === 1 || descriptor.version === 2) &&\n\t\ttypeof descriptor.supervisorSocketPath === \"string\" &&\n\t\tnormalizeSocketPath(descriptor.supervisorSocketPath) === socketPath &&\n\t\ttypeof descriptor.workerId === \"string\" &&\n\t\tNumber.isInteger(descriptor.pid) &&\n\t\t(descriptor.pid ?? 0) > 0 &&\n\t\t(descriptor.processStartId === undefined || typeof descriptor.processStartId === \"string\") &&\n\t\t(descriptor.ownerClientId === undefined || typeof descriptor.ownerClientId === \"string\") &&\n\t\ttypeof descriptor.socketPath === \"string\" &&\n\t\ttypeof descriptor.authenticationToken === \"string\" &&\n\t\ttypeof descriptor.rootActiveSessionId === \"string\" &&\n\t\ttypeof descriptor.createdAt === \"string\" &&\n\t\ttypeof descriptor.updatedAt === \"string\" &&\n\t\tNumber.isInteger(descriptor.consecutiveFailures) &&\n\t\tdescriptor.createCommand !== undefined &&\n\t\ttypeof descriptor.createCommand === \"object\" &&\n\t\tdescriptor.createCommand.type === \"create\"\n\t);\n}\n\nfunction sessionSummariesFromResponse(response: DaemonResponse): SessionSummary[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\" || !(\"sessions\" in response.data)) {\n\t\tthrow new Error(\"Session worker returned an invalid list response\");\n\t}\n\tconst sessions = (response.data as { sessions: unknown }).sessions;\n\tif (!Array.isArray(sessions) || !sessions.every(isSessionSummary)) {\n\t\tthrow new Error(\"Session worker returned an invalid list response\");\n\t}\n\treturn sessions;\n}\n\nfunction attachResultFromResponse(response: DaemonResponse): DaemonAttachResult {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\tthrow new Error(response.success ? \"Session worker returned an invalid attach response\" : response.error);\n\t}\n\tconst candidate = response.data as Partial<DaemonAttachResult>;\n\tif (typeof candidate.activeSessionId !== \"string\" || !candidate.snapshot || !candidate.client) {\n\t\tthrow new Error(\"Session worker returned an invalid attach response\");\n\t}\n\treturn candidate as DaemonAttachResult;\n}\n\nfunction cronJobsFromResponse(response: DaemonResponse): AgentCronJob[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst jobs = (response.data as { jobs?: unknown }).jobs;\n\treturn Array.isArray(jobs) ? (jobs as AgentCronJob[]) : [];\n}\n\nfunction heartbeatsFromResponse(response: DaemonResponse): AgentConnectionHeartbeat[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst heartbeats = (response.data as { heartbeats?: unknown }).heartbeats;\n\treturn Array.isArray(heartbeats) ? (heartbeats as AgentConnectionHeartbeat[]) : [];\n}\n\nfunction sortCronJobs(jobs: AgentCronJob[]): AgentCronJob[] {\n\treturn jobs.sort((left, right) => {\n\t\tif (left.nextRunAt === right.nextRunAt) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (left.nextRunAt === undefined) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (right.nextRunAt === undefined) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn Date.parse(left.nextRunAt) - Date.parse(right.nextRunAt);\n\t});\n}\n\nfunction descriptorKey(socketPath: string): string {\n\treturn createHash(\"sha256\").update(normalizeSocketPath(socketPath)).digest(\"hex\").slice(0, 12);\n}\n\nfunction defaultWorkerDescriptorDir(agentDir: string, socketPath: string): string {\n\treturn join(agentDir, \"daemon-workers\", descriptorKey(socketPath));\n}\n\nexport function idleEvictionSweepIntervalMs(idleEvictionMinutes: IdleEvictionMinutes): number {\n\tif (idleEvictionMinutes === \"off\") return IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS;\n\treturn Math.max(\n\t\tIDLE_EVICTION_MIN_SWEEP_INTERVAL_MS,\n\t\tMath.min(IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS, (idleEvictionMinutes * 60_000) / 3),\n\t);\n}\n\nfunction workerSocketPath(supervisorSocketPath: string, workerId: string): string {\n\tconst key = descriptorKey(supervisorSocketPath);\n\tif (process.platform === \"win32\") {\n\t\treturn `\\\\\\\\.\\\\pipe\\\\asm-agent-worker-${key}-${workerId.slice(0, 12)}`;\n\t}\n\treturn join(defaultDaemonSocketDir(), `worker-${key}-${workerId.slice(0, 12)}.sock`);\n}\n\nfunction looksLikeSessionPath(selector: string): boolean {\n\treturn isAbsolute(selector) || selector.endsWith(\".jsonl\") || selector.includes(\"/\") || selector.includes(\"\\\\\");\n}\n\nfunction isFinalizedTranscriptEvent(eventType: string | undefined): boolean {\n\treturn (\n\t\teventType === \"message_end\" ||\n\t\teventType === \"turn_end\" ||\n\t\teventType === \"compaction_end\" ||\n\t\teventType === \"bash_end\"\n\t);\n}\n\nfunction normalizeCapabilities(\n\tcapabilities: readonly DaemonClientCapability[] | undefined,\n\tsupportsExtensionUi: boolean | undefined,\n): Set<DaemonClientCapability> {\n\tconst normalized = new Set(capabilities ?? DAEMON_DEFAULT_CLIENT_CAPABILITIES);\n\tif (supportsExtensionUi) {\n\t\tnormalized.add(\"extension_ui\");\n\t}\n\treturn normalized;\n}\n\nfunction mergeSessionLists(active: readonly SessionSummary[], saved: readonly SessionInfo[]): SessionSummary[] {\n\tconst activeByFile = new Map<string, SessionSummary>();\n\tfor (const summary of active) {\n\t\tif (summary.sessionFile) {\n\t\t\tactiveByFile.set(resolve(summary.sessionFile), summary);\n\t\t}\n\t}\n\tconst merged: SessionSummary[] = [];\n\tconst seenActiveIds = new Set<string>();\n\tfor (const session of saved) {\n\t\tconst resident = activeByFile.get(resolve(session.path));\n\t\tif (resident) {\n\t\t\tmerged.push({\n\t\t\t\t...resident,\n\t\t\t\tcreated: resident.created ?? session.created.toISOString(),\n\t\t\t\tmodified: resident.modified ?? session.modified.toISOString(),\n\t\t\t\tfirstMessage: resident.firstMessage ?? session.firstMessage,\n\t\t\t});\n\t\t\tseenActiveIds.add(resident.activeSessionId ?? resident.id);\n\t\t} else {\n\t\t\tmerged.push(summaryForInactiveSession(session));\n\t\t}\n\t}\n\tfor (const summary of active) {\n\t\tif (!seenActiveIds.has(summary.activeSessionId ?? summary.id)) {\n\t\t\tmerged.push(summary);\n\t\t}\n\t}\n\treturn merged;\n}\n\nexport async function runDaemonSupervisorMode(options: DaemonSupervisorOptions): Promise<never> {\n\tconst socketPath = normalizeSocketPath(options.socketPath ?? defaultDaemonSocketPath());\n\tconst supervisor = new DaemonSupervisor(socketPath, options);\n\tawait supervisor.start();\n\treturn new Promise(() => {});\n}\n\nexport class DaemonSupervisor {\n\tprivate server?: Server;\n\tprivate readonly ready: Promise<void>;\n\tprivate markReady: () => void = () => {};\n\tprivate rejectReady: (error: Error) => void = () => {};\n\tprivate ownsSocketPath = false;\n\tprivate socketIdentity?: DaemonSocketIdentity;\n\tprivate socketLease?: DaemonSocketPathLease;\n\tprivate ownership?: Awaited<ReturnType<typeof acquireDaemonSupervisorOwnership>>;\n\tprivate cleanupPromise?: Promise<void>;\n\tprivate shuttingDown = false;\n\tprivate updateRestartPhase?: \"draining\" | \"fencing\" | \"prepared\";\n\tprivate readonly mutationDrain = new MutationDrainLatch();\n\tprivate readonly clients = new Set<DaemonSocketClient>();\n\tprivate readonly connectionIds = new WeakMap<DaemonSocketClient, string>();\n\tprivate readonly sessionInputPauseEpochs = new WeakMap<DaemonSocketClient, number>();\n\tprivate readonly detachingInputPauseSessions = new WeakMap<DaemonSocketClient, Set<string>>();\n\tprivate readonly protocolClientIds = new WeakMap<DaemonSocketClient, string>();\n\tprivate readonly workers = new Map<string, ResidentWorker>();\n\tprivate workerStopCounts?: Map<ResidentWorker, number>;\n\tprivate readonly openingWorkers = new Map<string, Promise<ResidentWorker>>();\n\t/** Public admission ids are scoped to the socket that registered them. */\n\tprivate readonly promptAdmissions = new Map<DaemonSocketClient, Map<string, SupervisorPromptAdmission>>();\n\tprivate readonly sessionInputPauses = new Map<string, SupervisorSessionInputPause>();\n\tprivate readonly signalCleanupHandlers: Array<() => void> = [];\n\tprivate readonly descriptorDir: string;\n\tprivate readonly generation = randomUUID();\n\tprivate readonly supervisorConfigPath: string;\n\tprivate readonly defaultSessionConfig: AgentSessionRuntimeConfig;\n\tprivate readonly snapshotCacheRoot: string;\n\tprivate commandJournal!: CommandRecoveryJournal;\n\tprivate readonly streamReconstructor = new CompactAssistantStreamReconstructor();\n\tprivate readonly compactCatchupInProgress = new Set<string>();\n\tprivate agentPeerSyncQueue: Promise<void> = Promise.resolve();\n\tprivate readonly pendingSessionNames = new Set<string>();\n\tprivate readonly catalog: DaemonCatalogClient;\n\tprivate readonly settingsManager: SettingsManager;\n\tprivate rlmSpawnLedgerInstance?: RlmSpawnLedger;\n\tprivate idleEvictionTimer?: ReturnType<typeof setTimeout>;\n\tprivate idleEvictionSweep?: Promise<void>;\n\tprivate idleEvictionFence?: Promise<void>;\n\n\tconstructor(\n\t\tprivate readonly socketPath: string,\n\t\toptions: DaemonSupervisorOptions,\n\t) {\n\t\tthis.ready = new Promise<void>((resolveReady, rejectReady) => {\n\t\t\tthis.markReady = resolveReady;\n\t\t\tthis.rejectReady = rejectReady;\n\t\t});\n\t\tvoid this.ready.catch(() => undefined);\n\t\tconst agentDir = options.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tthis.descriptorDir = options.descriptorDir ?? defaultWorkerDescriptorDir(agentDir, socketPath);\n\t\tthis.supervisorConfigPath = join(this.descriptorDir, SUPERVISOR_CONFIG_FILE_NAME);\n\t\tthis.defaultSessionConfig = mergeAgentSessionRuntimeConfig(\n\t\t\toptions.defaultSessionConfig,\n\t\t\tthis.loadPersistedSupervisorConfig(),\n\t\t);\n\t\tthis.snapshotCacheRoot = join(this.descriptorDir, \"snapshot-cache\", this.generation);\n\t\tthis.catalog = new DaemonCatalogClient((message) => this.log(message));\n\t\tthis.settingsManager = SettingsManager.create(process.cwd(), this.defaultSessionConfig.agentDir ?? agentDir);\n\t}\n\n\tasync start(): Promise<void> {\n\t\ttry {\n\t\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\t\tif (!agentDir) {\n\t\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t\t}\n\t\t\tthis.socketLease = await acquireDaemonSocketPathLease(this.socketPath);\n\t\t\tawait waitForDaemonStartupFence(this.socketPath);\n\t\t\tthis.ownership = await acquireDaemonSupervisorOwnership({\n\t\t\t\tsocketPath: this.socketPath,\n\t\t\t\tdescriptorDir: this.descriptorDir,\n\t\t\t\tagentDir,\n\t\t\t\tgeneration: this.generation,\n\t\t\t\tappVersion: VERSION,\n\t\t\t});\n\t\t\tawait prepareDaemonSocketPath(this.socketPath, this.socketLease);\n\n\t\t\tmkdirSync(this.descriptorDir, { recursive: true, mode: 0o700 });\n\t\t\tchmodSync(this.descriptorDir, 0o700);\n\t\t\tthis.persistSupervisorConfig();\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t\tmkdirSync(this.snapshotCacheRoot, { recursive: true, mode: 0o700 });\n\t\t\tthis.commandJournal = new CommandRecoveryJournal(join(this.descriptorDir, \"command-journal.jsonl\"));\n\t\t\tthis.loadWorkerDescriptors();\n\t\t\tconst workersToAdopt = [...this.workers.values()];\n\n\t\t\tthis.server = createServer((socket) => this.handleConnection(socket));\n\t\t\tawait this.listen();\n\t\t\tthis.socketIdentity = getDaemonSocketIdentity(this.socketPath);\n\t\t\tif (process.platform !== \"win32\" && !this.socketIdentity) {\n\t\t\t\tthrow new Error(`Could not capture daemon socket identity: ${this.socketPath}`);\n\t\t\t}\n\t\t\tthis.ownsSocketPath = true;\n\t\t\trestrictDaemonSocketPath(this.socketPath);\n\n\t\t\tthis.registerSignalHandlers();\n\t\t\tconst ownedSessionFiles = new Set(\n\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t.flatMap((worker) => [worker.descriptor.sessionFile, worker.descriptor.createCommand.sessionPath])\n\t\t\t\t\t.filter((path): path is string => typeof path === \"string\")\n\t\t\t\t\t.map((path) => resolve(path)),\n\t\t\t);\n\t\t\tconst migratedJobs = migrateLegacyCronJobsToSessionArtifacts(getCronJobsPath(agentDir), {\n\t\t\t\tisSessionOwned: (job) => ownedSessionFiles.has(resolve(job.sessionFile)),\n\t\t\t});\n\t\t\tif (migratedJobs > 0) {\n\t\t\t\tthis.log(`Migrated ${migratedJobs} scheduled jobs into session artifacts`);\n\t\t\t}\n\t\t\tawait this.catalog.start().catch((error) => this.log(`Could not start daemon catalog: ${String(error)}`));\n\t\t\tlet adoptionFailure: unknown;\n\t\t\tlet adoptionFailed = false;\n\t\t\tawait Promise.all(\n\t\t\t\tworkersToAdopt.map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.adoptOrRecoverWorker(worker);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!adoptionFailed) {\n\t\t\t\t\t\t\tadoptionFailed = true;\n\t\t\t\t\t\t\tadoptionFailure = error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (adoptionFailed) {\n\t\t\t\tthrow adoptionFailure;\n\t\t\t}\n\t\t\tawait this.syncAgentPeers().catch((error) => this.log(`Could not synchronize agent peers: ${String(error)}`));\n\t\t\tfor (const worker of this.workers.values()) {\n\t\t\t\tthis.scheduleOwnedWorkerCleanup(worker);\n\t\t\t}\n\t\t\tthis.scheduleIdleEvictionSweep();\n\t\t\tawait this.ownership.updatePhase(\"owner\");\n\t\t\tthis.log(`ASM Agent daemon supervisor ${this.generation} listening on ${this.socketPath}`);\n\t\t\tthis.markReady();\n\t\t} catch (error) {\n\t\t\tconst startupError = error instanceof Error ? error : new Error(String(error));\n\t\t\tthis.log(`Daemon supervisor startup failed: ${startupError.stack ?? startupError.message}`);\n\t\t\tawait this.cleanupSupervisorResources();\n\t\t\tthis.rejectReady(startupError);\n\t\t\tthrow startupError;\n\t\t}\n\t}\n\n\tprivate listen(): Promise<void> {\n\t\treturn new Promise<void>((resolveListen, rejectListen) => {\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tthis.server?.off(\"listening\", onListening);\n\t\t\t\trejectListen(error);\n\t\t\t};\n\t\t\tconst onListening = () => {\n\t\t\t\tthis.server?.off(\"error\", onError);\n\t\t\t\tresolveListen();\n\t\t\t};\n\t\t\tthis.server?.once(\"error\", onError);\n\t\t\tthis.server?.once(\"listening\", onListening);\n\t\t\tthis.server?.listen(this.socketPath);\n\t\t});\n\t}\n\n\tprivate log(message: string): void {\n\t\tconsole.error(message);\n\t\tstructuredLog.warn(message, { socketPath: this.socketPath });\n\t\tappendRotatingLog(getDaemonLogPath(this.socketPath), `[${new Date().toISOString()}] supervisor: ${message}`);\n\t}\n\n\tprivate clearIdleEvictionTimer(): void {\n\t\tif (!this.idleEvictionTimer) return;\n\t\tclearTimeout(this.idleEvictionTimer);\n\t\tthis.idleEvictionTimer = undefined;\n\t}\n\n\tprivate scheduleIdleEvictionSweep(): void {\n\t\tif (this.shuttingDown || this.idleEvictionTimer || this.idleEvictionSweep) return;\n\t\tconst delayMs = idleEvictionSweepIntervalMs(this.settingsManager.getIdleEvictionMinutes());\n\t\tthis.idleEvictionTimer = setTimeout(() => {\n\t\t\tthis.idleEvictionTimer = undefined;\n\t\t\tconst sweep = this.runIdleEvictionSweep()\n\t\t\t\t.catch((error) => this.log(`Idle eviction sweep failed: ${String(error)}`))\n\t\t\t\t.finally(() => {\n\t\t\t\t\tif (this.idleEvictionSweep === sweep) this.idleEvictionSweep = undefined;\n\t\t\t\t\tthis.scheduleIdleEvictionSweep();\n\t\t\t\t});\n\t\t\tthis.idleEvictionSweep = sweep;\n\t\t}, delayMs);\n\t\tthis.idleEvictionTimer.unref();\n\t}\n\n\tprivate workerEvictionSnapshot(worker: ResidentWorker): WorkerEvictionSnapshot {\n\t\treturn {\n\t\t\tlifecycle: worker.descriptor.lifecycle,\n\t\t\tisConnected: worker.client !== undefined,\n\t\t\tisStopping: this.isWorkerStopping(worker),\n\t\t\thasOwnerClient: worker.descriptor.ownerClientId !== undefined,\n\t\t\tisPreparingUpdateRestart:\n\t\t\t\tthis.updateRestartPhase !== undefined || worker.updateRestartPrepareClient !== undefined,\n\t\t\tsessions: [...worker.summaries.values()].map((summary) => {\n\t\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\t\treturn {\n\t\t\t\t\t// Use the canonical busy projection: a parent remains active for\n\t\t\t\t\t// residency purposes while any of its RLM descendants is running.\n\t\t\t\t\tisSessionActive: isSessionSummaryBusy(summary),\n\t\t\t\t\tattachedClients: [...this.clients].filter((client) =>\n\t\t\t\t\t\tclient.attachedActiveSessionIds.has(activeSessionId),\n\t\t\t\t\t).length,\n\t\t\t\t\thasRegisteredHeartbeat: summary.hasRegisteredHeartbeat === true,\n\t\t\t\t\thasRegisteredCronJob: summary.hasRegisteredCronJob === true,\n\t\t\t\t\tlastActivityAt: Date.parse(summary.lastActivityAt ?? \"\"),\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate async runIdleEvictionSweep(now = Date.now()): Promise<void> {\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined || this.idleEvictionFence) return;\n\t\tawait this.settingsManager.reload();\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\tconst idleEvictionMinutes = this.settingsManager.getIdleEvictionMinutes();\n\t\tif (idleEvictionMinutes === \"off\") return;\n\n\t\tconst refreshed = new Set<ResidentWorker>();\n\t\tawait Promise.all(\n\t\t\t[...this.workers.values()].map(async (worker) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\trefreshed.add(worker);\n\t\t\t\t} catch {\n\t\t\t\t\t// A disconnected or transitioning worker is never an eviction candidate.\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\tconst candidates = [...refreshed].filter((worker) =>\n\t\t\tcanEvictWorker(this.workerEvictionSnapshot(worker), idleEvictionMinutes, now),\n\t\t);\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t// Whole-tree candidates skip child work because stopWorker releases everything.\n\t\tawait Promise.all(\n\t\t\t[...refreshed]\n\t\t\t\t.filter((worker) => !candidates.includes(worker))\n\t\t\t\t.map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await worker.client?.requestWorker(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"worker_passivate_idle_children\",\n\t\t\t\t\t\t\t\tidleEvictionMinutes,\n\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\tlimit: CHILD_PASSIVATION_PER_WORKER_CAP,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t30_000,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (response && !response.success) throw new Error(response.error);\n\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\trefreshed.delete(worker);\n\t\t\t\t\t\tthis.log(`Child passivation sweep failed for worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t);\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\n\t\tlet releaseFence: () => void = () => {};\n\t\tconst fence = new Promise<void>((resolveFence) => {\n\t\t\treleaseFence = resolveFence;\n\t\t});\n\t\tthis.idleEvictionFence = fence;\n\t\ttry {\n\t\t\tawait this.mutationDrain.waitForDrain(\n\t\t\t\t0,\n\t\t\t\tAbortSignal.timeout(IDLE_EVICTION_DRAIN_TIMEOUT_MS),\n\t\t\t\t\"Timed out draining daemon mutations for idle eviction\",\n\t\t\t);\n\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\tawait Promise.all(\n\t\t\t\tcandidates.map((worker) => this.refreshWorkerSummaries(worker).catch(() => refreshed.delete(worker))),\n\t\t\t);\n\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\tconst evictable = candidates.filter(\n\t\t\t\t(worker) =>\n\t\t\t\t\trefreshed.has(worker) &&\n\t\t\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\t\t\tcanEvictWorker(this.workerEvictionSnapshot(worker), idleEvictionMinutes, now),\n\t\t\t);\n\t\t\t// Promise.all may reject and release the fence while sibling stops are still\n\t\t\t// finishing. That is safe: a racing mutation either reaches a live worker or\n\t\t\t// gets a clean disconnected/unknown-session error.\n\t\t\tawait Promise.all(\n\t\t\t\tevictable.map(async (worker) => {\n\t\t\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\t\t\tconst snapshot = this.workerEvictionSnapshot(worker);\n\t\t\t\t\tconst idleMinutes = Math.floor(\n\t\t\t\t\t\tMath.min(...snapshot.sessions.map((session) => now - session.lastActivityAt)) / 60_000,\n\t\t\t\t\t);\n\t\t\t\t\tconst root = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\t\tawait this.stopWorker(worker, true);\n\t\t\t\t\tthis.log(\n\t\t\t\t\t\t`Evicted idle worker ${worker.descriptor.workerId} root=${root?.sessionId ?? worker.descriptor.rootSessionId ?? worker.descriptor.rootActiveSessionId} idleMinutes=${idleMinutes} sessions=${snapshot.sessions.length}`,\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t);\n\t\t} finally {\n\t\t\tif (this.idleEvictionFence === fence) this.idleEvictionFence = undefined;\n\t\t\treleaseFence();\n\t\t}\n\t}\n\n\tprivate async assertCurrentOwnership(): Promise<void> {\n\t\tconst ownership = this.ownership;\n\t\tif (!ownership) {\n\t\t\tconst error = new Error(\n\t\t\t\t`Daemon supervisor generation ${this.generation} holds no registry ownership (never acquired or already released); ` +\n\t\t\t\t\t`socket: ${this.socketPath}; restart the daemon to recover — sessions are preserved`,\n\t\t\t);\n\t\t\tObject.assign(error, { code: \"supervisor_generation_stale\" as const });\n\t\t\tthrow error;\n\t\t}\n\t\tawait ownership.assertCurrent();\n\t}\n\n\tprivate async assertRecoveryAllowed(): Promise<void> {\n\t\tawait this.assertCurrentOwnership();\n\t\tif (await isDaemonShutdownAdmissionActive()) {\n\t\t\tthrow new SupervisorRecoveryCancelledError(\"Daemon shutdown admission cancelled worker recovery\");\n\t\t}\n\t}\n\n\tprivate supervisorAuthenticationClaim(): {\n\t\tsupervisorGeneration: string;\n\t\tsupervisorPid: number;\n\t\tsupervisorProcessStartId?: string;\n\t\tsupervisorSocketPath: string;\n\t} {\n\t\tconst record = this.ownership?.record;\n\t\tif (!record) {\n\t\t\tthrow new SupervisorRecoveryCancelledError(\"Daemon supervisor ownership is unavailable\");\n\t\t}\n\t\treturn {\n\t\t\tsupervisorGeneration: this.generation,\n\t\t\tsupervisorPid: record.pid,\n\t\t\t...(record.processStartId ? { supervisorProcessStartId: record.processStartId } : {}),\n\t\t\tsupervisorSocketPath: record.socketPath,\n\t\t};\n\t}\n\n\tprivate loadWorkerDescriptors(): void {\n\t\tfor (const name of readdirSync(this.descriptorDir)) {\n\t\t\tif (name === SUPERVISOR_CONFIG_FILE_NAME || !name.endsWith(\".json\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst path = join(this.descriptorDir, name);\n\t\t\ttry {\n\t\t\t\tconst descriptor: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\t\t\tif (!isDaemonWorkerDescriptor(descriptor, this.socketPath)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdescriptor.supervisorSocketPath = normalizeSocketPath(descriptor.supervisorSocketPath);\n\t\t\t\tdescriptor.lifecycle = \"recovering\";\n\t\t\t\tdescriptor.recoveryJournalPath ??= join(this.descriptorDir, `${descriptor.workerId}.recovery.jsonl`);\n\t\t\t\tdescriptor.orphanProcessJournalPath ??= join(this.descriptorDir, `${descriptor.workerId}.orphans.jsonl`);\n\t\t\t\tconst durableDescriptor = durableDaemonWorkerDescriptor(descriptor);\n\t\t\t\tconst worker: ResidentWorker = {\n\t\t\t\t\tdescriptor: durableDescriptor,\n\t\t\t\t\tdescriptorPath: path,\n\t\t\t\t\tsummaries: new Map(),\n\t\t\t\t\tsnapshotCache: new Map(),\n\t\t\t\t\ttranscriptCaches: new Map(),\n\t\t\t\t\tsnapshotGenerations: new Map(),\n\t\t\t\t\tsnapshotLoads: new Map(),\n\t\t\t\t\tintentionalStop: durableDescriptor.stopRequestedAt !== undefined,\n\t\t\t\t\tstopRevision: 0,\n\t\t\t\t};\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tthis.workers.set(durableDescriptor.workerId, worker);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Ignoring invalid worker descriptor ${path}: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate loadPersistedSupervisorConfig(): AgentSessionRuntimeConfig | undefined {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(\n\t\t\t\treadFileSync(this.supervisorConfigPath, \"utf8\"),\n\t\t\t) as Partial<PersistedSupervisorConfig>;\n\t\t\tif (\n\t\t\t\tparsed.version !== 1 ||\n\t\t\t\ttypeof parsed.socketPath !== \"string\" ||\n\t\t\t\tnormalizeSocketPath(parsed.socketPath) !== this.socketPath ||\n\t\t\t\t!parsed.defaultSessionConfig ||\n\t\t\t\ttypeof parsed.defaultSessionConfig !== \"object\" ||\n\t\t\t\ttypeof parsed.defaultSessionConfig.agentDir !== \"string\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn durableAgentSessionRuntimeConfig(parsed.defaultSessionConfig);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate persistSupervisorConfig(): void {\n\t\tconst persisted: PersistedSupervisorConfig = {\n\t\t\tversion: 1,\n\t\t\tsocketPath: this.socketPath,\n\t\t\tdefaultSessionConfig: durableAgentSessionRuntimeConfig(this.defaultSessionConfig),\n\t\t};\n\t\tconst tempPath = `${this.supervisorConfigPath}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(persisted, null, 2)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, this.supervisorConfigPath);\n\t}\n\n\tprivate hasPersistedWorkerDescriptors(): boolean {\n\t\treturn readdirSync(this.descriptorDir).some(\n\t\t\t(name) => name !== SUPERVISOR_CONFIG_FILE_NAME && name.endsWith(\".json\"),\n\t\t);\n\t}\n\n\tprivate persistWorker(worker: ResidentWorker): void {\n\t\tworker.descriptor.updatedAt = new Date().toISOString();\n\t\tconst persisted = durableDaemonWorkerDescriptor(worker.descriptor);\n\t\tconst tempPath = `${worker.descriptorPath}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(persisted, null, 2)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, worker.descriptorPath);\n\t}\n\n\tprivate deleteWorkerDescriptor(worker: ResidentWorker): void {\n\t\ttry {\n\t\t\trmSync(worker.descriptorPath, { force: true });\n\t\t\trmSync(worker.descriptor.recoveryJournalPath, { force: true });\n\t\t\tif (worker.descriptor.orphanProcessJournalPath) {\n\t\t\t\trmSync(worker.descriptor.orphanProcessJournalPath, { force: true });\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.log(`Failed to remove worker descriptor ${worker.descriptorPath}: ${String(error)}`);\n\t\t}\n\t}\n\n\tprivate handleConnection(socket: Socket): void {\n\t\tconst client: DaemonSocketClient = {\n\t\t\tid: createActiveSessionId(),\n\t\t\tsocket,\n\t\t\tattachedActiveSessionIds: new Set(),\n\t\t\tcatchupActiveSessionIds: new Set(),\n\t\t\tbackpressured: false,\n\t\t\tauthenticated: true,\n\t\t\tsnapshotActiveSessionIds: new Set(),\n\t\t\tdetachInput: () => {},\n\t\t\tsupportsExtensionUi: false,\n\t\t\tcapabilities: new Set(DAEMON_DEFAULT_CLIENT_CAPABILITIES),\n\t\t};\n\t\tthis.connectionIds.set(client, client.id);\n\t\tthis.sessionInputPauseEpochs.set(client, 0);\n\t\tthis.detachingInputPauseSessions.set(client, new Set());\n\t\tthis.clients.add(client);\n\t\tvoid this.ready.then(\n\t\t\t() => {\n\t\t\t\tif (!client.socket.destroyed && this.clients.has(client)) {\n\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\ttype: \"daemon_hello\",\n\t\t\t\t\t\tsocketPath: this.socketPath,\n\t\t\t\t\t\tprotocol: DAEMON_PROTOCOL_INFO,\n\t\t\t\t\t\tschemaId: DAEMON_SCHEMA_ID,\n\t\t\t\t\t\tschemaRevision: DAEMON_SCHEMA_REVISION,\n\t\t\t\t\t\tappVersion: VERSION,\n\t\t\t\t\t\truntime: getDaemonRuntimeIdentity(),\n\t\t\t\t\t\tsupervisorGeneration: this.generation,\n\t\t\t\t\t\tsupervisorOwnerToken: this.ownership?.record.token,\n\t\t\t\t\t\tsupervisorPid: process.pid,\n\t\t\t\t\t\tsupervisorProcessStartId: this.ownership?.record.processStartId,\n\t\t\t\t\t\tsupervisorSocketPath: this.ownership?.record.socketPath,\n\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\tserverCapabilities: DAEMON_DEFAULT_SERVER_CAPABILITIES,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => client.socket.destroy(),\n\t\t);\n\n\t\tclient.detachInput = attachJsonlLineReader(socket, (line) => void this.handleLine(client, line));\n\t\tlet cleaned = false;\n\t\tconst cleanup = () => {\n\t\t\tif (cleaned) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleaned = true;\n\t\t\tclient.detachInput();\n\t\t\tthis.sessionInputPauseEpochs.set(client, (this.sessionInputPauseEpochs.get(client) ?? 0) + 1);\n\t\t\tconst ownerClientId = this.protocolClientId(client);\n\t\t\tvoid this.releaseClientSessionInputPauses(client, undefined, true).catch((error: unknown) =>\n\t\t\t\tthis.log(`Failed to release input pauses for disconnected client ${ownerClientId}: ${String(error)}`),\n\t\t\t);\n\t\t\tthis.clients.delete(client);\n\t\t\tthis.cancelWaitingPromptAdmissionsForClient(client);\n\t\t\tfor (const activeSessionId of [...client.attachedActiveSessionIds]) {\n\t\t\t\tclient.attachedActiveSessionIds.delete(activeSessionId);\n\t\t\t\tvoid this.syncWorkerExtensionUi(activeSessionId);\n\t\t\t}\n\t\t\tthis.scheduleOwnedWorkerCleanupForClient(this.protocolClientId(client));\n\t\t};\n\t\tsocket.on(\"close\", cleanup);\n\t\tsocket.on(\"error\", cleanup);\n\t\tsocket.on(\"drain\", () => {\n\t\t\tclient.backpressured = false;\n\t\t\tif (!client.snapshotStreaming) {\n\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate cancelOwnedWorkerCleanup(clientId: string): void {\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.descriptor.ownerClientId !== clientId || !worker.ownerCleanupTimer) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t}\n\n\tprivate protocolClientId(client: DaemonSocketClient): string {\n\t\treturn this.protocolClientIds.get(client) ?? client.id;\n\t}\n\n\tprivate async releaseClientSessionInputPauses(\n\t\towner: DaemonSocketClient,\n\t\tactiveSessionId?: string,\n\t\tforceCleanupOnFailure = false,\n\t): Promise<void> {\n\t\tconst entries = [...this.sessionInputPauses.values()].filter(\n\t\t\t(entry) =>\n\t\t\t\tentry.owner === owner &&\n\t\t\t\t(activeSessionId === undefined ||\n\t\t\t\t\tentry.activeSessionId === activeSessionId ||\n\t\t\t\t\tentry.requestedActiveSessionId === activeSessionId),\n\t\t);\n\t\tawait Promise.all(\n\t\t\tentries.map(async (entry) => {\n\t\t\t\tif (this.workers.get(entry.worker.descriptor.workerId) !== entry.worker || !entry.worker.client) {\n\t\t\t\t\tif (this.sessionInputPauses.get(entry.pauseId) === entry) this.sessionInputPauses.delete(entry.pauseId);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await this.forwardToWorker(\n\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: randomUUID(),\n\t\t\t\t\t\t\ttype: \"release_session_input_pause\",\n\t\t\t\t\t\t\tactiveSessionId: entry.activeSessionId,\n\t\t\t\t\t\t\tpauseId: entry.pauseId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tINPUT_PAUSE_CLEANUP_TIMEOUT_MS,\n\t\t\t\t\t);\n\t\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\t\tif (this.sessionInputPauses.get(entry.pauseId) === entry) this.sessionInputPauses.delete(entry.pauseId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (forceCleanupOnFailure) {\n\t\t\t\t\t\tconst workerClient = entry.worker.client;\n\t\t\t\t\t\tif (workerClient) {\n\t\t\t\t\t\t\tworkerClient.close();\n\t\t\t\t\t\t\tawait this.handleWorkerClose(\n\t\t\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t\t\tworkerClient,\n\t\t\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.invalidateWorkerSessionInputPauses(\n\t\t\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t\t\t\"Session worker became unavailable while releasing an input pause\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate invalidateWorkerSessionInputPauses(worker: ResidentWorker, reason: string): void {\n\t\tconst owners = new Set<DaemonSocketClient>();\n\t\tfor (const [pauseId, entry] of this.sessionInputPauses) {\n\t\t\tif (entry.worker !== worker) continue;\n\t\t\tthis.sessionInputPauses.delete(pauseId);\n\t\t\towners.add(entry.owner);\n\t\t}\n\t\tfor (const owner of owners) {\n\t\t\towner.socket.destroy(new Error(reason));\n\t\t}\n\t}\n\n\tprivate scheduleOwnedWorkerCleanupForClient(clientId: string): void {\n\t\tif ([...this.clients].some((client) => this.protocolClientId(client) === clientId)) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.descriptor.ownerClientId === clientId) {\n\t\t\t\tthis.scheduleOwnedWorkerCleanup(worker);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleOwnedWorkerCleanup(worker: ResidentWorker): void {\n\t\tconst ownerClientId = worker.descriptor.ownerClientId;\n\t\tif (\n\t\t\t!ownerClientId ||\n\t\t\tworker.ownerCleanupTimer ||\n\t\t\t[...this.clients].some((client) => this.protocolClientId(client) === ownerClientId)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tworker.ownerCleanupTimer = setTimeout(() => {\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t\tif (\n\t\t\t\tworker.descriptor.ownerClientId !== ownerClientId ||\n\t\t\t\t[...this.clients].some((client) => this.protocolClientId(client) === ownerClientId) ||\n\t\t\t\tthis.workers.get(worker.descriptor.workerId) !== worker\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid this.stopWorker(worker, true).catch((error) =>\n\t\t\t\tthis.log(`Could not clean up client-owned worker ${worker.descriptor.workerId}: ${String(error)}`),\n\t\t\t);\n\t\t}, OWNED_WORKER_DISCONNECT_GRACE_MS);\n\t\tworker.ownerCleanupTimer.unref();\n\t}\n\n\tprivate promptAdmissionKey(activeSessionId: string, publicAdmissionId: string): string {\n\t\treturn `${activeSessionId}\\0${publicAdmissionId}`;\n\t}\n\n\tprivate promptAdmissionsFor(client: DaemonSocketClient): Map<string, SupervisorPromptAdmission> {\n\t\tlet admissions = this.promptAdmissions.get(client);\n\t\tif (!admissions) {\n\t\t\tadmissions = new Map();\n\t\t\tthis.promptAdmissions.set(client, admissions);\n\t\t}\n\t\treturn admissions;\n\t}\n\n\tprivate getPromptAdmission(\n\t\tclient: DaemonSocketClient,\n\t\tactiveSessionId: string,\n\t\tpublicAdmissionId: string,\n\t): SupervisorPromptAdmission | undefined {\n\t\treturn this.promptAdmissions.get(client)?.get(this.promptAdmissionKey(activeSessionId, publicAdmissionId));\n\t}\n\n\tprivate deletePromptAdmission(admission: SupervisorPromptAdmission): void {\n\t\tconst admissions = this.promptAdmissions.get(admission.client);\n\t\tconst key = this.promptAdmissionKey(admission.activeSessionId, admission.publicAdmissionId);\n\t\tif (admissions?.get(key) !== admission) return;\n\t\tadmissions.delete(key);\n\t\tif (admissions.size === 0) this.promptAdmissions.delete(admission.client);\n\t}\n\n\tprivate cancelWaitingPromptAdmissionsForClient(client: DaemonSocketClient): void {\n\t\tfor (const admission of this.promptAdmissions.get(client)?.values() ?? []) {\n\t\t\tif (admission.status !== \"waiting\") continue;\n\t\t\tif (!admission.worker || !admission.workerActiveSessionId) {\n\t\t\t\tadmission.status = \"cancelled\";\n\t\t\t\tadmission.controller.abort();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst worker = admission.worker;\n\t\t\tconst workerActiveSessionId = admission.workerActiveSessionId;\n\t\t\tvoid this.forwardToWorker(worker, {\n\t\t\t\ttype: \"cancel_prompt_admission\",\n\t\t\t\tactiveSessionId: workerActiveSessionId,\n\t\t\t\tadmissionId: admission.workerAdmissionId,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tif (admission.status !== \"waiting\") return;\n\t\t\t\t\tconst status =\n\t\t\t\t\t\tresponse.success && response.data && typeof response.data === \"object\" && \"status\" in response.data\n\t\t\t\t\t\t\t? (response.data as { status?: unknown }).status\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (status === \"owned\") admission.status = \"owned\";\n\t\t\t\t\telse if (status === \"cancelled\") admission.status = \"cancelled\";\n\t\t\t\t})\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\tthis.log(\n\t\t\t\t\t\t`Could not cancel prompt admission ${admission.workerAdmissionId} on disconnected client: ${String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Non-async by design: prompt registration completes before handleLine's first await. */\n\tprivate parseCommandAndRegisterPromptAdmission(\n\t\tclient: DaemonSocketClient,\n\t\tline: string,\n\t): {\n\t\tcommand: DaemonCommand;\n\t\tenvelopeClientId?: string;\n\t\tprotocolVersion: number;\n\t\tadmission?: SupervisorPromptAdmission;\n\t} {\n\t\tconst parsed = JSON.parse(line) as unknown;\n\t\tconst envelope = isDaemonCommandEnvelope(parsed) ? parsed : undefined;\n\t\tif (!envelope) {\n\t\t\tthrow new Error(`Daemon commands require protocol ${DAEMON_COMMAND_ENVELOPE_MIN_PROTOCOL_VERSION} or newer`);\n\t\t}\n\t\tconst command = { ...envelope.command, id: envelope.id } as DaemonCommand;\n\t\tlet admission: SupervisorPromptAdmission | undefined;\n\t\tif ((command.type === \"prompt\" || command.type === \"prompt_and_wait\") && command.admissionId !== undefined) {\n\t\t\tif (typeof command.activeSessionId !== \"string\" || typeof command.admissionId !== \"string\") {\n\t\t\t\tthrow new Error(\"Prompt admission requires string activeSessionId and admissionId\");\n\t\t\t}\n\t\t\tif (command.admissionId === \"\") throw new Error(\"admissionId must not be empty\");\n\t\t\tconst admissions = this.promptAdmissionsFor(client);\n\t\t\tconst key = this.promptAdmissionKey(command.activeSessionId, command.admissionId);\n\t\t\tif (admissions.has(key)) {\n\t\t\t\tthrow new Error(`Prompt admission id is already in use: ${command.admissionId}`);\n\t\t\t}\n\t\t\tadmission = {\n\t\t\t\tclient,\n\t\t\t\tactiveSessionId: command.activeSessionId,\n\t\t\t\tpublicAdmissionId: command.admissionId,\n\t\t\t\tworkerAdmissionId: `supervisor-admission:${randomUUID()}`,\n\t\t\t\tstatus: \"waiting\",\n\t\t\t\tcontroller: new AbortController(),\n\t\t\t};\n\t\t\tadmissions.set(key, admission);\n\t\t}\n\t\treturn {\n\t\t\tcommand,\n\t\t\tenvelopeClientId: envelope.clientId ?? client.id,\n\t\t\tprotocolVersion: envelope.protocol.version,\n\t\t\tadmission,\n\t\t};\n\t}\n\n\tprivate async handleLine(client: DaemonSocketClient, line: string): Promise<void> {\n\t\tlet preParsed: ReturnType<DaemonSupervisor[\"parseCommandAndRegisterPromptAdmission\"]>;\n\t\ttry {\n\t\t\tpreParsed = this.parseCommandAndRegisterPromptAdmission(client, line);\n\t\t} catch (error) {\n\t\t\tthis.write(client, failure(salvageDaemonCommandId(line), \"parse\", error));\n\t\t\treturn;\n\t\t}\n\t\tconst command = preParsed.command;\n\t\tconst parsedAdmission = preParsed.admission;\n\t\tif (command.type === \"cancel_prompt_admission\" && this.updateRestartPhase !== undefined) {\n\t\t\tthis.write(client, failure(command.id, command.type, \"Daemon is preparing an update restart\"));\n\t\t\treturn;\n\t\t}\n\t\tconst cancellationAdmission =\n\t\t\tcommand.type === \"cancel_prompt_admission\"\n\t\t\t\t? this.getPromptAdmission(client, command.activeSessionId, command.admissionId)\n\t\t\t\t: undefined;\n\t\tif (cancellationAdmission?.status === \"waiting\" && !cancellationAdmission.worker) {\n\t\t\tcancellationAdmission.status = \"cancelled\";\n\t\t\tcancellationAdmission.controller.abort();\n\t\t}\n\t\ttry {\n\t\t\tawait waitForPromptAdmission(this.ready, parsedAdmission?.controller.signal);\n\t\t} catch (error) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, error));\n\t\t\treturn;\n\t\t}\n\t\tconst envelopeClientId = preParsed.envelopeClientId;\n\t\tif (envelopeClientId) {\n\t\t\tthis.protocolClientIds.set(client, envelopeClientId);\n\t\t\tclient.id = envelopeClientId;\n\t\t}\n\t\tthis.cancelOwnedWorkerCleanup(client.id);\n\t\tif (!DAEMON_COMMAND_TYPES.has(command.type)) {\n\t\t\tthis.write(client, failure(command.id, command.type, `Unknown daemon command: ${command.type}`));\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tcommand.type === \"get_session_tree\" &&\n\t\t\tpreParsed.protocolVersion < DAEMON_COMMAND_COMPATIBILITY.get_session_tree.minProtocol\n\t\t) {\n\t\t\tthis.write(\n\t\t\t\tclient,\n\t\t\t\tfailure(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\t`get_session_tree requires client protocol ${DAEMON_COMMAND_COMPATIBILITY.get_session_tree.minProtocol} or newer`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait waitForPromptAdmission(this.assertCurrentOwnership(), parsedAdmission?.controller.signal);\n\t\t} catch (error) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, error));\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutation = isDaemonMutatingCommand(command);\n\t\tconst journalIdentity =\n\t\t\tenvelopeClientId && command.id && mutation ? { clientId: envelopeClientId, commandId: command.id } : undefined;\n\t\tconst existing = journalIdentity\n\t\t\t? this.commandJournal.lookup(journalIdentity.clientId, journalIdentity.commandId)\n\t\t\t: undefined;\n\t\tif (existing?.status === \"complete\") {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, existing.response);\n\t\t\treturn;\n\t\t}\n\t\tif (existing?.status === \"pending\" && journalIdentity) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(\n\t\t\t\tclient,\n\t\t\t\tfailure(command.id, command.type, \"The previous command result is uncertain and was not replayed\", {\n\t\t\t\t\tcode: \"command_result_uncertain\",\n\t\t\t\t\t...journalIdentity,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst phase = this.updateRestartPhase;\n\t\tconst restartRejected =\n\t\t\tphase === \"draining\"\n\t\t\t\t? !UPDATE_RESTART_DRAIN_COMMANDS.has(command.type)\n\t\t\t\t: phase !== undefined && !(phase === \"prepared\" && command.type === \"shutdown\");\n\t\tif (restartRejected && mutation) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, \"Daemon is preparing an update restart\"));\n\t\t\treturn;\n\t\t}\n\t\tif (journalIdentity) {\n\t\t\tconst admitted = this.commandJournal.begin(journalIdentity.clientId, journalIdentity.commandId, command.type);\n\t\t\tif (admitted.status === \"complete\") {\n\t\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\t\tthis.write(client, admitted.response);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (admitted.status === \"pending\") {\n\t\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\t\tthis.write(\n\t\t\t\t\tclient,\n\t\t\t\t\tfailure(command.id, command.type, \"The previous command result is uncertain and was not replayed\", {\n\t\t\t\t\t\tcode: \"command_result_uncertain\",\n\t\t\t\t\t\t...journalIdentity,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (mutation && !UPDATE_RESTART_DRAIN_COMMANDS.has(command.type)) {\n\t\t\tconst idleEvictionFence = this.idleEvictionFence;\n\t\t\tif (idleEvictionFence) await idleEvictionFence;\n\t\t}\n\t\t// Attach is intentionally read-only and is not fence-gated. If eviction wins\n\t\t// the race, attach fails cleanly with \"Session worker is not connected\" and\n\t\t// the client retries through the saved-session path instead of mutating state.\n\t\tif (mutation) this.mutationDrain.begin();\n\t\ttry {\n\t\t\tconst response = await this.handleCommand(client, command, cancellationAdmission);\n\t\t\tif (response) {\n\t\t\t\tif (journalIdentity) {\n\t\t\t\t\tawait this.assertCurrentOwnership();\n\t\t\t\t\tthis.commandJournal.recordResult(journalIdentity.clientId, journalIdentity.commandId, response);\n\t\t\t\t}\n\t\t\t\tthis.write(client, response);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.log(`Supervisor command ${command.type} failed: ${error instanceof Error ? error.stack : String(error)}`);\n\t\t\tlet response = failure(command.id, command.type, error, serializeDaemonError(error));\n\t\t\tif (journalIdentity && !isSupervisorGenerationStale(error)) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.assertCurrentOwnership();\n\t\t\t\t\tthis.commandJournal.recordResult(journalIdentity.clientId, journalIdentity.commandId, response);\n\t\t\t\t} catch (ownershipError) {\n\t\t\t\t\tresponse = failure(command.id, command.type, ownershipError, serializeDaemonError(ownershipError));\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.write(client, response);\n\t\t} finally {\n\t\t\tif (mutation) this.mutationDrain.end();\n\t\t}\n\t}\n\n\tprivate async handleCommand(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: DaemonCommand,\n\t\tcancellationAdmission?: SupervisorPromptAdmission,\n\t): Promise<DaemonResponse | undefined> {\n\t\tswitch (command.type) {\n\t\t\tcase \"cancel_prompt_admission\": {\n\t\t\t\tconst admission =\n\t\t\t\t\tcancellationAdmission ?? this.getPromptAdmission(client, command.activeSessionId, command.admissionId);\n\t\t\t\tif (!admission) return success(command.id, command.type, { status: \"unknown\" as const });\n\t\t\t\tif (admission.status === \"owned\") return success(command.id, command.type, { status: \"owned\" as const });\n\t\t\t\t// A definitive cancellation never downgrades to unknown/waiting.\n\t\t\t\tif (admission.status === \"cancelled\") {\n\t\t\t\t\treturn success(command.id, command.type, { status: \"cancelled\" as const });\n\t\t\t\t}\n\t\t\t\tif (!admission.worker || !admission.workerActiveSessionId) {\n\t\t\t\t\tadmission.status = \"cancelled\";\n\t\t\t\t\tadmission.controller.abort();\n\t\t\t\t\treturn success(command.id, command.type, { status: \"cancelled\" as const });\n\t\t\t\t}\n\t\t\t\tconst response = await this.forwardToWorker(admission.worker, {\n\t\t\t\t\t...command,\n\t\t\t\t\tactiveSessionId: admission.workerActiveSessionId,\n\t\t\t\t\tadmissionId: admission.workerAdmissionId,\n\t\t\t\t});\n\t\t\t\tconst status =\n\t\t\t\t\tresponse.success && response.data && typeof response.data === \"object\" && \"status\" in response.data\n\t\t\t\t\t\t? (response.data as { status: \"cancelled\" | \"owned\" | \"unknown\" }).status\n\t\t\t\t\t\t: \"unknown\";\n\t\t\t\t// Re-read: a socket close may have cancelled during the round-trip (cast widens TS's pre-await narrowing).\n\t\t\t\tconst current = (admission as SupervisorPromptAdmission).status;\n\t\t\t\tif (status === \"owned\") admission.status = \"owned\";\n\t\t\t\telse if (status === \"cancelled\") admission.status = \"cancelled\";\n\t\t\t\telse if (current !== \"cancelled\") admission.status = \"waiting\";\n\t\t\t\treturn { ...response, id: command.id };\n\t\t\t}\n\t\t\tcase \"ack_result\":\n\t\t\t\tthis.commandJournal.acknowledge(client.id, command.commandId);\n\t\t\t\treturn undefined;\n\t\t\tcase \"list\":\n\t\t\t\treturn this.handleList(client, command);\n\t\t\tcase \"list_saved_sessions\":\n\t\t\t\treturn this.handleSavedSessionList(client, command);\n\t\t\tcase \"create\": {\n\t\t\t\tconst worker = await this.createOrReuseWorker(this.protocolClientId(client), command);\n\t\t\t\tconst requestedSummary = command.sessionPath\n\t\t\t\t\t? this.findSummaryInWorker(worker, command.sessionPath)\n\t\t\t\t\t: undefined;\n\t\t\t\tif (\n\t\t\t\t\trequestedSummary &&\n\t\t\t\t\t(requestedSummary.activeSessionId ?? requestedSummary.id) !== worker.descriptor.rootActiveSessionId\n\t\t\t\t) {\n\t\t\t\t\t// A create forwarded to a recovering worker still surfaces an opaque lifecycle error.\n\t\t\t\t\tconst response = await this.forwardToWorker(worker, withoutSupervisorCreateFields(command));\n\t\t\t\t\tif (response.success && isSessionSummary(response.data)) {\n\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\t\tawait this.syncAgentPeers().catch(() => undefined);\n\t\t\t\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t\t\t\t}\n\t\t\t\t\treturn responseWithId(response, command.id);\n\t\t\t\t}\n\t\t\t\tconst summary = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\tif (!summary) {\n\t\t\t\t\tthrow new Error(\"Session worker started without a root session\");\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"create\", this.publicSummary(worker, summary));\n\t\t\t}\n\t\t\tcase \"attach\": {\n\t\t\t\tconst attached = await this.attachClient(client, command);\n\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\tconst transcript = attached.transcript;\n\t\t\t\t\tif (!transcript) {\n\t\t\t\t\t\tthrow new Error(\"Session worker did not provide a snapshot transcript\");\n\t\t\t\t\t}\n\t\t\t\t\tconst streamedResult = this.createStreamedAttachResult(attached.result, transcript);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.write(client, success(command.id, \"attach\", streamedResult));\n\t\t\t\t\t\tvoid this.streamSnapshot(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\t\tstreamedResult,\n\t\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\t\t\"attach\",\n\t\t\t\t\t\t\tattached.releaseTranscript,\n\t\t\t\t\t\t).catch((error) =>\n\t\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\t`Failed to stream attach snapshot for ${streamedResult.activeSessionId}: ${String(error)}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tattached.releaseTranscript?.();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"attach\", attached.result);\n\t\t\t}\n\t\t\tcase \"reattach\": {\n\t\t\t\tconst target = await this.findWorkerForClient(client, command.targetActiveSessionId);\n\t\t\t\tconst targetActiveSessionId = target.summary.activeSessionId ?? target.summary.id;\n\t\t\t\tif (targetActiveSessionId === command.activeSessionId) {\n\t\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\t\t\tdetachingSessions?.delete(command.targetActiveSessionId);\n\t\t\t\t\tdetachingSessions?.delete(targetActiveSessionId);\n\t\t\t\t\treturn success(command.id, command.type, { cancelled: false });\n\t\t\t\t}\n\t\t\t\tconst targetWasAttached = client.attachedActiveSessionIds.has(targetActiveSessionId);\n\t\t\t\tconst releaseSnapshotReservation = this.reserveSnapshotStream(client, targetActiveSessionId);\n\t\t\t\tlet releaseTranscript: (() => void) | undefined;\n\t\t\t\tclient.attachedActiveSessionIds.add(targetActiveSessionId);\n\t\t\t\ttry {\n\t\t\t\t\tconst attached = await this.attachClient(client, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\t\tactiveSessionId: targetActiveSessionId,\n\t\t\t\t\t});\n\t\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\t\t\tdetachingSessions?.delete(command.targetActiveSessionId);\n\t\t\t\t\tdetachingSessions?.delete(targetActiveSessionId);\n\t\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\t\tconst transcript =\n\t\t\t\t\t\t\tattached.transcript ?? this.getOrCreateTranscriptCache(attached.worker, attached.result);\n\t\t\t\t\t\treleaseTranscript = attached.releaseTranscript;\n\t\t\t\t\t\tconst streamedResult = this.createStreamedAttachResult(attached.result, transcript);\n\t\t\t\t\t\tthis.write(client, success(command.id, command.type, streamedResult));\n\t\t\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\t\t\tconst streaming = this.streamSnapshot(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\t\tstreamedResult,\n\t\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\t\t\"replacement\",\n\t\t\t\t\t\t\treleaseTranscript,\n\t\t\t\t\t\t\treleaseSnapshotReservation,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treleaseTranscript = undefined;\n\t\t\t\t\t\tvoid streaming.catch((error) =>\n\t\t\t\t\t\t\tthis.log(`Failed to stream reattach snapshot for ${targetActiveSessionId}: ${String(error)}`),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.write(client, success(command.id, command.type, attached.result));\n\t\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\t\treleaseSnapshotReservation();\n\t\t\t\t\treturn undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treleaseTranscript?.();\n\t\t\t\t\tif (!targetWasAttached) {\n\t\t\t\t\t\tthis.detachClient(client, targetActiveSessionId);\n\t\t\t\t\t}\n\t\t\t\t\treleaseSnapshotReservation();\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase \"acquire_session_input_pause\": {\n\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions.get(client);\n\t\t\t\tif (detachingSessions?.has(command.activeSessionId)) {\n\t\t\t\t\tthrow new Error(`Session is detaching: ${command.activeSessionId}`);\n\t\t\t\t}\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst activeSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t\t\tif (detachingSessions?.has(command.activeSessionId) || detachingSessions?.has(activeSessionId)) {\n\t\t\t\t\tthrow new Error(`Session is detaching: ${command.activeSessionId}`);\n\t\t\t\t}\n\t\t\t\tconst ownerClientId = this.protocolClientId(client);\n\t\t\t\tconst connectionId = this.connectionIds.get(client);\n\t\t\t\tif (!connectionId) throw new Error(\"Daemon client connection identity is unavailable\");\n\t\t\t\tconst acquisitionEpoch = this.sessionInputPauseEpochs.get(client) ?? 0;\n\t\t\t\tconst existing = [...this.sessionInputPauses.values()].find(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\tentry.owner === client &&\n\t\t\t\t\t\tentry.worker === match.worker &&\n\t\t\t\t\t\tentry.activeSessionId === activeSessionId &&\n\t\t\t\t\t\tentry.leaseKey === command.leaseKey &&\n\t\t\t\t\t\t!entry.releaseTask,\n\t\t\t\t);\n\t\t\t\tif (existing) {\n\t\t\t\t\treturn success(command.id, command.type, { pauseId: existing.pauseId });\n\t\t\t\t}\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, {\n\t\t\t\t\t...command,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tleaseKey: JSON.stringify([connectionId, ownerClientId, command.leaseKey]),\n\t\t\t\t});\n\t\t\t\tif (!response.success) return response;\n\t\t\t\tconst pauseId = (response.data as { pauseId?: unknown } | undefined)?.pauseId;\n\t\t\t\tif (typeof pauseId !== \"string\") throw new Error(\"Worker returned an invalid session input pause id\");\n\t\t\t\tif (!this.clients.has(client) || (this.sessionInputPauseEpochs.get(client) ?? 0) !== acquisitionEpoch) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst release = await this.forwardToWorker(match.worker, {\n\t\t\t\t\t\t\tid: randomUUID(),\n\t\t\t\t\t\t\ttype: \"release_session_input_pause\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tpauseId,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!release.success) throw new Error(release.error);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmatch.worker.client?.close();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(\"Session input pause acquisition was invalidated before completion\");\n\t\t\t\t}\n\t\t\t\tthis.sessionInputPauses.set(pauseId, {\n\t\t\t\t\towner: client,\n\t\t\t\t\tworker: match.worker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\trequestedActiveSessionId: command.activeSessionId,\n\t\t\t\t\tleaseKey: command.leaseKey,\n\t\t\t\t\tpauseId,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"release_session_input_pause\": {\n\t\t\t\tconst entry = this.sessionInputPauses.get(command.pauseId);\n\t\t\t\tif (!entry) return success(command.id, command.type);\n\t\t\t\tif (entry.owner !== client) {\n\t\t\t\t\tthrow new Error(`Session input pause is owned by another client: ${command.pauseId}`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcommand.activeSessionId !== entry.activeSessionId &&\n\t\t\t\t\tcommand.activeSessionId !== entry.requestedActiveSessionId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(`Session input pause belongs to another session: ${command.pauseId}`);\n\t\t\t\t}\n\t\t\t\tconst releaseTask =\n\t\t\t\t\tentry.releaseTask ??\n\t\t\t\t\tthis.forwardToWorker(entry.worker, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\tactiveSessionId: entry.activeSessionId,\n\t\t\t\t\t});\n\t\t\t\tentry.releaseTask = releaseTask;\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await releaseTask;\n\t\t\t\t\tif (response.success && this.sessionInputPauses.get(command.pauseId) === entry) {\n\t\t\t\t\t\tthis.sessionInputPauses.delete(command.pauseId);\n\t\t\t\t\t}\n\t\t\t\t\treturn response;\n\t\t\t\t} finally {\n\t\t\t\t\tif (this.sessionInputPauses.get(command.pauseId) === entry && entry.releaseTask === releaseTask) {\n\t\t\t\t\t\tentry.releaseTask = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase \"detach\": {\n\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions.get(client) ?? new Set<string>();\n\t\t\t\tthis.detachingInputPauseSessions.set(client, detachingSessions);\n\t\t\t\tif (command.activeSessionId) detachingSessions.add(command.activeSessionId);\n\t\t\t\telse for (const activeSessionId of client.attachedActiveSessionIds) detachingSessions.add(activeSessionId);\n\t\t\t\tthis.sessionInputPauseEpochs.set(client, (this.sessionInputPauseEpochs.get(client) ?? 0) + 1);\n\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\tawait this.releaseClientSessionInputPauses(client, command.activeSessionId, true);\n\t\t\t\treturn success(command.id, \"detach\");\n\t\t\t}\n\t\t\tcase \"complete_owned_session\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tif (match.worker.descriptor.ownerClientId !== this.protocolClientId(client)) {\n\t\t\t\t\tthrow new Error(\"Session is not owned by this client\");\n\t\t\t\t}\n\t\t\t\tif (match.worker.ownerCleanupTimer) {\n\t\t\t\t\tclearTimeout(match.worker.ownerCleanupTimer);\n\t\t\t\t\tmatch.worker.ownerCleanupTimer = undefined;\n\t\t\t\t}\n\t\t\t\tawait this.stopWorker(match.worker, true);\n\t\t\t\treturn success(command.id, command.type);\n\t\t\t}\n\t\t\tcase \"promote_owned_session\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\treturn success(command.id, command.type, this.publicSummary(match.worker, match.summary));\n\t\t\t}\n\t\t\tcase \"retry_worker\": {\n\t\t\t\tconst direct = [...this.workers.values()].find(\n\t\t\t\t\t(worker) =>\n\t\t\t\t\t\tworker.descriptor.rootActiveSessionId === command.activeSessionId ||\n\t\t\t\t\t\tworker.descriptor.rootSessionId === command.activeSessionId,\n\t\t\t\t);\n\t\t\t\tconst worker = direct ?? (await this.findWorkerForClient(client, command.activeSessionId)).worker;\n\t\t\t\tthis.assertWorkerAccessibleToClient(client, worker, command.activeSessionId);\n\t\t\t\tif ((this.workerStopCounts?.get(worker) ?? 0) > 0) {\n\t\t\t\t\tthrow new Error(\"Session worker is stopping; retry after it finishes\");\n\t\t\t\t}\n\t\t\t\tworker.intentionalStop = false;\n\t\t\t\tworker.descriptor.stopRequestedAt = undefined;\n\t\t\t\tworker.descriptor.archiveOnStop = undefined;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tawait this.recoverWorker(worker);\n\t\t\t\tif (this.workers.get(worker.descriptor.workerId)?.descriptor.lifecycle !== \"ready\") {\n\t\t\t\t\tthrow new Error(worker.descriptor.lastError ?? \"Session worker recovery failed\");\n\t\t\t\t}\n\t\t\t\tconst summary = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\treturn success(command.id, command.type, summary ? this.publicSummary(worker, summary) : undefined);\n\t\t\t}\n\t\t\tcase \"restart\":\n\t\t\t\tsetImmediate(() => void this.shutdown(0, false, true, false, \"update\"));\n\t\t\t\treturn success(command.id, command.type);\n\t\t\tcase \"shutdown\":\n\t\t\t\tsetImmediate(() => void this.shutdown(0, true, false, command.force === true, \"shutdown\"));\n\t\t\t\treturn success(command.id, \"shutdown\");\n\t\t\tcase \"prepare_update_restart\": {\n\t\t\t\tconst manifest = await this.prepareUpdateRestart();\n\t\t\t\treturn success(command.id, \"prepare_update_restart\", manifest);\n\t\t\t}\n\t\t\tcase \"agent_messages_status\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst first = [...this.workers.values()].find((worker) => this.isLiveWorker(worker) && worker.client);\n\t\t\t\tif (!first) {\n\t\t\t\t\treturn success(command.id, command.type, { paused: false, limits: {} });\n\t\t\t\t}\n\t\t\t\treturn this.forwardToWorker(first, command);\n\t\t\t}\n\t\t\tcase \"asm_runtime_status\": {\n\t\t\t\tconst first = [...this.workers.values()].find((worker) => this.isLiveWorker(worker) && worker.client);\n\t\t\t\tif (!first) {\n\t\t\t\t\treturn success(command.id, command.type, {\n\t\t\t\t\t\tavailable: false,\n\t\t\t\t\t\terror: \"ASM-CM status requires an active session worker\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this.forwardToWorker(first, command, 150_000);\n\t\t\t}\n\t\t\tcase \"asm_shadow_encode\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command, 150_000);\n\t\t\t}\n\t\t\tcase \"agent_messages_pause\":\n\t\t\tcase \"agent_messages_resume\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst responses = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter((worker) => this.isLiveWorker(worker) && worker.client)\n\t\t\t\t\t\t.map((worker) => this.forwardToWorker(worker, command)),\n\t\t\t\t);\n\t\t\t\tconst failed = responses.find((response) => !response.success);\n\t\t\t\treturn failed ?? success(command.id, command.type, responses.find((response) => response.success)?.data);\n\t\t\t}\n\t\t\tcase \"cron_list\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst jobs = new Map<string, AgentCronJob>();\n\t\t\t\tconst responses = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.client && worker.descriptor.lifecycle === \"ready\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((worker) =>\n\t\t\t\t\t\t\tthis.forwardToWorker(worker, command, 5000).catch((error: unknown) =>\n\t\t\t\t\t\t\t\tfailure(command.id, command.type, error, serializeDaemonError(error)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfor (const response of responses) {\n\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\tthis.log(`Could not list scheduled jobs from a worker: ${response.error}`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const job of cronJobsFromResponse(response)) {\n\t\t\t\t\t\tjobs.set(job.id, job);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"cron_list\", { jobs: sortCronJobs([...jobs.values()]) });\n\t\t\t}\n\t\t\tcase \"heartbeats_list\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst workers = [...this.workers.values()].filter(\n\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.descriptor.lifecycle !== \"failed\",\n\t\t\t\t);\n\t\t\t\tconst heartbeats = new Map<string, AgentConnectionHeartbeat>();\n\t\t\t\tconst snapshots: Array<{ heartbeats?: AgentConnectionHeartbeat[]; response?: DaemonResponse }> =\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tworkers.map(async (worker) => {\n\t\t\t\t\t\t\tif (worker.client && worker.descriptor.lifecycle === \"ready\") {\n\t\t\t\t\t\t\t\tconst response = await this.forwardToWorker(worker, command, 5000).catch((error: unknown) =>\n\t\t\t\t\t\t\t\t\tfailure(command.id, command.type, error, serializeDaemonError(error)),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (response.success) {\n\t\t\t\t\t\t\t\t\tconst snapshot = heartbeatsFromResponse(response);\n\t\t\t\t\t\t\t\t\tworker.heartbeatSnapshot = snapshot;\n\t\t\t\t\t\t\t\t\tworker.heartbeatSnapshotStale = false;\n\t\t\t\t\t\t\t\t\treturn { heartbeats: snapshot };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.log(`Could not list heartbeats from a worker: ${response.error}`);\n\t\t\t\t\t\t\t\tif (worker.heartbeatSnapshot === undefined || worker.heartbeatSnapshotStale === true) {\n\t\t\t\t\t\t\t\t\treturn { response };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (worker.heartbeatSnapshot !== undefined && worker.heartbeatSnapshotStale !== true) {\n\t\t\t\t\t\t\t\treturn { heartbeats: worker.heartbeatSnapshot };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst state =\n\t\t\t\t\t\t\t\tworker.descriptor.lifecycle === \"ready\" ? \"disconnected\" : worker.descriptor.lifecycle;\n\t\t\t\t\t\t\tconst error = new Error(`Cannot list heartbeats while session worker is ${state}`);\n\t\t\t\t\t\t\treturn { response: failure(command.id, command.type, error, serializeDaemonError(error)) };\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tconst failed = snapshots.find((snapshot) => snapshot.response)?.response;\n\t\t\t\tif (failed) {\n\t\t\t\t\treturn failed;\n\t\t\t\t}\n\t\t\t\tfor (const snapshot of snapshots) {\n\t\t\t\t\tfor (const heartbeat of snapshot.heartbeats ?? []) {\n\t\t\t\t\t\theartbeats.set(heartbeat.job.id, heartbeat);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"heartbeats_list\", { heartbeats: [...heartbeats.values()] });\n\t\t\t}\n\t\t\tcase \"heartbeat_manage\": {\n\t\t\t\tconst cachedWorker = [...this.workers.values()].find((worker) =>\n\t\t\t\t\tworker.heartbeatSnapshot?.some(\n\t\t\t\t\t\t(heartbeat) =>\n\t\t\t\t\t\t\theartbeat.job.id === command.jobId && heartbeat.job.activeSessionId === command.activeSessionId,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst worker = cachedWorker ?? (await this.findWorkerForClient(client, command.activeSessionId)).worker;\n\t\t\t\tthis.assertWorkerAccessibleToClient(client, worker, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(worker, command);\n\t\t\t\tif (\n\t\t\t\t\tresponse.success &&\n\t\t\t\t\tresponse.data &&\n\t\t\t\t\ttypeof response.data === \"object\" &&\n\t\t\t\t\t\"heartbeat\" in response.data\n\t\t\t\t) {\n\t\t\t\t\tconst job = (response.data as { heartbeat?: AgentCronJob }).heartbeat;\n\t\t\t\t\tif (job && worker.heartbeatSnapshot) {\n\t\t\t\t\t\tconst existing = worker.heartbeatSnapshot.find((heartbeat) => heartbeat.job.id === job.id);\n\t\t\t\t\t\tconst remaining = worker.heartbeatSnapshot.filter((heartbeat) => heartbeat.job.id !== job.id);\n\t\t\t\t\t\tworker.heartbeatSnapshot =\n\t\t\t\t\t\t\tjob.status === \"active\" || job.status === \"paused\"\n\t\t\t\t\t\t\t\t? [...remaining, existing ? { ...existing, job } : { job }]\n\t\t\t\t\t\t\t\t: remaining;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"cron_add\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, command);\n\t\t\t\tif (response.success && command.promoteOwnedSession) {\n\t\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"cron_cancel\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst listed = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.client && worker.descriptor.lifecycle === \"ready\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(async (worker) => ({\n\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\tresponse: await this.forwardToWorker(\n\t\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\t\t{ type: \"cron_list\", includeInactive: true },\n\t\t\t\t\t\t\t\t5000,\n\t\t\t\t\t\t\t).catch(() => undefined),\n\t\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tfor (const candidate of listed) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcandidate.response?.success &&\n\t\t\t\t\t\tcronJobsFromResponse(candidate.response).some((job) => job.id === command.jobId)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn this.forwardToWorker(candidate.worker, command);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new Error(`No cron job found: ${command.jobId}`);\n\t\t\t}\n\t\t\tcase \"heartbeat_get\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t}\n\t\t\tcase \"heartbeat_set\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, command);\n\t\t\t\tif (response.success && command.promoteOwnedSession) {\n\t\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"heartbeat_update\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t}\n\t\t\tcase \"rename_saved_session\": {\n\t\t\t\tconst target = await this.savedSessionNameReservationInput(command.sessionPath, command.name.trim());\n\t\t\t\treturn await this.withSessionNameReservation(target, async () => {\n\t\t\t\t\tawait this.assertSupervisorSavedSessionNameAvailable(command.sessionPath, target.name);\n\t\t\t\t\tif (!command.activeSessionId) {\n\t\t\t\t\t\tawait this.catalog.rename(command.sessionPath, command.name);\n\t\t\t\t\t\t// Third rename write point: an offline saved-session rename\n\t\t\t\t\t\t// changes the name the ledger carries for that child.\n\t\t\t\t\t\tawait this.rlmSpawnLedger()\n\t\t\t\t\t\t\t.appendRenameByChildPath(command.sessionPath, target.name)\n\t\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\t\t`failed to append RLM ledger rename: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\treturn success(command.id, command.type);\n\t\t\t\t\t}\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn await this.forwardToWorker(match.worker, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\tactiveSessionId: match.summary.activeSessionId ?? match.summary.id,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"delete_saved_session\":\n\t\t\t\tif (!command.activeSessionId) {\n\t\t\t\t\tconst active = this.findWorkerBySessionFile(command.sessionPath);\n\t\t\t\t\tif (active) {\n\t\t\t\t\t\tthrow new Error(\"Cannot delete the currently active session\");\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await this.catalog.delete(command.sessionPath);\n\t\t\t\t\treturn success(command.id, command.type, result);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (command.type === \"send_message\") {\n\t\t\t// agentOrigin without fromActiveSessionId is trusted only at the direct socket-client boundary.\n\t\t\tconst source = command.fromActiveSessionId\n\t\t\t\t? await this.findWorkerForClient(client, command.fromActiveSessionId)\n\t\t\t\t: undefined;\n\t\t\tlet target: WorkerMatch;\n\t\t\ttry {\n\t\t\t\ttarget = await this.findWorkerForClient(client, command.targetActiveSessionId);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Unknown active session:\")) throw error;\n\t\t\t\tconst cwd = source?.summary.cwd ?? this.defaultSessionConfig.cwd ?? process.cwd();\n\t\t\t\tlet sessionPath: string;\n\t\t\t\ttry {\n\t\t\t\t\tsessionPath = await this.catalog.resolve(\n\t\t\t\t\t\tcommand.targetActiveSessionId,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tsource?.worker.descriptor.sessionDir ?? this.defaultSessionConfig.sessionDir,\n\t\t\t\t\t);\n\t\t\t\t} catch (catalogError) {\n\t\t\t\t\t// Preserve selector ambiguity so a2a senders can distinguish it from\n\t\t\t\t\t// the original unknown-active-session lookup failure.\n\t\t\t\t\tif (catalogError instanceof Error && catalogError.message.startsWith(\"Ambiguous session selector\")) {\n\t\t\t\t\t\tthrow catalogError;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (source && command.agentOrigin === true) {\n\t\t\t\t\tconst targetInfo = await readSessionInfo(sessionPath);\n\t\t\t\t\tif (!targetInfo) throw new Error(`Unknown active session: ${command.targetActiveSessionId}`);\n\t\t\t\t\tassertAgentFamilyReach(\n\t\t\t\t\t\tthis.familyCatalogEntry(source.summary),\n\t\t\t\t\t\tthis.familyCatalogEntry(summaryForInactiveSession(targetInfo)),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst worker = await this.createOrReuseWorker(this.protocolClientId(client), {\n\t\t\t\t\ttype: \"create\",\n\t\t\t\t\tsessionPath,\n\t\t\t\t\tcontinueRecent: false,\n\t\t\t\t});\n\t\t\t\tconst summary =\n\t\t\t\t\tthis.findSummaryInWorker(worker, sessionPath) ??\n\t\t\t\t\tworker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\tif (!summary) throw new Error(\"Woken session worker has no target session\");\n\t\t\t\ttarget = { worker, summary };\n\t\t\t}\n\t\t\tconst targetActiveSessionId = target.summary.activeSessionId ?? target.summary.id;\n\t\t\tif (source && command.agentOrigin === true) {\n\t\t\t\tassertAgentFamilyReach(this.familyCatalogEntry(source.summary), this.familyCatalogEntry(target.summary));\n\t\t\t}\n\t\t\tif (source) {\n\t\t\t\tif ((source.summary.activeSessionId ?? source.summary.id) === targetActiveSessionId) {\n\t\t\t\t\tthrow new Error(\"Agent messaging cannot target the sending session\");\n\t\t\t\t}\n\t\t\t\tconst targetClient = this.requireAvailableWorkerClient(target.worker);\n\t\t\t\tconst response = await targetClient.requestWorker(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"worker_deliver_message\",\n\t\t\t\t\t\ttargetActiveSessionId,\n\t\t\t\t\t\tmessage: command.message,\n\t\t\t\t\t\tsender: {\n\t\t\t\t\t\t\tactiveSessionId: source.summary.activeSessionId ?? source.summary.id,\n\t\t\t\t\t\t\tsessionId: source.summary.sessionId,\n\t\t\t\t\t\t\t...(source.summary.sessionName ? { sessionName: source.summary.sessionName } : {}),\n\t\t\t\t\t\t\truntimeKind: source.summary.runtimeKind ?? \"top-level\",\n\t\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tWORKER_REQUEST_TIMEOUT_MS,\n\t\t\t\t);\n\t\t\t\treturn { ...response, id: command.id, command: command.type };\n\t\t\t}\n\t\t\treturn this.forwardToWorker(target.worker, { ...command, targetActiveSessionId });\n\t\t}\n\n\t\tif (!(\"activeSessionId\" in command) || typeof command.activeSessionId !== \"string\") {\n\t\t\tthrow new Error(`Supervisor cannot route daemon command: ${command.type}`);\n\t\t}\n\t\tconst admission =\n\t\t\t(command.type === \"prompt\" || command.type === \"prompt_and_wait\") && command.admissionId\n\t\t\t\t? this.getPromptAdmission(client, command.activeSessionId, command.admissionId)\n\t\t\t\t: undefined;\n\t\ttry {\n\t\t\tthrowIfAdmissionCancelled(admission);\n\t\t\tconst match = await waitForPromptAdmission(\n\t\t\t\tcommand.type === \"set_session_name\" && command.workerToken !== undefined\n\t\t\t\t\t? this.findWorker(\n\t\t\t\t\t\t\tcommand.activeSessionId,\n\t\t\t\t\t\t\t(worker) => worker.descriptor.authenticationToken === command.workerToken,\n\t\t\t\t\t\t)\n\t\t\t\t\t: this.findWorkerForClient(client, command.activeSessionId),\n\t\t\t\tadmission?.controller.signal,\n\t\t\t);\n\t\t\tthrowIfAdmissionCancelled(admission);\n\t\t\tconst resolvedCommand = {\n\t\t\t\t...command,\n\t\t\t\tactiveSessionId: match.summary.activeSessionId ?? match.summary.id,\n\t\t\t\t...(admission ? { admissionId: admission.workerAdmissionId } : {}),\n\t\t\t} as DaemonCommand;\n\t\t\tif (admission) {\n\t\t\t\tadmission.worker = match.worker;\n\t\t\t\tadmission.workerActiveSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t\t}\n\t\t\tconst isRootKill =\n\t\t\t\tcommand.type === \"kill\" &&\n\t\t\t\t(match.summary.activeSessionId ?? match.summary.id) === match.worker.descriptor.rootActiveSessionId;\n\t\t\tif (!isRootKill) {\n\t\t\t\tconst forward = async () => {\n\t\t\t\t\tconst response = await this.forwardToWorker(match.worker, resolvedCommand);\n\t\t\t\t\tif (admission && response.success) admission.status = \"owned\";\n\t\t\t\t\treturn response;\n\t\t\t\t};\n\t\t\t\tif (command.type === \"rename\" || command.type === \"set_session_name\") {\n\t\t\t\t\tconst reservation = this.summaryNameReservationInput(match.summary, command.name.trim());\n\t\t\t\t\treturn await this.withSessionNameReservation(reservation, async () => {\n\t\t\t\t\t\tawait this.assertSupervisorSessionNameAvailable(match.summary, reservation.name);\n\t\t\t\t\t\treturn forward();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn await forward();\n\t\t\t}\n\t\t\tthis.persistWorkerStopTombstone(match.worker, true);\n\t\t\tconst releaseStopOwnership = this.acquireWorkerStopOwnership(match.worker);\n\t\t\tlet response: DaemonResponse;\n\t\t\ttry {\n\t\t\t\tresponse = await this.forwardToWorker(match.worker, resolvedCommand);\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.stopWorker(match.worker, true, false, true);\n\t\t\t\t} finally {\n\t\t\t\t\treleaseStopOwnership();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn response;\n\t\t} finally {\n\t\t\tif (admission) this.deletePromptAdmission(admission);\n\t\t}\n\t}\n\n\tprivate async handleList(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"list\" }>,\n\t): Promise<DaemonResponse> {\n\t\tawait Promise.all(\n\t\t\t[...this.workers.values()]\n\t\t\t\t.filter((worker) => !this.isWorkerStopping(worker))\n\t\t\t\t.map((worker) => this.refreshWorkerSummaries(worker).catch(() => undefined)),\n\t\t);\n\t\tawait this.syncAgentPeers().catch((error) => this.log(`Could not synchronize agent peers: ${String(error)}`));\n\t\tconst clientOwnedWorkers = [...this.workers.values()].filter((worker) => !this.isVisibleWorker(worker));\n\t\t// Stopping workers stay listed (with an honest workerState) because this\n\t\t// list also feeds busy-daemon safety checks in daemon-launch.\n\t\tconst active = [...this.workers.values()]\n\t\t\t.filter(\n\t\t\t\t(worker) =>\n\t\t\t\t\tthis.isVisibleWorker(worker) ||\n\t\t\t\t\t(command.includeClientOwned === true && this.isWorkerAccessibleToClient(client, worker)),\n\t\t\t)\n\t\t\t.flatMap((worker) => [...worker.summaries.values()].map((summary) => this.publicSummary(worker, summary)));\n\t\tconst busyClientOwnedSessionCount = clientOwnedWorkers\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.filter(isSessionSummaryBusy).length;\n\t\tconst data = {\n\t\t\tsessions: active,\n\t\t\t...(command.includeClientOwned ? { busyClientOwnedSessionCount } : {}),\n\t\t};\n\t\tif (!command.all) {\n\t\t\treturn success(command.id, \"list\", data);\n\t\t}\n\t\tconst sessionDir = command.sessionDir ?? this.defaultSessionConfig.sessionDir;\n\t\tconst saved = await this.catalog.list(command.cwd ? resolve(command.cwd) : undefined, sessionDir);\n\t\treturn success(command.id, \"list\", { ...data, sessions: mergeSessionLists(active, saved) });\n\t}\n\n\tprivate async handleSavedSessionList(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"list_saved_sessions\" }>,\n\t): Promise<DaemonResponse> {\n\t\tlet cwd: string;\n\t\tlet sessionDir: string | undefined;\n\t\tlet activeSessionId: string | undefined;\n\t\tif (\"activeSessionId\" in command) {\n\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\tcwd = match.summary.cwd;\n\t\t\tsessionDir = this.defaultSessionConfig.sessionDir;\n\t\t\tactiveSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t} else {\n\t\t\tcwd = resolve(command.cwd);\n\t\t\tsessionDir = command.sessionDir;\n\t\t}\n\t\tconst callbacks = command.id\n\t\t\t? {\n\t\t\t\t\tonProgress: (loaded: number, total: number) =>\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\tid: command.id,\n\t\t\t\t\t\t\ttype: \"session_list_progress\",\n\t\t\t\t\t\t\tcommand: \"list_saved_sessions\",\n\t\t\t\t\t\t\t...(activeSessionId ? { activeSessionId } : {}),\n\t\t\t\t\t\t\tloaded,\n\t\t\t\t\t\t\ttotal,\n\t\t\t\t\t\t}),\n\t\t\t\t\tonSession: (session: SessionInfo) =>\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\tid: command.id,\n\t\t\t\t\t\t\ttype: \"session_list_item\",\n\t\t\t\t\t\t\tcommand: \"list_saved_sessions\",\n\t\t\t\t\t\t\t...(activeSessionId ? { activeSessionId } : {}),\n\t\t\t\t\t\t\tsession: serializeSavedSessionInfo(session),\n\t\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst saved = await this.catalog.list(command.scope === \"current\" ? cwd : undefined, sessionDir, callbacks);\n\t\treturn success(command.id, \"list_saved_sessions\", { sessions: saved.map(serializeSavedSessionInfo) });\n\t}\n\n\tprivate async createOrReuseWorker(clientId: string, command: DaemonCreateCommand): Promise<ResidentWorker> {\n\t\tlet createCommand = command;\n\t\tif (command.name !== undefined) {\n\t\t\tconst normalizedName = command.name.trim();\n\t\t\tif (!normalizedName) {\n\t\t\t\tthrow new Error(\"Session name cannot be empty\");\n\t\t\t}\n\t\t\tcreateCommand = { ...command, name: normalizedName };\n\t\t}\n\t\tconst ownerClientId = command.lifecycle === \"client_owned\" ? clientId : undefined;\n\t\tif (command.sessionPath) {\n\t\t\tconst activeMatches = this.matchWorkers(command.sessionPath);\n\t\t\tif (\n\t\t\t\tactiveMatches.length === 1 &&\n\t\t\t\t!(await this.reclaimStaleWorkerRegistration(activeMatches[0]!.worker, command.launchEnv !== undefined))\n\t\t\t) {\n\t\t\t\treturn this.reuseWorkerForCreate(activeMatches[0]!.worker, ownerClientId, command.sessionPath);\n\t\t\t}\n\t\t\tif (activeMatches.length > 1) {\n\t\t\t\tthrow new Error(`Ambiguous active session \"${command.sessionPath}\"`);\n\t\t\t}\n\t\t\tconst config = mergeAgentSessionRuntimeConfig(this.defaultSessionConfig, command.config);\n\t\t\tconst sessionPath = looksLikeSessionPath(command.sessionPath)\n\t\t\t\t? resolve(command.sessionPath)\n\t\t\t\t: await this.catalog.resolve(command.sessionPath, config.cwd ?? process.cwd(), config.sessionDir);\n\t\t\tcreateCommand = { ...createCommand, sessionPath };\n\t\t\tconst existing = this.findWorkerBySessionFile(sessionPath);\n\t\t\tif (existing && !(await this.reclaimStaleWorkerRegistration(existing, command.launchEnv !== undefined))) {\n\t\t\t\treturn this.reuseWorkerForCreate(existing, ownerClientId, sessionPath);\n\t\t\t}\n\t\t}\n\t\tconst key = createCommand.sessionPath\n\t\t\t? canonicalSessionPath(createCommand.sessionPath)\n\t\t\t: `new:${command.id ? createCommandIdempotencyKey(clientId, command.id) : createActiveSessionId()}`;\n\t\tconst pending = this.openingWorkers.get(key);\n\t\tif (pending) {\n\t\t\treturn pending;\n\t\t}\n\t\tconst opening = (async () => {\n\t\t\tif (!createCommand.name) return this.launchWorker(createCommand, undefined, ownerClientId);\n\t\t\tconst savedSiblings = createCommand.sessionPath ? await this.rlmLedgerSiblings(createCommand.sessionPath) : [];\n\t\t\tconst target = savedSiblings.find(\n\t\t\t\t(session) => canonicalSessionPath(session.path) === canonicalSessionPath(createCommand.sessionPath!),\n\t\t\t);\n\t\t\tconst targetSummary = target ? summaryForInactiveSession(target) : { sessionId: \"new-root\", rlmDepth: 0 };\n\t\t\tconst reservation = this.summaryNameReservationInput(targetSummary, createCommand.name);\n\t\t\treturn this.withSessionNameReservation(reservation, async () => {\n\t\t\t\tif (target?.parentSessionPath && (target.rlmDepth ?? 0) > 0) {\n\t\t\t\t\tthis.assertSavedSiblingNameAvailable(savedSiblings, target, createCommand.name!);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.assertSupervisorSessionNameAvailable(targetSummary, createCommand.name!);\n\t\t\t\t}\n\t\t\t\treturn this.launchWorker(createCommand, undefined, ownerClientId);\n\t\t\t});\n\t\t})();\n\t\tthis.openingWorkers.set(key, opening);\n\t\ttry {\n\t\t\treturn await opening;\n\t\t} finally {\n\t\t\tif (this.openingWorkers.get(key) === opening) {\n\t\t\t\tthis.openingWorkers.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate reuseWorkerForCreate(\n\t\tworker: ResidentWorker,\n\t\townerClientId: string | undefined,\n\t\tsessionPath: string,\n\t): ResidentWorker {\n\t\tif (worker.descriptor.lifecycle === \"failed\") {\n\t\t\tthrow new Error(\n\t\t\t\t`Session \"${sessionPath}\" is registered to a failed worker that could not be safely reclaimed`,\n\t\t\t);\n\t\t}\n\t\tif (worker.descriptor.ownerClientId === ownerClientId) {\n\t\t\treturn worker;\n\t\t}\n\t\tthrow new SessionAlreadyActiveError(sessionPath, worker.descriptor.rootActiveSessionId);\n\t}\n\n\t/**\n\t * A stopping worker whose process already died can strand its registration\n\t * (for example when the stop timed out and its finalization was interrupted\n\t * by a supervisor restart). Such a registration would block reopening the\n\t * saved transcript forever, so complete the interrupted stop and let the\n\t * caller launch a fresh worker for the saved session.\n\t */\n\tprivate async reclaimStaleWorkerRegistration(worker: ResidentWorker, freshCreate = false): Promise<boolean> {\n\t\tif (worker.client !== undefined || worker.recovery !== undefined) {\n\t\t\treturn false;\n\t\t}\n\t\tif (worker.descriptor.stopRequestedAt === undefined) {\n\t\t\tif (worker.descriptor.lifecycle !== \"failed\" || worker.descriptor.ownerClientId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst identity = this.processIdentity(worker.descriptor.pid, worker.descriptor.processStartId);\n\t\t\tif (identity === \"current\") {\n\t\t\t\tif (!freshCreate || !worker.descriptor.processStartId) return false;\n\t\t\t\tawait this.stopWorker(worker, true, true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (identity !== \"gone\" && identity !== \"replaced\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tworker.intentionalStop = true;\n\t\t\tawait this.recoverUncertainWorkerOperations(worker, false);\n\t\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t\tawait this.syncAgentPeers().catch(() => undefined);\n\t\t\treturn true;\n\t\t}\n\t\t// Fail fast before waiting on anything: only a confirmed-dead process is\n\t\t// reclaimable. A live, unknown, or still-stopping worker is left alone\n\t\t// and the caller reports the session as already active.\n\t\tconst identity = this.processIdentity(worker.descriptor.pid, worker.descriptor.processStartId);\n\t\tif (identity !== \"gone\" && identity !== \"replaced\") {\n\t\t\treturn false;\n\t\t}\n\t\t// Single cleanup path: the background stop finalizer is identity-aware,\n\t\t// retrying, and single-flighted, so concurrent resumes share one stop.\n\t\t// The wait is bounded so a resume request always returns promptly.\n\t\tthis.scheduleWorkerStopFinalization(worker);\n\t\tconst finalization = worker.stopFinalization;\n\t\tif (finalization) {\n\t\t\tawait Promise.race([finalization.catch(() => undefined), unrefDelay(STALE_RECLAIM_WAIT_MS)]);\n\t\t}\n\t\tif (this.workers.get(worker.descriptor.workerId) === worker) {\n\t\t\t// The process is confirmed dead, so the registration must never be\n\t\t\t// reused; slow cleanup fails the resume honestly instead.\n\t\t\tthrow new Error(\n\t\t\t\t`Stopped session worker ${worker.descriptor.workerId} is still being cleaned up; retry shortly`,\n\t\t\t);\n\t\t}\n\t\tthis.log(`Reclaimed stale registration for stopped worker ${worker.descriptor.workerId}`);\n\t\treturn true;\n\t}\n\n\tprivate async promoteOwnedWorker(client: DaemonSocketClient, worker: ResidentWorker): Promise<void> {\n\t\tconst clientId = this.protocolClientId(client);\n\t\tif (worker.descriptor.ownerClientId === undefined && worker.promotedOwnerClientId === clientId) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.ownerClientId !== clientId) {\n\t\t\tthrow new Error(\"Session is not owned by this client\");\n\t\t}\n\t\tconst previousDescriptor = worker.descriptor;\n\t\tworker.descriptor = { ...previousDescriptor, ownerClientId: undefined };\n\t\ttry {\n\t\t\tthis.persistWorker(worker);\n\t\t} catch (error) {\n\t\t\tworker.descriptor = previousDescriptor;\n\t\t\tthrow error;\n\t\t}\n\t\tworker.promotedOwnerClientId = clientId;\n\t\tif (worker.ownerCleanupTimer) {\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t\tworker.launchEnv = undefined;\n\t\tworker.transientCreateCommand = undefined;\n\t\tawait this.syncAgentPeers().catch((error) => this.log(`Could not synchronize agent peers: ${String(error)}`));\n\t}\n\n\tprivate async launchWorker(\n\t\tcommand: DaemonCreateCommand,\n\t\texisting?: ResidentWorker,\n\t\townerClientId?: string,\n\t): Promise<ResidentWorker> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (existing && this.isWorkerRecoveryCancelled(existing)) {\n\t\t\tthrow new Error(`Session worker ${existing.descriptor.workerId} recovery was cancelled`);\n\t\t}\n\t\tconst recoveryStopRevision = existing?.stopRevision;\n\t\tconst launchEnv = command.launchEnv ?? existing?.launchEnv;\n\t\tconst createCommand: DaemonCreateCommand = {\n\t\t\t...withoutSupervisorCreateFields(command),\n\t\t\tconfig: mergeAgentSessionRuntimeConfig(this.defaultSessionConfig, command.config),\n\t\t};\n\t\tconst workerId = existing?.descriptor.workerId ?? createActiveSessionId();\n\t\tconst rootActiveSessionId = existing?.descriptor.rootActiveSessionId ?? createActiveSessionId();\n\t\tconst socketPath = existing?.descriptor.socketPath ?? workerSocketPath(this.socketPath, workerId);\n\t\tconst token = existing?.descriptor.authenticationToken ?? randomBytes(32).toString(\"base64url\");\n\t\tconst now = new Date().toISOString();\n\t\tconst descriptorPath = existing?.descriptorPath ?? join(this.descriptorDir, `${workerId}.json`);\n\t\tconst recoveryJournalPath =\n\t\t\texisting?.descriptor.recoveryJournalPath ?? join(this.descriptorDir, `${workerId}.recovery.jsonl`);\n\t\tconst orphanProcessJournalPath =\n\t\t\texisting?.descriptor.orphanProcessJournalPath ?? join(this.descriptorDir, `${workerId}.orphans.jsonl`);\n\t\tconst launch = createCliSubprocessLaunchSpec([\"--mode\", \"daemon\", \"--daemon-socket\", socketPath]);\n\t\tconst workerEnvironment = createCliSubprocessEnv({\n\t\t\t...process.env,\n\t\t\t...launchEnv,\n\t\t\t[DAEMON_WORKER_ROLE_ENV]: \"1\",\n\t\t\t[DAEMON_WORKER_TOKEN_ENV]: token,\n\t\t\t[DAEMON_WORKER_ACTIVE_SESSION_ID_ENV]: rootActiveSessionId,\n\t\t\t[DAEMON_WORKER_SUPERVISOR_SOCKET_ENV]: this.socketPath,\n\t\t\t[DAEMON_WORKER_RECOVERY_JOURNAL_ENV]: recoveryJournalPath,\n\t\t\t[DAEMON_WORKER_STARTUP_GATE_FD_ENV]: String(WORKER_STARTUP_GATE_FD),\n\t\t\t[ORPHAN_PROCESS_JOURNAL_ENV]: orphanProcessJournalPath,\n\t\t\t[SESSION_LEASES_ENABLED_ENV]: \"1\",\n\t\t\t[SESSION_LEASE_OWNER_ID_ENV]: rootActiveSessionId,\n\t\t});\n\t\tdelete workerEnvironment.RLM_DEPTH;\n\t\tawait this.assertRecoveryAllowed();\n\t\tconst child: ChildProcess = spawn(launch.command, launch.args, {\n\t\t\tcwd: createCommand.config?.cwd ?? process.cwd(),\n\t\t\tdetached: true,\n\t\t\tenv: workerEnvironment,\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\t\tconst detachWorkerStderr = child.stderr\n\t\t\t? attachJsonlLineReader(child.stderr, (line) => this.log(`Session worker ${workerId} stderr: ${line}`), {\n\t\t\t\t\tmaxLineLength: 64 * 1024,\n\t\t\t\t\tonLineOverflow: (prefix) => this.log(`Session worker ${workerId} stderr: ${prefix} [truncated]`),\n\t\t\t\t})\n\t\t\t: () => {};\n\t\tchild.once(\"close\", detachWorkerStderr);\n\t\tconst childClosed = new Promise<void>((resolveClose) => child.once(\"close\", () => resolveClose()));\n\t\tchild.on(\"error\", (error) => {\n\t\t\tthis.log(\n\t\t\t\t`Session worker ${workerId} process error: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t});\n\t\tconst startupGate = child.stdio[WORKER_STARTUP_GATE_FD];\n\t\tconst previousDescriptor = existing?.descriptor;\n\t\tconst previousIntentionalStop = existing?.intentionalStop;\n\t\tlet descriptorAssigned = false;\n\t\tlet childPid: number;\n\t\tlet childProcessStartId: string | undefined;\n\t\tlet worker: ResidentWorker;\n\t\ttry {\n\t\t\tif (!child.pid) {\n\t\t\t\tthrow new Error(\"Failed to obtain daemon session worker pid\");\n\t\t\t}\n\t\t\tif (!(startupGate instanceof Writable)) {\n\t\t\t\tthrow new Error(\"Failed to create daemon session worker startup gate\");\n\t\t\t}\n\t\t\tchildPid = child.pid;\n\t\t\tchildProcessStartId = getProcessStartId(childPid);\n\t\t\tawait this.assertRecoveryAllowed();\n\n\t\t\tconst descriptor: DaemonWorkerDescriptor = {\n\t\t\t\tversion: 2,\n\t\t\t\tworkerId,\n\t\t\t\tpid: childPid,\n\t\t\t\t...(childProcessStartId ? { processStartId: childProcessStartId } : {}),\n\t\t\t\tsocketPath,\n\t\t\t\trecoveryJournalPath,\n\t\t\t\torphanProcessJournalPath,\n\t\t\t\tsupervisorSocketPath: this.socketPath,\n\t\t\t\tauthenticationToken: token,\n\t\t\t\trootActiveSessionId,\n\t\t\t\townerClientId: existing?.descriptor.ownerClientId ?? ownerClientId,\n\t\t\t\tsessionDir: createCommand.config?.sessionDir,\n\t\t\t\ttelemetryDisabled: createCommand.config?.telemetryDisabled,\n\t\t\t\tcreatedAt: existing?.descriptor.createdAt ?? now,\n\t\t\t\tupdatedAt: now,\n\t\t\t\tlifecycle: \"starting\",\n\t\t\t\tcreateCommand: durableDaemonCreateCommand(createCommand),\n\t\t\t\tconsecutiveFailures: existing?.descriptor.consecutiveFailures ?? 0,\n\t\t\t};\n\t\t\tworker = existing ?? {\n\t\t\t\tdescriptor,\n\t\t\t\tdescriptorPath,\n\t\t\t\tsummaries: new Map(),\n\t\t\t\tsnapshotCache: new Map(),\n\t\t\t\ttranscriptCaches: new Map(),\n\t\t\t\tsnapshotGenerations: new Map(),\n\t\t\t\tsnapshotLoads: new Map(),\n\t\t\t\tintentionalStop: false,\n\t\t\t\tstopRevision: 0,\n\t\t\t\tlaunchEnv,\n\t\t\t\ttransientCreateCommand: ownerClientId ? createCommand : undefined,\n\t\t\t};\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor = descriptor;\n\t\t\tworker.launchEnv = launchEnv;\n\t\t\tworker.transientCreateCommand = descriptor.ownerClientId ? createCommand : undefined;\n\t\t\tdescriptorAssigned = true;\n\t\t\tthis.persistWorker(worker);\n\t\t\tworker.intentionalStop = false;\n\t\t\tthis.workers.set(workerId, worker);\n\t\t} catch (error) {\n\t\t\tif (startupGate instanceof Writable) {\n\t\t\t\tstartupGate.destroy();\n\t\t\t}\n\t\t\tawait childClosed;\n\t\t\tchild.unref();\n\t\t\ttry {\n\t\t\t\trmSync(`${descriptorPath}.${process.pid}.tmp`, { force: true });\n\t\t\t} catch (cleanupError) {\n\t\t\t\tthis.reportCleanupFailure(`worker launch temp ${workerId}`, cleanupError);\n\t\t\t}\n\t\t\tif (existing && descriptorAssigned && previousDescriptor) {\n\t\t\t\ttry {\n\t\t\t\t\texisting.descriptor = previousDescriptor;\n\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\tthis.reportCleanupFailure(`worker launch descriptor ${workerId}`, cleanupError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tawait commitWorkerStartupGate(startupGate);\n\t\t\t} catch (error) {\n\t\t\t\tstartupGate.destroy();\n\t\t\t\tawait childClosed;\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tchild.unref();\n\t\t\t}\n\t\t\tconst client = await this.connectWorker(worker, WORKER_CONNECT_TIMEOUT_MS);\n\t\t\tconst response = await client.request(withoutCommandId(createCommand), WORKER_REQUEST_TIMEOUT_MS);\n\t\t\tif (!response.success) {\n\t\t\t\tthrow deserializeDaemonError(response);\n\t\t\t}\n\t\t\tif (!isSessionSummary(response.data)) {\n\t\t\t\tthrow new Error(\"Session worker returned an invalid create response\");\n\t\t\t}\n\t\t\tconst summary = response.data;\n\t\t\tif ((summary.activeSessionId ?? summary.id) !== rootActiveSessionId) {\n\t\t\t\tthrow new Error(\"Session worker did not preserve its assigned active session id\");\n\t\t\t}\n\t\t\tworker.summaries.set(rootActiveSessionId, summary);\n\t\t\tworker.descriptor.rootSessionId = summary.sessionId;\n\t\t\tworker.descriptor.sessionFile = summary.sessionFile;\n\t\t\tawait this.subscribeWorker(worker, rootActiveSessionId);\n\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\tif (existing && (this.isWorkerRecoveryCancelled(worker) || worker.stopRevision !== recoveryStopRevision)) {\n\t\t\t\tthrow new Error(`Session worker ${workerId} recovery was cancelled`);\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\tworker.descriptor.lastError = undefined;\n\t\t\tthis.persistWorker(worker);\n\t\t\tif (!worker.descriptor.ownerClientId) {\n\t\t\t\tworker.launchEnv = undefined;\n\t\t\t\tworker.transientCreateCommand = undefined;\n\t\t\t}\n\t\t\tawait this.syncAgentPeers().catch((error) => this.log(`Could not synchronize agent peers: ${String(error)}`));\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\treturn worker;\n\t\t} catch (error) {\n\t\t\tif (isSupervisorGenerationStale(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (isSupervisorShutdownAdmissionCancelled(error)) {\n\t\t\t\tlet rolledBack = false;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.stopWorker(worker, existing === undefined, true, false, existing !== undefined, {\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tclosed: childClosed,\n\t\t\t\t\t});\n\t\t\t\t\trolledBack = true;\n\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\tthis.reportCleanupFailure(`cancelled worker launch ${workerId}`, cleanupError);\n\t\t\t\t}\n\t\t\t\tconst mappedWorker = this.workers.get(workerId);\n\t\t\t\tif (\n\t\t\t\t\trolledBack &&\n\t\t\t\t\texisting &&\n\t\t\t\t\tpreviousDescriptor &&\n\t\t\t\t\t!this.shuttingDown &&\n\t\t\t\t\texisting.stopRevision === recoveryStopRevision &&\n\t\t\t\t\texisting.descriptor.stopRequestedAt === undefined &&\n\t\t\t\t\t(mappedWorker === undefined || mappedWorker === existing)\n\t\t\t\t) {\n\t\t\t\t\texisting.descriptor = previousDescriptor;\n\t\t\t\t\texisting.intentionalStop = previousIntentionalStop ?? false;\n\t\t\t\t\tthis.workers.set(workerId, existing);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.persistWorker(existing);\n\t\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\t\tthis.reportCleanupFailure(`cancelled worker recovery ${workerId}`, cleanupError);\n\t\t\t\t\t}\n\t\t\t\t\tthis.deferWorkerRecovery(existing, error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tconst shouldResumeRecovery =\n\t\t\t\texisting !== undefined &&\n\t\t\t\t!this.shuttingDown &&\n\t\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\t\tworker.stopRevision === recoveryStopRevision;\n\t\t\tawait this.stopWorker(worker, existing === undefined, true, false, existing !== undefined).catch((stopError) =>\n\t\t\t\tthis.log(`Could not stop failed worker ${workerId}: ${String(stopError)}`),\n\t\t\t);\n\t\t\tif (\n\t\t\t\tshouldResumeRecovery &&\n\t\t\t\t!this.shuttingDown &&\n\t\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\t\tworker.stopRevision === recoveryStopRevision\n\t\t\t) {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\tworker.intentionalStop = false;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tthis.workers.set(workerId, worker);\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async connectWorker(worker: ResidentWorker, timeoutMs: number): Promise<DaemonWorkerClient> {\n\t\tconst deadline = Date.now() + timeoutMs;\n\t\tlet lastError: unknown;\n\t\twhile (Date.now() < deadline) {\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tconst client = new DaemonWorkerClient(worker.descriptor.socketPath);\n\t\t\ttry {\n\t\t\t\tawait client.connect(Math.min(500, Math.max(50, deadline - Date.now())));\n\t\t\t\tawait client.waitForHello(1000);\n\t\t\t\tawait client.authenticateWorker(\n\t\t\t\t\tworker.descriptor.authenticationToken,\n\t\t\t\t\tthis.supervisorAuthenticationClaim(),\n\t\t\t\t\t1000,\n\t\t\t\t);\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\tclient.onFrame((frame) => this.handleWorkerFrame(worker, frame));\n\t\t\t\tclient.onClose((error) => void this.handleWorkerClose(worker, client, error));\n\t\t\t\tworker.client?.close();\n\t\t\t\tworker.client = client;\n\t\t\t\treturn client;\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error;\n\t\t\t\tclient.close();\n\t\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tawait delay(25);\n\t\t\t}\n\t\t}\n\t\tthrow new Error(`Timed out connecting to daemon session worker: ${String(lastError)}`);\n\t}\n\n\tprivate async subscribeWorker(worker: ResidentWorker, activeSessionId: string): Promise<void> {\n\t\tif (!worker.client) {\n\t\t\tthrow new Error(\"Session worker is not connected\");\n\t\t}\n\t\tconst supportsExtensionUi = [...this.clients].some(\n\t\t\t(client) => client.attachedActiveSessionIds.has(activeSessionId) && client.supportsExtensionUi,\n\t\t);\n\t\tconst response = await worker.client.requestWorker({\n\t\t\ttype: \"worker_subscribe\",\n\t\t\tactiveSessionId,\n\t\t\tcapabilities: supportsExtensionUi\n\t\t\t\t? [\"attach_snapshot\", \"event_sequence\", \"extension_ui\", \"slim_attach\", \"chunked_snapshot\"]\n\t\t\t\t: [\"attach_snapshot\", \"event_sequence\", \"slim_attach\", \"chunked_snapshot\"],\n\t\t\tsupportsExtensionUi,\n\t\t});\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error);\n\t\t}\n\t}\n\n\tprivate async adoptOrRecoverWorker(worker: ResidentWorker): Promise<void> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (worker.descriptor.stopRequestedAt) {\n\t\t\ttry {\n\t\t\t\t// A descriptor persisted before identity tracking has no\n\t\t\t\t// processStartId, so stopWorker could neither signal the live\n\t\t\t\t// process nor let the finalizer escalate. Authenticating on the\n\t\t\t\t// worker's socket proves the pid still belongs to our worker, so\n\t\t\t\t// the start id observed while it was alive can be persisted (and\n\t\t\t\t// the connected client gives stopWorker its graceful IPC path).\n\t\t\t\tif (worker.descriptor.processStartId === undefined && isProcessAlive(worker.descriptor.pid)) {\n\t\t\t\t\tconst observedProcessStartId = getProcessStartId(worker.descriptor.pid);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.connectWorker(worker, 2000);\n\t\t\t\t\t\tif (observedProcessStartId) {\n\t\t\t\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Unverifiable identity stays untrusted; the stop below\n\t\t\t\t\t\t// still runs its graceful path and the finalizer keeps\n\t\t\t\t\t\t// waiting rather than signalling a possibly-recycled pid.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.stopWorker(worker, true, true, worker.descriptor.archiveOnStop === true);\n\t\t\t\tthis.log(`Completed intentional stop for worker ${worker.descriptor.workerId} during supervisor adoption`);\n\t\t\t} catch (error) {\n\t\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\t\tworker.descriptor.lastError = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tthis.log(`Could not complete intentional stop for worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tif (!isProcessAlive(worker.descriptor.pid)) {\n\t\t\t\tthrow new Error(\"Session worker process is no longer running\");\n\t\t\t}\n\t\t\tconst observedProcessStartId = getProcessStartId(worker.descriptor.pid);\n\t\t\tawait this.connectWorker(worker, 2000);\n\t\t\tawait this.subscribeWorker(worker, worker.descriptor.rootActiveSessionId);\n\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\tif (worker.descriptor.processStartId === undefined && observedProcessStartId) {\n\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\tthis.persistWorker(worker);\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t} catch (error) {\n\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.log(`Could not adopt worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\tawait this.recoverWorker(worker);\n\t\t}\n\t}\n\n\tprivate async handleWorkerClose(worker: ResidentWorker, client: DaemonWorkerClient, error: Error): Promise<void> {\n\t\tif (worker.client !== client) {\n\t\t\treturn;\n\t\t}\n\t\tworker.client = undefined;\n\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker disconnected while input was paused\");\n\t\tconst interrupted = new Map<string, Set<string>>();\n\t\tfor (const [activeSessionId, generations] of worker.snapshotGenerations ?? []) {\n\t\t\tfor (const generation of generations.values()) {\n\t\t\t\tif (generation.incoming || !generation.transcript.complete) {\n\t\t\t\t\tconst snapshotIds = interrupted.get(activeSessionId) ?? new Set<string>();\n\t\t\t\t\tsnapshotIds.add(generation.transcript.snapshotId);\n\t\t\t\t\tinterrupted.set(activeSessionId, snapshotIds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const [activeSessionId, transcript] of worker.transcriptCaches) {\n\t\t\tif (!transcript.complete) {\n\t\t\t\tconst snapshotIds = interrupted.get(activeSessionId) ?? new Set<string>();\n\t\t\t\tsnapshotIds.add(transcript.snapshotId);\n\t\t\t\tinterrupted.set(activeSessionId, snapshotIds);\n\t\t\t}\n\t\t}\n\t\tfor (const [activeSessionId, snapshotIds] of interrupted) {\n\t\t\tfor (const snapshotId of snapshotIds) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tnew Error(\"Session worker disconnected during snapshot transfer\"),\n\t\t\t\t\tfalse,\n\t\t\t\t\tsnapshotId,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (this.shuttingDown || worker.intentionalStop) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t} catch (recoveryError) {\n\t\t\tif (!isSupervisorGenerationStale(recoveryError)) {\n\t\t\t\tthis.deferWorkerRecovery(worker, error);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\treturn;\n\t\t}\n\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\tworker.descriptor.lastError = error.message;\n\t\tthis.persistWorker(worker);\n\t\tvoid this.syncAgentPeers().catch(() => undefined);\n\t\tvoid this.recoverWorker(worker);\n\t}\n\n\tprivate isWorkerRecoveryEligible(worker: ResidentWorker): boolean {\n\t\treturn this.isWorkerRecoveryCandidate(worker) && worker.recovery === undefined;\n\t}\n\n\tprivate isWorkerRecoveryCandidate(worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\t!this.shuttingDown &&\n\t\t\t!worker.intentionalStop &&\n\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.client === undefined\n\t\t);\n\t}\n\n\tprivate deferWorkerRecovery(worker: ResidentWorker, disconnectError: Error): void {\n\t\tif (worker.deferredRecovery) {\n\t\t\treturn;\n\t\t}\n\t\tworker.deferredRecovery = this.resumeDeferredWorkerRecovery(worker, disconnectError).finally(() => {\n\t\t\tworker.deferredRecovery = undefined;\n\t\t});\n\t}\n\n\tprivate async resumeDeferredWorkerRecovery(worker: ResidentWorker, disconnectError: Error): Promise<void> {\n\t\twhile (true) {\n\t\t\tawait unrefDelay(DEFERRED_RECOVERY_RECHECK_MS);\n\t\t\tif (!this.isWorkerRecoveryCandidate(worker)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t} catch (error) {\n\t\t\t\tif (isSupervisorGenerationStale(error)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryCandidate(worker)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\tworker.descriptor.lastError = disconnectError.message;\n\t\t\tthis.persistWorker(worker);\n\t\t\tvoid this.syncAgentPeers().catch(() => undefined);\n\t\t\tvoid this.recoverWorker(worker);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate failWorkerSnapshotCache(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\terror: Error,\n\t\tcloseWorkerChannel = false,\n\t\texpectedSnapshotId?: string,\n\t): void {\n\t\tconst generations = worker.snapshotGenerations?.get(activeSessionId);\n\t\tif (expectedSnapshotId) {\n\t\t\tconst generation = generations?.get(expectedSnapshotId);\n\t\t\tif (generation) {\n\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, error);\n\t\t\t} else {\n\t\t\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\t\t\tif (transcript?.snapshotId !== expectedSnapshotId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttranscript.markFailed(error);\n\t\t\t\ttranscript.dispose();\n\t\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === expectedSnapshotId) {\n\t\t\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst failedTranscripts = new Set<SnapshotTranscriptCache>();\n\t\t\tfor (const generation of [...(generations?.values() ?? [])]) {\n\t\t\t\tfailedTranscripts.add(generation.transcript);\n\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, error);\n\t\t\t}\n\t\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\t\tif (transcript && !failedTranscripts.has(transcript)) {\n\t\t\t\ttranscript.markFailed(error);\n\t\t\t\ttranscript.dispose();\n\t\t\t}\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t\tif (closeWorkerChannel) {\n\t\t\tconst client = worker.client;\n\t\t\tif (client) {\n\t\t\t\tthis.handleWorkerClose(worker, client, error);\n\t\t\t\tclient.close();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate retireWorkerSnapshotCache(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\texpectedTranscript: SnapshotTranscriptCache,\n\t): void {\n\t\tif (worker.transcriptCaches.get(activeSessionId) === expectedTranscript) {\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t}\n\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === expectedTranscript.snapshotId) {\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, expectedTranscript.snapshotId);\n\t\tif (!generation) {\n\t\t\texpectedTranscript.dispose();\n\t\t\treturn;\n\t\t}\n\t\tgeneration.retired = true;\n\t\tthis.settleSnapshotDuplicateValidation(generation);\n\t\tif (generation.incoming) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\texpectedTranscript.dispose();\n\t}\n\n\tprivate snapshotGenerationsFor(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t): Map<string, SnapshotTranscriptGeneration> {\n\t\tworker.snapshotGenerations ??= new Map();\n\t\tlet generations = worker.snapshotGenerations.get(activeSessionId);\n\t\tif (!generations) {\n\t\t\tgenerations = new Map();\n\t\t\tworker.snapshotGenerations.set(activeSessionId, generations);\n\t\t}\n\t\treturn generations;\n\t}\n\n\tprivate snapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tsnapshotId: string,\n\t): SnapshotTranscriptGeneration | undefined {\n\t\treturn worker.snapshotGenerations?.get(activeSessionId)?.get(snapshotId);\n\t}\n\n\tprivate currentSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t): SnapshotTranscriptGeneration | undefined {\n\t\tworker.transcriptCaches ??= new Map();\n\t\tworker.snapshotCache ??= new Map();\n\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\tif (!transcript) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\tlet generation = generations.get(transcript.snapshotId);\n\t\tif (generation) {\n\t\t\treturn generation;\n\t\t}\n\t\tconst result = worker.snapshotCache.get(activeSessionId);\n\t\tif (!result) {\n\t\t\treturn undefined;\n\t\t}\n\t\tgeneration = {\n\t\t\ttranscript,\n\t\t\tresult,\n\t\t\tincoming: false,\n\t\t\tretired: false,\n\t\t};\n\t\tgenerations.set(transcript.snapshotId, generation);\n\t\treturn generation;\n\t}\n\n\tprivate deleteSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tgeneration: SnapshotTranscriptGeneration,\n\t): void {\n\t\tconst generations = worker.snapshotGenerations?.get(activeSessionId);\n\t\tif (!generations) {\n\t\t\treturn;\n\t\t}\n\t\tif (generations.get(generation.transcript.snapshotId) === generation) {\n\t\t\tgenerations.delete(generation.transcript.snapshotId);\n\t\t}\n\t\tif (generations.size === 0) {\n\t\t\tworker.snapshotGenerations.delete(activeSessionId);\n\t\t}\n\t}\n\n\tprivate failSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tgeneration: SnapshotTranscriptGeneration,\n\t\terror: Error,\n\t): void {\n\t\tthis.settleSnapshotDuplicateValidation(generation, error);\n\t\tgeneration.transcript.markFailed(error);\n\t\tgeneration.transcript.dispose();\n\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\tif (worker.transcriptCaches.get(activeSessionId) === generation.transcript) {\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t}\n\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === generation.transcript.snapshotId) {\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t}\n\n\tprivate createSnapshotDuplicateValidation(): SnapshotDuplicateValidation {\n\t\tlet resolve!: () => void;\n\t\tlet reject!: (error: Error) => void;\n\t\tconst promise = new Promise<void>((resolvePromise, rejectPromise) => {\n\t\t\tresolve = resolvePromise;\n\t\t\treject = rejectPromise;\n\t\t});\n\t\tvoid promise.catch(() => undefined);\n\t\treturn { promise, resolve, reject };\n\t}\n\n\tprivate settleSnapshotDuplicateValidation(generation: SnapshotTranscriptGeneration, error?: Error): void {\n\t\tconst validation = generation.validation;\n\t\tif (!validation) {\n\t\t\treturn;\n\t\t}\n\t\tgeneration.validation = undefined;\n\t\tif (error) {\n\t\t\tvalidation.reject(error);\n\t\t} else {\n\t\t\tvalidation.resolve();\n\t\t}\n\t}\n\n\tprivate async recoverWorker(worker: ResidentWorker): Promise<void> {\n\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.ownerClientId && !worker.launchEnv && !isProcessAlive(worker.descriptor.pid)) {\n\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\tworker.descriptor.lastError = \"Waiting for the owning client to reconnect\";\n\t\t\tthis.persistWorker(worker);\n\t\t\treturn;\n\t\t}\n\t\tif (worker.recovery) {\n\t\t\treturn worker.recovery;\n\t\t}\n\t\tworker.recovery = (async () => {\n\t\t\tfor (const [retryIndex, retryDelay] of WORKER_RETRY_DELAYS_MS.entries()) {\n\t\t\t\tawait delay(retryDelay);\n\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\tconst processAlive = isProcessAlive(worker.descriptor.pid);\n\t\t\t\t\tconst observedProcessStartId = processAlive ? getProcessStartId(worker.descriptor.pid) : undefined;\n\t\t\t\t\tconst processIdentityMatches =\n\t\t\t\t\t\tworker.descriptor.processStartId === undefined ||\n\t\t\t\t\t\tobservedProcessStartId === worker.descriptor.processStartId;\n\t\t\t\t\tif (processAlive && processIdentityMatches) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.connectWorker(worker, 1500);\n\t\t\t\t\t\t\tawait this.subscribeWorker(worker, worker.descriptor.rootActiveSessionId);\n\t\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\t\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (worker.descriptor.processStartId === undefined && observedProcessStartId) {\n\t\t\t\t\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\t\t\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\t\tawait this.syncAgentPeers().catch((error) =>\n\t\t\t\t\t\t\t\tthis.log(`Could not synchronize agent peers after worker recovery: ${String(error)}`),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t\t\tworker.client?.close();\n\t\t\t\t\t\t\tworker.client = undefined;\n\t\t\t\t\t\t\tif (retryIndex < WORKER_RETRY_DELAYS_MS.length - 1) {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tprocessAlive &&\n\t\t\t\t\t\t(worker.descriptor.processStartId === undefined || observedProcessStartId === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Cannot safely replace live session worker ${worker.descriptor.workerId} without a verified process identity`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst recoveryCommand = worker.descriptor.ownerClientId ? worker.transientCreateCommand : undefined;\n\t\t\t\t\tif (!recoveryCommand || !worker.launchEnv) {\n\t\t\t\t\t\tawait this.recoverUncertainWorkerOperations(worker, false);\n\t\t\t\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\t\t\t\tworker.descriptor.lastError = \"Waiting for a client with fresh runtime context\";\n\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\tawait this.syncAgentPeers().catch(() => undefined);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst safeToKillWorkerProcess =\n\t\t\t\t\t\tprocessAlive && processIdentityMatches && worker.descriptor.processStartId !== undefined;\n\t\t\t\t\tawait this.recoverUncertainWorkerOperations(worker, safeToKillWorkerProcess);\n\t\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait this.launchWorker(recoveryCommand, worker, worker.descriptor.ownerClientId);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (isSupervisorRecoveryCancelled(error) || this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tworker.client?.close();\n\t\t\t\t\tworker.client = undefined;\n\t\t\t\t\tworker.descriptor.consecutiveFailures++;\n\t\t\t\t\tworker.descriptor.lastFailureAt = new Date().toISOString();\n\t\t\t\t\tworker.descriptor.lastError = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\tthis.persistWorker(worker);\n\t\t\tawait this.syncAgentPeers().catch(() => undefined);\n\t\t\tthis.log(`Worker ${worker.descriptor.workerId} failed after three recovery attempts`);\n\t\t})().finally(() => {\n\t\t\tworker.recovery = undefined;\n\t\t});\n\t\treturn worker.recovery;\n\t}\n\n\tprivate isWorkerRecoveryCancelled(worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\tthis.shuttingDown ||\n\t\t\tworker.intentionalStop ||\n\t\t\tworker.descriptor.stopRequestedAt !== undefined ||\n\t\t\tthis.workers.get(worker.descriptor.workerId) !== worker\n\t\t);\n\t}\n\n\tprivate async recoverUncertainWorkerOperations(worker: ResidentWorker, killWorkerProcess = true): Promise<void> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (killWorkerProcess) {\n\t\t\tsignalProcessGroupOrProcess(worker.descriptor.pid, \"SIGKILL\");\n\t\t}\n\t\tconst orphanProcessJournalPath = worker.descriptor.orphanProcessJournalPath;\n\t\tif (orphanProcessJournalPath) {\n\t\t\ttry {\n\t\t\t\tfor (const orphan of readActiveOrphanProcesses(orphanProcessJournalPath, worker.descriptor.pid)) {\n\t\t\t\t\tif (!shouldReapOrphanProcess(orphan)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tkillOrphanProcess(orphan.pid);\n\t\t\t\t}\n\t\t\t\tclearOrphanProcessJournal(orphanProcessJournalPath);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Could not reap orphaned worker resources: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t\tconst journal = new WorkerRecoveryJournal(worker.descriptor.recoveryJournalPath);\n\t\tconst latest = journal.getLatest();\n\t\tconst uncertain = latest.filter((record) => record.busy);\n\t\tif (uncertain.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst interruptedSessions = new Map<\n\t\t\tstring,\n\t\t\t{ activeSessionId: string; sessionFile: string; operations: Set<string> }\n\t\t>();\n\t\tfor (const record of uncertain) {\n\t\t\tconst sessionFile =\n\t\t\t\trecord.sessionFile ??\n\t\t\t\t(record.activeSessionId === worker.descriptor.rootActiveSessionId\n\t\t\t\t\t? worker.descriptor.sessionFile\n\t\t\t\t\t: undefined);\n\t\t\tif (!sessionFile) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst key = `${record.activeSessionId}\\0${sessionFile}`;\n\t\t\tlet interrupted = interruptedSessions.get(key);\n\t\t\tif (!interrupted) {\n\t\t\t\tinterrupted = { activeSessionId: record.activeSessionId, sessionFile, operations: new Set() };\n\t\t\t\tinterruptedSessions.set(key, interrupted);\n\t\t\t}\n\t\t\tinterrupted.operations.add(record.operation);\n\t\t}\n\t\tawait this.assertRecoveryAllowed();\n\t\tawait Promise.all(\n\t\t\t[...interruptedSessions.values()].map((interrupted) =>\n\t\t\t\tthis.catalog.markInterrupted(interrupted.sessionFile, interrupted.activeSessionId, [\n\t\t\t\t\t...interrupted.operations,\n\t\t\t\t]),\n\t\t\t),\n\t\t);\n\t\tawait this.assertRecoveryAllowed();\n\t\tfor (const record of latest) {\n\t\t\tjournal.record({\n\t\t\t\tactiveSessionId: record.activeSessionId,\n\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t...(record.sessionFile ? { sessionFile: record.sessionFile } : {}),\n\t\t\t\tbusy: false,\n\t\t\t\toperation: \"recovery_hold\",\n\t\t\t});\n\t\t}\n\t\tthis.log(\n\t\t\t`Recovered worker ${worker.descriptor.workerId} without replaying uncertain operations: ${uncertain\n\t\t\t\t.map((record) => record.operation)\n\t\t\t\t.join(\", \")}`,\n\t\t);\n\t}\n\n\tprivate async refreshWorkerSummaries(worker: ResidentWorker, recovery = false): Promise<void> {\n\t\tif (this.isWorkerStopping(worker)) {\n\t\t\tthrow new Error(\"Session worker is stopping\");\n\t\t}\n\t\tif (!worker.client) {\n\t\t\tthrow new Error(\"Session worker is not connected\");\n\t\t}\n\t\tconst response = await worker.client.request({ type: \"list\" }, 5000);\n\t\tconst summaries = sessionSummariesFromResponse(response);\n\t\tworker.summaries = new Map(summaries.map((summary) => [summary.activeSessionId ?? summary.id, summary]));\n\t\tfor (const summary of summaries) {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\tif (summary.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamReconstructor.seed(activeSessionId, summary.streamingMessage);\n\t\t\t} else if (!summary.isStreaming) {\n\t\t\t\tthis.streamReconstructor.clear(activeSessionId);\n\t\t\t}\n\t\t}\n\t\tconst root = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\tif (root) {\n\t\t\tif (recovery) {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t}\n\t\t\tworker.descriptor.rootSessionId = root.sessionId;\n\t\t\tworker.descriptor.sessionFile = root.sessionFile;\n\t\t\tworker.descriptor.createCommand = durableDaemonCreateCommand({\n\t\t\t\ttype: \"create\",\n\t\t\t\tsessionPath: root.sessionFile,\n\t\t\t\tnoSession: worker.descriptor.createCommand.noSession,\n\t\t\t});\n\t\t\tthis.persistWorker(worker);\n\t\t}\n\t}\n\n\tprivate async familyCatalogEntries(): Promise<AgentFamilyCatalogEntry[]> {\n\t\tconst active = [...this.workers.values()].flatMap((worker) => [...worker.summaries.values()]);\n\t\tconst activePaths = new Set(\n\t\t\tactive.flatMap((summary) => (summary.sessionFile ? [canonicalSessionPath(summary.sessionFile)] : [])),\n\t\t);\n\t\tconst savedRoots = (await this.catalog.list()).filter(\n\t\t\t(info) =>\n\t\t\t\t(info.rlmDepth ?? (info.parentSessionPath ? -1 : 0)) === 0 &&\n\t\t\t\t!activePaths.has(canonicalSessionPath(info.path)),\n\t\t);\n\t\treturn [...active, ...savedRoots.map((info) => summaryForInactiveSession(info))].map((summary) =>\n\t\t\tthis.familyCatalogEntry(summary),\n\t\t);\n\t}\n\n\tprivate async withSessionNameReservation<T>(\n\t\tinput: { name: string; depth: number; parentSessionId?: string; parentSessionPath?: string },\n\t\taction: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst key = sessionNameReservationKey(input);\n\t\tif (this.pendingSessionNames.has(key)) {\n\t\t\tthrow new Error(formatAgentSessionNameUnavailable(input.name, input.depth));\n\t\t}\n\t\tthis.pendingSessionNames.add(key);\n\t\ttry {\n\t\t\treturn await action();\n\t\t} finally {\n\t\t\tthis.pendingSessionNames.delete(key);\n\t\t}\n\t}\n\n\tprivate async assertSupervisorSessionNameAvailable(\n\t\ttarget: Pick<SessionSummary, \"sessionId\" | \"rlmDepth\" | \"parentSessionId\" | \"parentSessionPath\">,\n\t\tname: string,\n\t): Promise<void> {\n\t\tassertAgentSessionNameAvailable(await this.familyCatalogEntries(), {\n\t\t\tname,\n\t\t\tdepth: target.rlmDepth ?? 0,\n\t\t\tparentSessionId: target.parentSessionId,\n\t\t\tparentSessionPath: target.parentSessionPath ? canonicalSessionPath(target.parentSessionPath) : undefined,\n\t\t\tignoreSessionId: target.sessionId,\n\t\t});\n\t}\n\n\t/**\n\t * Supervisor-side view of the spawn ledger for this supervisor's sessions\n\t * dir. Workers hold their own instances over the same file; every read\n\t * re-reads the file, so cross-process freshness is per-operation.\n\t */\n\tprivate rlmSpawnLedger(): RlmSpawnLedger {\n\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tthis.rlmSpawnLedgerInstance ??= new RlmSpawnLedger(\n\t\t\tagentDir,\n\t\t\tthis.defaultSessionConfig.sessionDir ?? getSessionsDir(agentDir),\n\t\t\tcreateRlmLedgerRegistrySeedSource(),\n\t\t\t(message) => this.log(message),\n\t\t);\n\t\treturn this.rlmSpawnLedgerInstance;\n\t}\n\n\t/**\n\t * Ledger-backed same-parent rows for name reservation and admission. Rows\n\t * carry ledger topology plus best-effort display fields; consumers here\n\t * only need id/path/name/depth/parent.\n\t */\n\tprivate rlmLedgerSiblings(sessionPath: string): Promise<SessionInfo[]> {\n\t\treturn this.rlmSpawnLedger().siblings(sessionPath);\n\t}\n\n\tprivate async savedSessionNameReservationInput(\n\t\tsessionPath: string,\n\t\tname: string,\n\t): Promise<{ name: string; depth: number; parentSessionId?: string; parentSessionPath?: string }> {\n\t\tconst targetPath = canonicalSessionPath(sessionPath);\n\t\tconst active = [...this.workers.values()]\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.find((summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === targetPath);\n\t\tif (active) return this.summaryNameReservationInput(active, name);\n\t\tconst siblings = await this.rlmLedgerSiblings(sessionPath);\n\t\tconst saved = siblings.find((info) => canonicalSessionPath(info.path) === targetPath);\n\t\tif (!saved) throw new Error(`Session not found: ${sessionPath}`);\n\t\treturn {\n\t\t\tname,\n\t\t\tdepth: saved.rlmDepth ?? siblings.find((sibling) => sibling.rlmDepth !== undefined)?.rlmDepth ?? 0,\n\t\t\tparentSessionPath: saved.parentSessionPath,\n\t\t};\n\t}\n\n\tprivate summaryNameReservationInput(\n\t\ttarget: Pick<SessionSummary, \"rlmDepth\" | \"parentSessionId\" | \"parentSessionPath\">,\n\t\tname: string,\n\t): { name: string; depth: number; parentSessionId?: string; parentSessionPath?: string } {\n\t\tconst depth = target.rlmDepth ?? (target.parentSessionPath ? 1 : 0);\n\t\treturn {\n\t\t\tname,\n\t\t\tdepth,\n\t\t\t...(depth > 0 && target.parentSessionId ? { parentSessionId: target.parentSessionId } : {}),\n\t\t\t...(depth > 0 && target.parentSessionPath ? { parentSessionPath: target.parentSessionPath } : {}),\n\t\t};\n\t}\n\n\tprivate async assertSupervisorSavedSessionNameAvailable(sessionPath: string, name: string): Promise<void> {\n\t\tconst targetPath = canonicalSessionPath(sessionPath);\n\t\tconst active = [...this.workers.values()]\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.find((summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === targetPath);\n\t\tif (active) return this.assertSupervisorSessionNameAvailable(active, name);\n\t\tconst siblings = await this.rlmLedgerSiblings(sessionPath);\n\t\tconst saved = siblings.find((info) => canonicalSessionPath(info.path) === targetPath);\n\t\tif (!saved) throw new Error(`Session not found: ${sessionPath}`);\n\t\tif (saved.parentSessionPath && (saved.rlmDepth ?? 0) > 0) {\n\t\t\tthis.assertSavedSiblingNameAvailable(siblings, saved, name);\n\t\t} else {\n\t\t\tawait this.assertSupervisorSessionNameAvailable(summaryForInactiveSession(saved), name);\n\t\t}\n\t}\n\n\tprivate assertSavedSiblingNameAvailable(siblings: SessionInfo[], target: SessionInfo, name: string): void {\n\t\tconst setDepth = target.rlmDepth ?? siblings.find((sibling) => sibling.rlmDepth !== undefined)?.rlmDepth ?? 0;\n\t\tassertAgentSessionNameAvailable(\n\t\t\tsiblings.map((info) => {\n\t\t\t\tconst summary = summaryForInactiveSession(info);\n\t\t\t\treturn {\n\t\t\t\t\tid: summary.sessionId,\n\t\t\t\t\t...(summary.sessionName ? { name: summary.sessionName } : {}),\n\t\t\t\t\tdepth: setDepth,\n\t\t\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t\t\t...(summary.parentSessionPath\n\t\t\t\t\t\t? { parentSessionPath: canonicalSessionPath(summary.parentSessionPath) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\tdepth: setDepth,\n\t\t\t\tparentSessionPath: target.parentSessionPath ? canonicalSessionPath(target.parentSessionPath) : undefined,\n\t\t\t\tignoreSessionId: target.id,\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate syncAgentPeers(): Promise<void> {\n\t\tconst sync = this.agentPeerSyncQueue\n\t\t\t.catch(() => undefined)\n\t\t\t.then(async () => {\n\t\t\t\tconst readyWorkers = [...this.workers.values()].filter(\n\t\t\t\t\t(worker): worker is ResidentWorker & { client: DaemonWorkerClient } =>\n\t\t\t\t\t\tthis.isLiveWorker(worker) && worker.descriptor.lifecycle === \"ready\" && worker.client !== undefined,\n\t\t\t\t);\n\t\t\t\tawait Promise.all(\n\t\t\t\t\treadyWorkers.map(async (worker) => {\n\t\t\t\t\t\tconst peers = [\n\t\t\t\t\t\t\t...readyWorkers\n\t\t\t\t\t\t\t\t.filter((candidate) => candidate !== worker)\n\t\t\t\t\t\t\t\t.flatMap((candidate) => {\n\t\t\t\t\t\t\t\t\tconst root = candidate.summaries.get(candidate.descriptor.rootActiveSessionId);\n\t\t\t\t\t\t\t\t\treturn root ? [this.agentPeerSummary(root)] : [];\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst response = await worker.client.requestWorker({ type: \"worker_sync_agent_peers\", peers }, 5000);\n\t\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\t\tthrow new Error(response.error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\tthis.agentPeerSyncQueue = sync;\n\t\treturn sync;\n\t}\n\n\tprivate isVisibleWorker(worker: ResidentWorker): boolean {\n\t\treturn worker.descriptor.ownerClientId === undefined;\n\t}\n\n\t/** A worker with a durable or in-memory stop intent is stopping, never live. */\n\tprivate isWorkerStopping(worker: ResidentWorker): boolean {\n\t\treturn worker.intentionalStop || worker.descriptor.stopRequestedAt !== undefined;\n\t}\n\n\t/** Live workers are visible to all clients and not stopping. */\n\tprivate isLiveWorker(worker: ResidentWorker): boolean {\n\t\treturn this.isVisibleWorker(worker) && !this.isWorkerStopping(worker);\n\t}\n\n\t/**\n\t * The lifecycle reported to clients. A stop intent always wins, and a worker\n\t * whose process connection is gone is never reported as \"ready\".\n\t */\n\tprivate effectiveWorkerState(worker: ResidentWorker): DaemonWorkerLifecycle {\n\t\tif (this.isWorkerStopping(worker)) {\n\t\t\treturn \"stopping\";\n\t\t}\n\t\tif (worker.descriptor.lifecycle === \"ready\" && worker.client === undefined) {\n\t\t\treturn \"recovering\";\n\t\t}\n\t\treturn worker.descriptor.lifecycle;\n\t}\n\n\tprivate requireAvailableWorkerClient(worker: ResidentWorker, allowStopping = false): DaemonWorkerClient {\n\t\tif (\n\t\t\t!worker.client ||\n\t\t\tworker.descriptor.lifecycle !== \"ready\" ||\n\t\t\t(!allowStopping && this.isWorkerStopping(worker))\n\t\t) {\n\t\t\tthrow new Error(`Session worker is ${this.effectiveWorkerState(worker)}`);\n\t\t}\n\t\treturn worker.client;\n\t}\n\n\tprivate familyCatalogEntry(summary: SessionSummary): AgentFamilyCatalogEntry {\n\t\tconst depth = summary.rlmDepth ?? (summary.parentSessionPath ? 1 : 0);\n\t\treturn {\n\t\t\tid: summary.sessionId,\n\t\t\t...(summary.sessionName ? { name: summary.sessionName } : {}),\n\t\t\tdepth,\n\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t...(depth > 0 && summary.parentSessionId ? { parentSessionId: summary.parentSessionId } : {}),\n\t\t\t...(depth > 0 && summary.parentSessionPath\n\t\t\t\t? { parentSessionPath: canonicalSessionPath(summary.parentSessionPath) }\n\t\t\t\t: {}),\n\t\t\t...(summary.sessionFile ? { sessionPath: canonicalSessionPath(summary.sessionFile) } : {}),\n\t\t};\n\t}\n\n\tprivate agentPeerSummary(summary: SessionSummary): AgentSessionMessageAgentSummary {\n\t\treturn {\n\t\t\tactiveSessionId: summary.activeSessionId ?? summary.id,\n\t\t\tsessionId: summary.sessionId,\n\t\t\t...(summary.sessionName ? { sessionName: summary.sessionName } : {}),\n\t\t\truntimeKind: summary.runtimeKind ?? \"top-level\",\n\t\t\tcwd: summary.cwd,\n\t\t\tisStreaming: summary.isStreaming,\n\t\t\tunfinishedActionCount:\n\t\t\t\tsummary.unfinishedActionCount ??\n\t\t\t\t(summary.sessionActions.active\n\t\t\t\t\t? 1 + summary.sessionActions.queuedCount\n\t\t\t\t\t: summary.sessionActions.queuedCount),\n\t\t\t...(summary.parentActiveSessionId ? { parentActiveSessionId: summary.parentActiveSessionId } : {}),\n\t\t\t...(summary.parentSessionId ? { parentSessionId: summary.parentSessionId } : {}),\n\t\t\t...(summary.parentSessionPath ? { parentSessionPath: summary.parentSessionPath } : {}),\n\t\t\t...(summary.sessionFile ? { sessionPath: summary.sessionFile } : {}),\n\t\t\t...(summary.rlmDepth !== undefined ? { rlmDepth: summary.rlmDepth } : {}),\n\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t...(summary.rlmChildId ? { rlmChildId: summary.rlmChildId } : {}),\n\t\t};\n\t}\n\n\tprivate publicSummary(worker: ResidentWorker, summary: SessionSummary): SessionSummary {\n\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\treturn {\n\t\t\t...summary,\n\t\t\tattachedClients: [...this.clients].filter((client) => client.attachedActiveSessionIds.has(activeSessionId))\n\t\t\t\t.length,\n\t\t\tworkerState: this.effectiveWorkerState(worker),\n\t\t\tworkerPid: worker.descriptor.pid,\n\t\t};\n\t}\n\n\tprivate async findWorker(\n\t\tselector: string,\n\t\tincludeWorker?: (worker: ResidentWorker) => boolean,\n\t): Promise<WorkerMatch> {\n\t\tlet matches = this.matchWorkers(selector, includeWorker);\n\t\tif (matches.length === 0) {\n\t\t\tawait Promise.all(\n\t\t\t\t[...this.workers.values()].map((worker) => this.refreshWorkerSummaries(worker).catch(() => undefined)),\n\t\t\t);\n\t\t\tmatches = this.matchWorkers(selector, includeWorker);\n\t\t}\n\t\tif (matches.length === 1) {\n\t\t\treturn matches[0]!;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tthrow new Error(`Ambiguous active session \"${selector}\"`);\n\t\t}\n\t\tthrow new Error(`Unknown active session: ${selector}`);\n\t}\n\n\tprivate findWorkerForClient(client: DaemonSocketClient, selector: string): Promise<WorkerMatch> {\n\t\treturn this.findWorker(selector, (worker) => this.isWorkerAccessibleToClient(client, worker));\n\t}\n\n\tprivate isWorkerAccessibleToClient(client: DaemonSocketClient, worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\tworker.descriptor.ownerClientId === undefined ||\n\t\t\tworker.descriptor.ownerClientId === this.protocolClientId(client)\n\t\t);\n\t}\n\n\tprivate assertWorkerAccessibleToClient(client: DaemonSocketClient, worker: ResidentWorker, selector: string): void {\n\t\tif (!this.isWorkerAccessibleToClient(client, worker)) {\n\t\t\tthrow new Error(`Unknown active session: ${selector}`);\n\t\t}\n\t}\n\n\tprivate matchWorkers(selector: string, includeWorker?: (worker: ResidentWorker) => boolean): WorkerMatch[] {\n\t\tconst exact: WorkerMatch[] = [];\n\t\tconst suffix: WorkerMatch[] = [];\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (includeWorker && !includeWorker(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const summary of worker.summaries.values()) {\n\t\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\t\tconst match = { worker, summary };\n\t\t\t\tif (activeSessionId === selector || summary.sessionId === selector || summary.sessionName === selector) {\n\t\t\t\t\texact.push(match);\n\t\t\t\t} else if (\n\t\t\t\t\tmatchesSessionIdSuffix(activeSessionId, selector) ||\n\t\t\t\t\tmatchesSessionIdSuffix(summary.sessionId, selector)\n\t\t\t\t) {\n\t\t\t\t\tsuffix.push(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn exact.length > 0 ? exact : suffix;\n\t}\n\n\tprivate findSummaryInWorker(worker: ResidentWorker, selector: string): SessionSummary | undefined {\n\t\tconst pathSelector = looksLikeSessionPath(selector) ? canonicalSessionPath(selector) : undefined;\n\t\tconst summaries = [...worker.summaries.values()];\n\t\tconst exact = summaries.find((summary) => {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\treturn (\n\t\t\t\tactiveSessionId === selector ||\n\t\t\t\tsummary.sessionId === selector ||\n\t\t\t\tsummary.sessionName === selector ||\n\t\t\t\t(pathSelector !== undefined &&\n\t\t\t\t\tsummary.sessionFile !== undefined &&\n\t\t\t\t\tcanonicalSessionPath(summary.sessionFile) === pathSelector)\n\t\t\t);\n\t\t});\n\t\tif (exact) return exact;\n\t\treturn summaries.find((summary) => {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\treturn (\n\t\t\t\tmatchesSessionIdSuffix(activeSessionId, selector) || matchesSessionIdSuffix(summary.sessionId, selector)\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate findWorkerBySessionFile(sessionFile: string): ResidentWorker | undefined {\n\t\tconst target = canonicalSessionPath(sessionFile);\n\t\tconst matches = new Set<ResidentWorker>();\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tconst summaryMatches = [...worker.summaries.values()].some(\n\t\t\t\t(summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === target,\n\t\t\t);\n\t\t\tconst descriptorPath = worker.descriptor.sessionFile\n\t\t\t\t? canonicalSessionPath(worker.descriptor.sessionFile)\n\t\t\t\t: undefined;\n\t\t\tconst configuredPath = worker.descriptor.createCommand.sessionPath\n\t\t\t\t? canonicalSessionPath(worker.descriptor.createCommand.sessionPath)\n\t\t\t\t: undefined;\n\t\t\tif (!summaryMatches && descriptorPath !== target && configuredPath !== target) continue;\n\t\t\tif (descriptorPath && configuredPath && descriptorPath !== configuredPath) {\n\t\t\t\tthrow new Error(`Conflicting resident session paths for worker ${worker.descriptor.workerId}`);\n\t\t\t}\n\t\t\tmatches.add(worker);\n\t\t}\n\t\tif (matches.size > 1) {\n\t\t\tthrow new Error(`Ambiguous resident session path \"${sessionFile}\"`);\n\t\t}\n\t\treturn matches.values().next().value;\n\t}\n\n\tprivate async forwardToWorker(\n\t\tworker: ResidentWorker,\n\t\tcommand: DaemonCommand,\n\t\ttimeoutMs = WORKER_REQUEST_TIMEOUT_MS,\n\t): Promise<DaemonResponse> {\n\t\tconst client = this.requireAvailableWorkerClient(worker, command.type === \"kill\");\n\t\tconst response = await client.request(withoutCommandId(command), timeoutMs);\n\t\tif (command.type === \"get_state\" && response.success && isSessionSummary(response.data)) {\n\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t}\n\t\tif (command.type === \"rename\" && response.success && isSessionSummary(response.data)) {\n\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t}\n\t\treturn responseWithId(response, command.id);\n\t}\n\n\tprivate async attachClient(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"attach\" }>,\n\t): Promise<WorkerAttachData> {\n\t\tconst ownedWorker = [...this.workers.values()].find(\n\t\t\t(worker) =>\n\t\t\t\tworker.descriptor.ownerClientId !== undefined &&\n\t\t\t\t(worker.descriptor.rootActiveSessionId === command.activeSessionId ||\n\t\t\t\t\tworker.descriptor.rootSessionId === command.activeSessionId),\n\t\t);\n\t\tif (ownedWorker) {\n\t\t\tif (ownedWorker.descriptor.ownerClientId !== this.protocolClientId(client)) {\n\t\t\t\tthrow new Error(`Unknown active session: ${command.activeSessionId}`);\n\t\t\t}\n\t\t\tthis.assertTelemetryAttachAllowed(ownedWorker, command.telemetryDisabled);\n\t\t\townedWorker.launchEnv = command.launchEnv ?? ownedWorker.launchEnv;\n\t\t\tif (!ownedWorker.client || ownedWorker.descriptor.lifecycle !== \"ready\") {\n\t\t\t\tif (command.recoveryConfig) {\n\t\t\t\t\townedWorker.transientCreateCommand = {\n\t\t\t\t\t\t...ownedWorker.descriptor.createCommand,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t...command.recoveryConfig,\n\t\t\t\t\t\t\t...(ownedWorker.descriptor.telemetryDisabled === true ? { telemetryDisabled: true } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenv: command.env,\n\t\t\t\t\t\tlaunchEnv: command.launchEnv,\n\t\t\t\t\t\tlifecycle: \"client_owned\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (!ownedWorker.launchEnv) {\n\t\t\t\t\tthrow new Error(\"Client-owned session recovery requires the owning client environment\");\n\t\t\t\t}\n\t\t\t\townedWorker.intentionalStop = false;\n\t\t\t\townedWorker.descriptor.stopRequestedAt = undefined;\n\t\t\t\townedWorker.descriptor.archiveOnStop = undefined;\n\t\t\t\townedWorker.descriptor.lifecycle = \"recovering\";\n\t\t\t\townedWorker.descriptor.consecutiveFailures = 0;\n\t\t\t\tthis.persistWorker(ownedWorker);\n\t\t\t\tawait this.recoverWorker(ownedWorker);\n\t\t\t}\n\t\t}\n\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\tthis.assertTelemetryAttachAllowed(match.worker, command.telemetryDisabled);\n\t\tthis.requireAvailableWorkerClient(match.worker);\n\t\tconst activeSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\tconst duplicateValidation = this.currentSnapshotGeneration(match.worker, activeSessionId)?.validation;\n\t\tif (duplicateValidation) {\n\t\t\tawait duplicateValidation.promise;\n\t\t}\n\t\tif (command.clientId) {\n\t\t\tclient.id = command.clientId;\n\t\t}\n\t\tclient.capabilities = normalizeCapabilities(command.capabilities, command.supportsExtensionUi);\n\t\tclient.supportsExtensionUi = client.capabilities.has(\"extension_ui\");\n\n\t\tlet result = match.worker.snapshotCache.get(activeSessionId);\n\t\tif (\n\t\t\tresult &&\n\t\t\t!client.capabilities.has(\"chunked_snapshot\") &&\n\t\t\tresult.snapshot.messages.length < result.snapshot.summary.messageCount\n\t\t) {\n\t\t\tresult = undefined;\n\t\t}\n\t\tif (!result) {\n\t\t\tconst snapshotLoadKey = `${activeSessionId}:${client.capabilities.has(\"chunked_snapshot\") ? \"chunked\" : \"full\"}`;\n\t\t\tlet retryInvalidatedLoad = true;\n\t\t\twhile (!result) {\n\t\t\t\tlet loading = match.worker.snapshotLoads.get(snapshotLoadKey);\n\t\t\t\tif (!loading) {\n\t\t\t\t\tconst observedSnapshotId =\n\t\t\t\t\t\tmatch.worker.transcriptCaches.get(activeSessionId)?.snapshotId ??\n\t\t\t\t\t\tmatch.worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id;\n\t\t\t\t\tloading = (async () => {\n\t\t\t\t\t\tconst workerClient = this.requireAvailableWorkerClient(match.worker);\n\t\t\t\t\t\tconst response = await workerClient.request({\n\t\t\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tcapabilities: client.capabilities.has(\"chunked_snapshot\")\n\t\t\t\t\t\t\t\t? [\"attach_snapshot\", \"event_sequence\", \"slim_attach\", \"chunked_snapshot\"]\n\t\t\t\t\t\t\t\t: [\"attach_snapshot\", \"event_sequence\", \"slim_attach\"],\n\t\t\t\t\t\t\tsupportsExtensionUi: false,\n\t\t\t\t\t\t\tenv: command.env ?? collectDaemonClientEnv(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst loaded = attachResultFromResponse(response);\n\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) !== loading) {\n\t\t\t\t\t\t\tthrow new SnapshotLoadInvalidatedError(\"Session snapshot changed during attach\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this.cacheLoadedSnapshot(match.worker, activeSessionId, loaded, observedSnapshotId);\n\t\t\t\t\t})();\n\t\t\t\t\tmatch.worker.snapshotLoads.set(snapshotLoadKey, loading);\n\t\t\t\t\tvoid loading.then(\n\t\t\t\t\t\tasync (loaded) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst snapshotId = loaded.snapshotStream?.id;\n\t\t\t\t\t\t\t\tconst transcript = snapshotId\n\t\t\t\t\t\t\t\t\t? this.snapshotGeneration(match.worker, loaded.activeSessionId, snapshotId)?.transcript\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\tif (transcript && !transcript.complete) {\n\t\t\t\t\t\t\t\t\tlet chunkIndex = 0;\n\t\t\t\t\t\t\t\t\twhile (await transcript.waitForChunk(chunkIndex)) {\n\t\t\t\t\t\t\t\t\t\tchunkIndex++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// Failed transfers must allow a fresh snapshot request.\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) === loading) {\n\t\t\t\t\t\t\t\t\tmatch.worker.snapshotLoads.delete(snapshotLoadKey);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) === loading) {\n\t\t\t\t\t\t\t\tmatch.worker.snapshotLoads.delete(snapshotLoadKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresult = await loading;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!(error instanceof SnapshotLoadInvalidatedError)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tif (!retryInvalidatedLoad) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tretryInvalidatedLoad = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.requireAvailableWorkerClient(match.worker);\n\t\tconst wasAttached = client.attachedActiveSessionIds.has(activeSessionId);\n\t\tlet transcript: SnapshotTranscriptCache | undefined;\n\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\twhile (true) {\n\t\t\t\tconst validation = this.currentSnapshotGeneration(match.worker, activeSessionId)?.validation;\n\t\t\t\tif (validation) {\n\t\t\t\t\tawait validation.promise;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tresult = match.worker.snapshotCache.get(activeSessionId) ?? result;\n\t\t\t\ttranscript = this.getOrCreateTranscriptCache(match.worker, result);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst releaseTranscript = transcript?.retain();\n\t\tclient.attachedActiveSessionIds.add(activeSessionId);\n\t\ttry {\n\t\t\tconst publicSummary = this.publicSummary(match.worker, result.snapshot.summary);\n\t\t\tif (publicSummary.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamReconstructor.seed(activeSessionId, publicSummary.streamingMessage);\n\t\t\t} else {\n\t\t\t\tfor (let index = result.snapshot.messages.length - 1; index >= 0; index--) {\n\t\t\t\t\tconst latestMessage = result.snapshot.messages[index];\n\t\t\t\t\tif (latestMessage?.role === \"assistant\") {\n\t\t\t\t\t\tthis.streamReconstructor.seed(activeSessionId, latestMessage);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst publicResult: DaemonAttachResult = {\n\t\t\t\t...result,\n\t\t\t\tstate: result.state ? publicSummary : undefined,\n\t\t\t\tsnapshot: { ...result.snapshot, summary: publicSummary },\n\t\t\t\tclient: { id: client.id, capabilities: [...client.capabilities] },\n\t\t\t};\n\t\t\tif (publicResult.state && publicResult.messages) {\n\t\t\t\tthis.write(client, {\n\t\t\t\t\ttype: \"session_attached\",\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tstate: publicResult.state,\n\t\t\t\t\tmessages: publicResult.messages,\n\t\t\t\t\tsnapshot: publicResult.snapshot,\n\t\t\t\t\treplay: publicResult.replay,\n\t\t\t\t\tlastEventSequence: publicResult.lastEventSequence,\n\t\t\t\t});\n\t\t\t}\n\t\t\tvoid this.syncWorkerExtensionUi(activeSessionId);\n\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\tdetachingSessions?.delete(activeSessionId);\n\t\t\treturn { result: publicResult, worker: match.worker, transcript, releaseTranscript };\n\t\t} catch (error) {\n\t\t\treleaseTranscript?.();\n\t\t\tif (!wasAttached) {\n\t\t\t\tclient.attachedActiveSessionIds.delete(activeSessionId);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate assertTelemetryAttachAllowed(worker: ResidentWorker, telemetryDisabled: true | undefined): void {\n\t\tif (telemetryDisabled && worker.descriptor.telemetryDisabled !== true) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot attach to this active agent while telemetry is disabled for the current invocation. Stop the agent and retry so it can restart without telemetry.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate cacheLoadedSnapshot(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tloaded: DaemonAttachResult,\n\t\tobservedSnapshotId: string | undefined,\n\t): DaemonAttachResult {\n\t\tconst currentTranscript = worker.transcriptCaches.get(activeSessionId);\n\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\tconst currentResult = currentGeneration?.result ?? worker.snapshotCache.get(activeSessionId);\n\t\tconst currentSnapshotId = currentTranscript?.snapshotId ?? currentResult?.snapshotStream?.id;\n\t\tconst loadedSnapshotId = loaded.snapshotStream?.id;\n\t\tif (!loaded.snapshotStream) {\n\t\t\tif (currentSnapshotId && currentSnapshotId !== observedSnapshotId) {\n\t\t\t\treturn loaded;\n\t\t\t}\n\t\t\tworker.snapshotCache.set(activeSessionId, loaded);\n\t\t\treturn loaded;\n\t\t}\n\t\tif (\n\t\t\tcurrentSnapshotId &&\n\t\t\tcurrentSnapshotId !== loadedSnapshotId &&\n\t\t\t(currentSnapshotId !== observedSnapshotId ||\n\t\t\t\t(currentResult?.lastEventSequence ?? -1) > loaded.lastEventSequence)\n\t\t) {\n\t\t\treturn currentResult ?? loaded;\n\t\t}\n\t\tlet transcript = currentTranscript;\n\t\tif (transcript && transcript.snapshotId !== loaded.snapshotStream.id) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, transcript);\n\t\t\ttranscript = undefined;\n\t\t}\n\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\tlet generation = generations.get(loaded.snapshotStream.id);\n\t\tif (!transcript) {\n\t\t\ttranscript = generation?.transcript;\n\t\t}\n\t\tif (!transcript) {\n\t\t\ttranscript = new SnapshotTranscriptCache({\n\t\t\t\tactiveSessionId,\n\t\t\t\tsnapshotId: loaded.snapshotStream.id,\n\t\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\t\ttargetChunkBytes: loaded.snapshotStream.targetChunkBytes,\n\t\t\t});\n\t\t}\n\t\tif (!generation) {\n\t\t\tgeneration = {\n\t\t\t\ttranscript,\n\t\t\t\tresult: loaded,\n\t\t\t\tincoming: false,\n\t\t\t\tretired: false,\n\t\t\t};\n\t\t\tgenerations.set(loaded.snapshotStream.id, generation);\n\t\t} else {\n\t\t\tgeneration.result = loaded;\n\t\t\tgeneration.retired = false;\n\t\t}\n\t\tworker.transcriptCaches.set(activeSessionId, transcript);\n\t\tworker.snapshotCache.set(activeSessionId, loaded);\n\t\treturn loaded;\n\t}\n\n\tprivate getOrCreateTranscriptCache(worker: ResidentWorker, result: DaemonAttachResult): SnapshotTranscriptCache {\n\t\tconst activeSessionId = result.activeSessionId;\n\t\tconst existing = worker.transcriptCaches.get(activeSessionId);\n\t\tif (existing && (!result.snapshotStream || existing.snapshotId === result.snapshotStream.id)) {\n\t\t\treturn existing;\n\t\t}\n\t\tif (result.snapshot.messages.length < result.snapshot.summary.messageCount) {\n\t\t\tthrow new Error(\"Session snapshot generation changed before its transcript could be selected\");\n\t\t}\n\t\tif (existing) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, existing);\n\t\t}\n\t\tconst revision = createHash(\"sha256\")\n\t\t\t.update(\n\t\t\t\t`${activeSessionId}:${result.snapshot.summary.sessionId}:${result.lastEventSequence}:${result.snapshot.messages.length}`,\n\t\t\t)\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 16);\n\t\tconst transcript = new SnapshotTranscriptCache({\n\t\t\tactiveSessionId,\n\t\t\tsnapshotId: `${activeSessionId}-${revision}`,\n\t\t\tmessages: result.snapshot.messages,\n\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\ttargetChunkBytes: SNAPSHOT_TARGET_CHUNK_BYTES,\n\t\t});\n\t\tworker.transcriptCaches.set(activeSessionId, transcript);\n\t\tconst cachedResult = {\n\t\t\t...result,\n\t\t\tmessages: result.messages ? [] : undefined,\n\t\t\tsnapshot: { ...result.snapshot, messages: [] },\n\t\t};\n\t\tworker.snapshotCache.set(activeSessionId, cachedResult);\n\t\tthis.snapshotGenerationsFor(worker, activeSessionId).set(transcript.snapshotId, {\n\t\t\ttranscript,\n\t\t\tresult: cachedResult,\n\t\t\tincoming: false,\n\t\t\tretired: false,\n\t\t});\n\t\treturn transcript;\n\t}\n\n\tprivate createStreamedAttachResult(\n\t\tresult: DaemonAttachResult,\n\t\ttranscript: SnapshotTranscriptCache,\n\t): DaemonAttachResult {\n\t\treturn {\n\t\t\t...result,\n\t\t\tmessages: result.messages ? [] : undefined,\n\t\t\tsnapshot: { ...result.snapshot, messages: [] },\n\t\t\tsnapshotStream: {\n\t\t\t\tid: transcript.snapshotId,\n\t\t\t\tmessageCount: result.snapshot.summary.messageCount,\n\t\t\t\ttargetChunkBytes: transcript.targetChunkBytes,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async streamSnapshot(\n\t\tclient: DaemonSocketClient,\n\t\tworker: ResidentWorker,\n\t\tresult: DaemonAttachResult,\n\t\ttranscript: SnapshotTranscriptCache,\n\t\tpurpose: \"attach\" | \"replacement\" | \"resync\" = \"attach\",\n\t\tretainedTranscriptRelease?: () => void,\n\t\treleaseSnapshotReservation = this.reserveSnapshotStream(client, result.activeSessionId),\n\t): Promise<void> {\n\t\tconst stream = result.snapshotStream;\n\t\tconst releaseTranscript = retainedTranscriptRelease ?? transcript.retain();\n\t\tif (!stream || client.socket.destroyed) {\n\t\t\treleaseSnapshotReservation();\n\t\t\treleaseTranscript();\n\t\t\treturn;\n\t\t}\n\t\tconst { messages: _messages, ...snapshotHeader } = result.snapshot;\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!(await this.writeSnapshotRecord(client, {\n\t\t\t\t\ttype: \"session_snapshot_begin\",\n\t\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\t\tsnapshotId: stream.id,\n\t\t\t\t\tsnapshot: snapshotHeader,\n\t\t\t\t\tmessageCount: stream.messageCount,\n\t\t\t\t\ttargetChunkBytes: stream.targetChunkBytes,\n\t\t\t\t\tpurpose,\n\t\t\t\t}))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet chunkCount = 0;\n\t\t\twhile (true) {\n\t\t\t\tlet chunk: Buffer | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tchunk = await transcript.waitForChunk(chunkCount);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst streamError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\tthis.failWorkerSnapshotCache(worker, result.activeSessionId, streamError, false, stream.id);\n\t\t\t\t\tthrow streamError;\n\t\t\t\t}\n\t\t\t\tif (!chunk) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!(await this.writeSnapshotBuffer(client, chunk))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchunkCount++;\n\t\t\t}\n\t\t\tawait this.writeSnapshotRecord(client, {\n\t\t\t\ttype: \"session_snapshot_end\",\n\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\tsnapshotId: stream.id,\n\t\t\t\tchunkCount,\n\t\t\t\tlastEventSequence: result.lastEventSequence,\n\t\t\t\tlastEventCursor: result.lastEventCursor,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst streamError = error instanceof Error ? error : new Error(String(error));\n\t\t\tif (!client.socket.destroyed) {\n\t\t\t\ttry {\n\t\t\t\t\tconst delivered = await this.writeSnapshotRecord(client, {\n\t\t\t\t\t\ttype: \"session_snapshot_failed\",\n\t\t\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\t\t\tsnapshotId: stream.id,\n\t\t\t\t\t\terror: streamError.message,\n\t\t\t\t\t});\n\t\t\t\t\tif (!delivered && !client.socket.destroyed) {\n\t\t\t\t\t\tclient.socket.destroy(streamError);\n\t\t\t\t\t}\n\t\t\t\t} catch (deliveryError) {\n\t\t\t\t\tclient.socket.destroy(deliveryError instanceof Error ? deliveryError : new Error(String(deliveryError)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow streamError;\n\t\t} finally {\n\t\t\treleaseSnapshotReservation();\n\t\t\treleaseTranscript();\n\t\t}\n\t}\n\n\tprivate reserveSnapshotStream(client: DaemonSocketClient, activeSessionId: string): () => void {\n\t\tclient.snapshotStreaming = true;\n\t\tclient.snapshotActiveSessionIds ??= new Set();\n\t\tclient.snapshotActiveSessionIds.add(activeSessionId);\n\t\tclient.snapshotActiveSessionCounts ??= new Map();\n\t\tclient.snapshotActiveSessionCounts.set(\n\t\t\tactiveSessionId,\n\t\t\t(client.snapshotActiveSessionCounts.get(activeSessionId) ?? 0) + 1,\n\t\t);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treleased = true;\n\t\t\tconst streamCount = client.snapshotActiveSessionCounts?.get(activeSessionId) ?? 1;\n\t\t\tif (streamCount > 1) {\n\t\t\t\tclient.snapshotActiveSessionCounts?.set(activeSessionId, streamCount - 1);\n\t\t\t} else {\n\t\t\t\tclient.snapshotActiveSessionCounts?.delete(activeSessionId);\n\t\t\t\tclient.snapshotActiveSessionIds?.delete(activeSessionId);\n\t\t\t}\n\t\t\tclient.snapshotStreaming = (client.snapshotActiveSessionIds?.size ?? 0) > 0;\n\t\t\tif (!client.snapshotStreaming) {\n\t\t\t\tclient.backpressured = false;\n\t\t\t}\n\t\t\tif (!client.snapshotStreaming && client.catchupActiveSessionIds?.size) {\n\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate writeSnapshotRecord(client: DaemonSocketClient, message: DaemonOutbound): Promise<boolean> {\n\t\treturn this.writeSnapshotBuffer(client, Buffer.from(serializeJsonLine(message)));\n\t}\n\n\tprivate async writeSnapshotBuffer(client: DaemonSocketClient, buffer: Uint8Array): Promise<boolean> {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.writeSerialized(client, buffer)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn new Promise<boolean>((resolveDrain) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: boolean) => {\n\t\t\t\tif (settled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsettled = true;\n\t\t\t\tclient.socket.off(\"drain\", onDrain);\n\t\t\t\tclient.socket.off(\"close\", onClose);\n\t\t\t\tclient.socket.off(\"error\", onClose);\n\t\t\t\tresolveDrain(value);\n\t\t\t};\n\t\t\tconst onDrain = () => finish(true);\n\t\t\tconst onClose = () => finish(false);\n\t\t\tclient.socket.once(\"drain\", onDrain);\n\t\t\tclient.socket.once(\"close\", onClose);\n\t\t\tclient.socket.once(\"error\", onClose);\n\t\t});\n\t}\n\n\tprivate detachClient(client: DaemonSocketClient, activeSessionId?: string): void {\n\t\tconst targets = activeSessionId ? [activeSessionId] : [...client.attachedActiveSessionIds];\n\t\tfor (const selector of targets) {\n\t\t\tconst match = this.matchWorkers(selector)[0];\n\t\t\tconst resolvedId = match ? (match.summary.activeSessionId ?? match.summary.id) : selector;\n\t\t\tif (!client.attachedActiveSessionIds.delete(resolvedId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclient.catchupActiveSessionIds?.delete(resolvedId);\n\t\t\tclient.catchupPurposes?.delete(resolvedId);\n\t\t\tthis.write(client, { type: \"session_detached\", activeSessionId: resolvedId });\n\t\t\tvoid this.syncWorkerExtensionUi(resolvedId);\n\t\t}\n\t}\n\n\tprivate async syncWorkerExtensionUi(activeSessionId: string): Promise<void> {\n\t\tconst match = this.matchWorkers(activeSessionId)[0];\n\t\tif (!match?.worker.client) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.subscribeWorker(match.worker, match.summary.activeSessionId ?? match.summary.id).catch(\n\t\t\t() => undefined,\n\t\t);\n\t}\n\n\tprivate handleWorkerFrame(worker: ResidentWorker, frame: PrivateFrame<DaemonWorkerFrameHeader>): void {\n\t\tif (frame.header.kind !== \"outbound\") {\n\t\t\treturn;\n\t\t}\n\t\tconst {\n\t\t\toutboundType,\n\t\t\tactiveSessionId,\n\t\t\tsnapshotId: frameSnapshotId,\n\t\t\tsessionEventType,\n\t\t\tpayloadEncoding,\n\t\t\tsnapshotPurpose,\n\t\t} = frame.header;\n\t\tif (outboundType === \"heartbeats_changed\") {\n\t\t\tworker.heartbeatSnapshotStale = true;\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_begin\" && activeSessionId) {\n\t\t\ttry {\n\t\t\t\tconst begin = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t{ type: \"session_snapshot_begin\" }\n\t\t\t\t>;\n\t\t\t\tif (\n\t\t\t\t\tbegin.type !== \"session_snapshot_begin\" ||\n\t\t\t\t\tbegin.activeSessionId !== activeSessionId ||\n\t\t\t\t\ttypeof begin.snapshotId !== \"string\" ||\n\t\t\t\t\t(frameSnapshotId !== undefined && frameSnapshotId !== begin.snapshotId) ||\n\t\t\t\t\ttypeof begin.targetChunkBytes !== \"number\" ||\n\t\t\t\t\t!begin.snapshot ||\n\t\t\t\t\t!isSessionSummary(begin.snapshot.summary)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid snapshot begin frame\");\n\t\t\t\t}\n\t\t\t\tconst publicSummary = this.publicSummary(worker, begin.snapshot.summary);\n\t\t\t\tconst snapshot = {\n\t\t\t\t\t...begin.snapshot,\n\t\t\t\t\tsummary: publicSummary,\n\t\t\t\t\tmessages: [],\n\t\t\t\t};\n\t\t\t\tconst result: DaemonAttachResult = {\n\t\t\t\t\tprotocol: DAEMON_PROTOCOL_INFO,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tsnapshot,\n\t\t\t\t\treplay: {\n\t\t\t\t\t\tstatus: \"complete\",\n\t\t\t\t\t\ttoSequence: snapshot.lastEventSequence,\n\t\t\t\t\t\t...(snapshot.lastEventCursor ? { toCursor: snapshot.lastEventCursor } : {}),\n\t\t\t\t\t},\n\t\t\t\t\tlastEventSequence: snapshot.lastEventSequence,\n\t\t\t\t\t...(snapshot.lastEventCursor ? { lastEventCursor: snapshot.lastEventCursor } : {}),\n\t\t\t\t\tsnapshotStream: {\n\t\t\t\t\t\tid: begin.snapshotId,\n\t\t\t\t\t\tmessageCount: begin.messageCount,\n\t\t\t\t\t\ttargetChunkBytes: begin.targetChunkBytes,\n\t\t\t\t\t},\n\t\t\t\t\tclient: { id: \"supervisor\", capabilities: [\"chunked_snapshot\"] },\n\t\t\t\t};\n\t\t\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\t\t\tlet generation = generations.get(begin.snapshotId);\n\t\t\t\tif (generation?.incoming) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tnew Error(`Snapshot ${begin.snapshotId} restarted before completion`),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tbegin.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Snapshot summaries/state include live fields (for example activity and attached client\n\t\t\t\t// counts) that can change without advancing the transcript sequence. Treat the stable\n\t\t\t\t// transfer envelope as identity; duplicate chunks and end metadata are still byte-checked.\n\t\t\t\tconst duplicate =\n\t\t\t\t\tgeneration?.transcript.complete === true &&\n\t\t\t\t\tgeneration.end !== undefined &&\n\t\t\t\t\tgeneration.result.snapshotStream?.messageCount === begin.messageCount &&\n\t\t\t\t\tgeneration.result.snapshotStream?.targetChunkBytes === begin.targetChunkBytes &&\n\t\t\t\t\tgeneration.result.lastEventSequence === result.lastEventSequence &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventSequence === result.snapshot.lastEventSequence &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventCursor?.generation === result.snapshot.lastEventCursor?.generation &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventCursor?.sequence === result.snapshot.lastEventCursor?.sequence;\n\t\t\t\tif (generation?.transcript.complete && !duplicate) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tnew Error(`Snapshot ${begin.snapshotId} did not match the cached transfer`),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tbegin.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\t\t\tconst currentResult = currentGeneration?.result ?? worker.snapshotCache.get(activeSessionId);\n\t\t\t\tconst isOlderThanCurrent =\n\t\t\t\t\tcurrentGeneration !== undefined &&\n\t\t\t\t\tcurrentGeneration.transcript.snapshotId !== begin.snapshotId &&\n\t\t\t\t\tcurrentResult !== undefined &&\n\t\t\t\t\tresult.lastEventSequence < currentResult.lastEventSequence;\n\t\t\t\tif (isOlderThanCurrent && !generation) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (duplicate && generation) {\n\t\t\t\t\tgeneration.incoming = true;\n\t\t\t\t\tgeneration.duplicateChunkIndex = 0;\n\t\t\t\t\tgeneration.duplicateResult = result;\n\t\t\t\t\tgeneration.validation = this.createSnapshotDuplicateValidation();\n\t\t\t\t\tif (currentGeneration === generation) {\n\t\t\t\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcurrentGeneration &&\n\t\t\t\t\tcurrentGeneration.transcript.snapshotId !== begin.snapshotId &&\n\t\t\t\t\t!isOlderThanCurrent\n\t\t\t\t) {\n\t\t\t\t\tif (!currentGeneration.transcript.complete && !currentGeneration.incoming) {\n\t\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tnew Error(`Snapshot ${currentGeneration.transcript.snapshotId} was superseded`),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tcurrentGeneration.transcript.snapshotId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, currentGeneration.transcript);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!generation) {\n\t\t\t\t\tconst transcript = new SnapshotTranscriptCache({\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tsnapshotId: begin.snapshotId,\n\t\t\t\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\t\t\t\ttargetChunkBytes: begin.targetChunkBytes,\n\t\t\t\t\t});\n\t\t\t\t\tgeneration = {\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tincoming: false,\n\t\t\t\t\t\tretired: isOlderThanCurrent,\n\t\t\t\t\t};\n\t\t\t\t\tthis.snapshotGenerationsFor(worker, activeSessionId).set(begin.snapshotId, generation);\n\t\t\t\t}\n\t\t\t\tgeneration.result = result;\n\t\t\t\tgeneration.begin = Buffer.from(frame.payload);\n\t\t\t\tgeneration.end = undefined;\n\t\t\t\tgeneration.incoming = true;\n\t\t\t\tgeneration.duplicateChunkIndex = undefined;\n\t\t\t\tgeneration.duplicateResult = undefined;\n\t\t\t\tgeneration.validation = undefined;\n\t\t\t\tif (!isOlderThanCurrent) {\n\t\t\t\t\tgeneration.retired = false;\n\t\t\t\t\tworker.transcriptCaches.set(activeSessionId, generation.transcript);\n\t\t\t\t\tworker.snapshotCache.set(activeSessionId, result);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Invalid worker snapshot begin frame: ${String(error)}`);\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_chunk\" && activeSessionId) {\n\t\t\tconst snapshotId = frameSnapshotId ?? worker.transcriptCaches.get(activeSessionId)?.snapshotId;\n\t\t\tif (!snapshotId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, snapshotId);\n\t\t\tif (generation?.incoming) {\n\t\t\t\ttry {\n\t\t\t\t\tconst duplicateIndex = generation.duplicateChunkIndex;\n\t\t\t\t\tif (duplicateIndex === undefined) {\n\t\t\t\t\t\tgeneration.transcript.appendEncodedChunk(Buffer.from(frame.payload));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst chunk = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t\t\t{ type: \"session_snapshot_chunk\" }\n\t\t\t\t\t\t>;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tchunk.type !== \"session_snapshot_chunk\" ||\n\t\t\t\t\t\t\tchunk.activeSessionId !== activeSessionId ||\n\t\t\t\t\t\t\tchunk.snapshotId !== generation.transcript.snapshotId ||\n\t\t\t\t\t\t\tchunk.index !== duplicateIndex ||\n\t\t\t\t\t\t\t!generation.transcript.readChunk(duplicateIndex).equals(Buffer.from(frame.payload))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Duplicate snapshot ${generation.transcript.snapshotId} did not match cached bytes`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgeneration.duplicateChunkIndex = duplicateIndex + 1;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tgeneration.transcript.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_end\" && activeSessionId) {\n\t\t\tconst snapshotId = frameSnapshotId ?? worker.transcriptCaches.get(activeSessionId)?.snapshotId;\n\t\t\tif (!snapshotId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, snapshotId);\n\t\t\tif (!generation?.incoming) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst transcript = generation.transcript;\n\t\t\ttry {\n\t\t\t\tconst duplicateChunkCount = generation.duplicateChunkIndex;\n\t\t\t\tif (duplicateChunkCount === undefined) {\n\t\t\t\t\ttranscript.markComplete();\n\t\t\t\t\tif (!generation.begin) {\n\t\t\t\t\t\tthrow new Error(`Snapshot ${transcript.snapshotId} has no begin frame`);\n\t\t\t\t\t}\n\t\t\t\t\tgeneration.end = Buffer.from(frame.payload);\n\t\t\t\t} else {\n\t\t\t\t\tconst end = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t\t{ type: \"session_snapshot_end\" }\n\t\t\t\t\t>;\n\t\t\t\t\tif (\n\t\t\t\t\t\tend.type !== \"session_snapshot_end\" ||\n\t\t\t\t\t\tend.activeSessionId !== activeSessionId ||\n\t\t\t\t\t\tend.snapshotId !== transcript.snapshotId ||\n\t\t\t\t\t\tend.chunkCount !== duplicateChunkCount ||\n\t\t\t\t\t\tend.chunkCount !== transcript.chunkCount ||\n\t\t\t\t\t\t!generation.end?.equals(frame.payload)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(`Duplicate snapshot ${transcript.snapshotId} ended with different metadata`);\n\t\t\t\t\t}\n\t\t\t\t\tif (!generation.duplicateResult) {\n\t\t\t\t\t\tthrow new Error(`Duplicate snapshot ${transcript.snapshotId} has no result`);\n\t\t\t\t\t}\n\t\t\t\t\tgeneration.result = generation.duplicateResult;\n\t\t\t\t\tif (worker.transcriptCaches.get(activeSessionId) === transcript) {\n\t\t\t\t\t\tworker.snapshotCache.set(activeSessionId, generation.duplicateResult);\n\t\t\t\t\t}\n\t\t\t\t\tthis.settleSnapshotDuplicateValidation(generation);\n\t\t\t\t}\n\t\t\t\tgeneration.incoming = false;\n\t\t\t\tgeneration.duplicateChunkIndex = undefined;\n\t\t\t\tgeneration.duplicateResult = undefined;\n\t\t\t} catch (error) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t\ttranscript.snapshotId,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst published = worker.transcriptCaches.get(activeSessionId) === transcript;\n\t\t\tif (generation.retired) {\n\t\t\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\t\t\ttranscript.dispose();\n\t\t\t}\n\t\t\tif (published && (snapshotPurpose === \"replacement\" || snapshotPurpose === \"catchup\")) {\n\t\t\t\tfor (const client of this.clients) {\n\t\t\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) continue;\n\t\t\t\t\tthis.queueCatchup(client, activeSessionId, snapshotPurpose === \"replacement\" ? \"replacement\" : \"resync\");\n\t\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_failed\" && activeSessionId) {\n\t\t\ttry {\n\t\t\t\tconst failed = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t{ type: \"session_snapshot_failed\" }\n\t\t\t\t>;\n\t\t\t\tif (\n\t\t\t\t\tfailed.type !== \"session_snapshot_failed\" ||\n\t\t\t\t\tfailed.activeSessionId !== activeSessionId ||\n\t\t\t\t\ttypeof failed.snapshotId !== \"string\" ||\n\t\t\t\t\ttypeof failed.error !== \"string\" ||\n\t\t\t\t\t(frameSnapshotId !== undefined && frameSnapshotId !== failed.snapshotId)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid snapshot failure frame\");\n\t\t\t\t}\n\t\t\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\t\t\tconst generation =\n\t\t\t\t\tthis.snapshotGeneration(worker, activeSessionId, failed.snapshotId) ??\n\t\t\t\t\t(currentGeneration?.transcript.snapshotId === failed.snapshotId ? currentGeneration : undefined);\n\t\t\t\tif (!generation) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst published = worker.transcriptCaches.get(activeSessionId) === generation.transcript;\n\t\t\t\tthis.failWorkerSnapshotCache(worker, activeSessionId, new Error(failed.error), false, failed.snapshotId);\n\t\t\t\tif (published && (snapshotPurpose === \"replacement\" || snapshotPurpose === \"catchup\")) {\n\t\t\t\t\tfor (const client of this.clients) {\n\t\t\t\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) continue;\n\t\t\t\t\t\tthis.queueCatchup(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tsnapshotPurpose === \"replacement\" ? \"replacement\" : \"resync\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\toutboundType === \"daemon_hello\" ||\n\t\t\toutboundType === \"response\" ||\n\t\t\toutboundType === \"session_list_progress\" ||\n\t\t\toutboundType === \"session_list_item\" ||\n\t\t\toutboundType === \"session_attached\" ||\n\t\t\toutboundType === \"session_detached\" ||\n\t\t\t!activeSessionId\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tlet publicPayload = frame.payload;\n\t\tlet decodedOutbound: DaemonOutbound | undefined;\n\t\tif (payloadEncoding === \"assistant-delta\") {\n\t\t\tlet compactValue: unknown;\n\t\t\ttry {\n\t\t\t\tcompactValue = JSON.parse(frame.payload.toString(\"utf8\"));\n\t\t\t} catch {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isCompactAssistantDelta(compactValue)) {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst reconstructed = this.streamReconstructor.reconstruct(compactValue);\n\t\t\tif (!reconstructed) {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpublicPayload = Buffer.from(serializeJsonLine(reconstructed));\n\t\t} else if (\n\t\t\tsessionEventType === \"message_start\" ||\n\t\t\tsessionEventType === \"message_end\" ||\n\t\t\toutboundType === \"session_replaced\" ||\n\t\t\toutboundType === \"session_resynced\" ||\n\t\t\toutboundType === \"session_closed\"\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdecodedOutbound = JSON.parse(frame.payload.toString(\"utf8\")) as DaemonOutbound;\n\t\t\t\tthis.streamReconstructor.observe(decodedOutbound);\n\t\t\t} catch {\n\t\t\t\t// A malformed worker event is still isolated to this worker connection.\n\t\t\t}\n\t\t}\n\t\tconst replacementSnapshotFollows =\n\t\t\tdecodedOutbound?.type === \"session_replaced\" && decodedOutbound.snapshotFollows === true;\n\t\tthis.invalidateWorkerSnapshot(\n\t\t\tworker,\n\t\t\tactiveSessionId,\n\t\t\toutboundType === \"session_replaced\" ||\n\t\t\t\toutboundType === \"session_closed\" ||\n\t\t\t\tisFinalizedTranscriptEvent(sessionEventType),\n\t\t);\n\t\tfor (const client of this.clients) {\n\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (replacementSnapshotFollows && !client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (outboundType === \"extension_ui_request\" && !client.supportsExtensionUi) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (client.snapshotActiveSessionIds?.has(activeSessionId)) {\n\t\t\t\tthis.queueCatchup(client, activeSessionId, outboundType === \"session_replaced\" ? \"replacement\" : \"resync\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (client.backpressured === true) {\n\t\t\t\tthis.queueCatchup(client, activeSessionId, outboundType === \"session_replaced\" ? \"replacement\" : \"resync\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.writeSerialized(client, publicPayload);\n\t\t}\n\t\tif (outboundType === \"session_replaced\" || outboundType === \"session_closed\") {\n\t\t\tvoid this.refreshWorkerSummaries(worker)\n\t\t\t\t.then(() => this.syncAgentPeers())\n\t\t\t\t.catch(() => undefined);\n\t\t} else if (\n\t\t\tsessionEventType === \"turn_start\" ||\n\t\t\tsessionEventType === \"turn_end\" ||\n\t\t\tsessionEventType === \"rlm_child_update\"\n\t\t) {\n\t\t\tvoid this.refreshWorkerSummaries(worker)\n\t\t\t\t.then(() => this.syncAgentPeers())\n\t\t\t\t.catch(() => undefined);\n\t\t}\n\t\tif (\n\t\t\tdecodedOutbound?.type === \"session_closed\" &&\n\t\t\tdecodedOutbound.reason === \"shutdown\" &&\n\t\t\tactiveSessionId === worker.descriptor.rootActiveSessionId &&\n\t\t\t!this.shuttingDown\n\t\t) {\n\t\t\tworker.intentionalStop = true;\n\t\t\t// An exact stop owns its registration and descriptor cleanup until its\n\t\t\t// tuple assertions complete. A synchronous root shutdown event can arrive\n\t\t\t// before its request resolves, so leave both intact while it is active.\n\t\t\tif ((this.workerStopCounts?.get(worker) ?? 0) === 0) {\n\t\t\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\t\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t\t\tvoid this.syncAgentPeers().catch(() => undefined);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate invalidateWorkerSnapshot(worker: ResidentWorker, activeSessionId: string, transcriptChanged = true): void {\n\t\tworker.snapshotCache.delete(activeSessionId);\n\t\tif (!transcriptChanged) {\n\t\t\treturn;\n\t\t}\n\t\tworker.snapshotLoads.delete(`${activeSessionId}:chunked`);\n\t\tworker.snapshotLoads.delete(`${activeSessionId}:full`);\n\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\tif (transcript) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, transcript);\n\t\t}\n\t}\n\n\tprivate scheduleCompactCatchup(worker: ResidentWorker, activeSessionId: string): void {\n\t\tif (this.compactCatchupInProgress.has(activeSessionId)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.compactCatchupInProgress.add(activeSessionId);\n\t\tthis.invalidateWorkerSnapshot(worker, activeSessionId);\n\t\tconst clients = [...this.clients].filter((client) => client.attachedActiveSessionIds.has(activeSessionId));\n\t\tfor (const client of clients) {\n\t\t\tthis.queueCatchup(client, activeSessionId);\n\t\t}\n\t\tvoid Promise.all(clients.map((client) => this.catchUpClient(client)))\n\t\t\t.catch((error) => this.log(`Failed compact catch-up for ${activeSessionId}: ${String(error)}`))\n\t\t\t.finally(() => {\n\t\t\t\tthis.compactCatchupInProgress.delete(activeSessionId);\n\t\t\t});\n\t}\n\n\tprivate queueCatchup(\n\t\tclient: DaemonSocketClient,\n\t\tactiveSessionId: string,\n\t\tpurpose: \"replacement\" | \"resync\" = \"resync\",\n\t): void {\n\t\tif (!client.catchupActiveSessionIds) {\n\t\t\tclient.catchupActiveSessionIds = new Set();\n\t\t}\n\t\tclient.catchupActiveSessionIds.add(activeSessionId);\n\t\tclient.catchupPurposes ??= new Map();\n\t\tif (purpose === \"replacement\" || !client.catchupPurposes.has(activeSessionId)) {\n\t\t\tclient.catchupPurposes.set(activeSessionId, purpose);\n\t\t}\n\t}\n\n\tprivate catchUpClient(client: DaemonSocketClient): Promise<void> {\n\t\tif (client.catchupPromise) {\n\t\t\treturn client.catchupPromise;\n\t\t}\n\t\tif (client.snapshotStreaming || client.backpressured) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tconst catchup = this.drainClientCatchupQueue(client).finally(() => {\n\t\t\tif (client.catchupPromise === catchup) {\n\t\t\t\tclient.catchupPromise = undefined;\n\t\t\t}\n\t\t});\n\t\tclient.catchupPromise = catchup;\n\t\treturn catchup;\n\t}\n\n\tprivate async drainClientCatchupQueue(client: DaemonSocketClient): Promise<void> {\n\t\twhile (\n\t\t\t!client.socket.destroyed &&\n\t\t\t!client.snapshotStreaming &&\n\t\t\t!client.backpressured &&\n\t\t\tclient.catchupActiveSessionIds?.size\n\t\t) {\n\t\t\tawait this.drainClientCatchups(client);\n\t\t}\n\t}\n\n\tprivate async drainClientCatchups(client: DaemonSocketClient): Promise<void> {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = [...(client.catchupActiveSessionIds ?? [])].map((activeSessionId) => ({\n\t\t\tactiveSessionId,\n\t\t\tpurpose: client.catchupPurposes?.get(activeSessionId) ?? (\"resync\" as const),\n\t\t}));\n\t\tclient.catchupActiveSessionIds?.clear();\n\t\tclient.catchupPurposes?.clear();\n\t\tfor (let index = 0; index < pending.length; index++) {\n\t\t\tconst { activeSessionId, purpose } = pending[index]!;\n\t\t\tlet releaseTranscript: (() => void) | undefined;\n\t\t\ttry {\n\t\t\t\tconst attached = await this.attachClient(client, {\n\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tcapabilities: [...client.capabilities],\n\t\t\t\t\tsupportsExtensionUi: client.supportsExtensionUi,\n\t\t\t\t});\n\t\t\t\treleaseTranscript = attached.releaseTranscript;\n\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\tconst transcript = attached.transcript;\n\t\t\t\t\tif (!transcript) {\n\t\t\t\t\t\tthrow new Error(\"Session worker did not provide a snapshot transcript\");\n\t\t\t\t\t}\n\t\t\t\t\tif (purpose === \"replacement\") {\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tstate: attached.result.snapshot.state,\n\t\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\t\tsnapshotFollows: true,\n\t\t\t\t\t\t\tmeta: createDaemonEventMeta(\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tattached.result.lastEventSequence,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tattached.result.lastEventCursor?.generation,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait this.streamSnapshot(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\tthis.createStreamedAttachResult(attached.result, transcript),\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tpurpose,\n\t\t\t\t\t\treleaseTranscript,\n\t\t\t\t\t);\n\t\t\t\t\treleaseTranscript = undefined;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst meta = createDaemonEventMeta(\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tattached.result.lastEventSequence,\n\t\t\t\t\tundefined,\n\t\t\t\t\tattached.result.lastEventCursor?.generation,\n\t\t\t\t);\n\t\t\t\tconst catchup: DaemonOutbound =\n\t\t\t\t\tpurpose === \"replacement\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tstate: attached.result.snapshot.state,\n\t\t\t\t\t\t\t\tmessages: attached.result.snapshot.messages,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttype: \"session_resynced\",\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tsnapshot: attached.result.snapshot,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t};\n\t\t\t\tif (!this.write(client, catchup)) {\n\t\t\t\t\tfor (const remaining of pending.slice(index + 1)) {\n\t\t\t\t\t\tthis.queueCatchup(client, remaining.activeSessionId, remaining.purpose);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treleaseTranscript?.();\n\t\t\t\tthis.log(`Failed to catch up client ${client.id} for ${activeSessionId}: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async prepareUpdateRestart(): Promise<DaemonUpdateRestartManifest> {\n\t\tif (this.updateRestartPhase !== undefined) throw new Error(\"Daemon is already preparing an update restart\");\n\t\tthis.updateRestartPhase = \"draining\";\n\t\ttry {\n\t\t\tconst deadline = Date.now() + UPDATE_RESTART_PREPARE_DEADLINE_MS;\n\t\t\tconst abort = AbortSignal.timeout(Math.min(UPDATE_RESTART_MUTATION_DRAIN_TIMEOUT_MS, deadline - Date.now()));\n\t\t\tawait this.mutationDrain.waitForDrain(1, abort, \"Timed out draining daemon mutations for update restart\");\n\t\t\tthis.updateRestartPhase = \"fencing\";\n\t\t\tawait this.mutationDrain.waitForDrain(1, abort, \"Timed out draining daemon mutations for update restart\");\n\t\t\tconst manifest = await this.prepareUpdateRestartFenced(deadline);\n\t\t\tthis.updateRestartPhase = \"prepared\";\n\t\t\treturn manifest;\n\t\t} catch (error) {\n\t\t\tthis.updateRestartPhase = undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async prepareUpdateRestartFenced(deadline: number): Promise<DaemonUpdateRestartManifest> {\n\t\tconst residents = [...this.workers.values()];\n\t\tconst unavailable = residents.find(\n\t\t\t(worker) =>\n\t\t\t\tthis.isWorkerStopping(worker) || worker.descriptor.lifecycle !== \"ready\" || worker.client === undefined,\n\t\t);\n\t\tif (unavailable) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot prepare update restart while resident worker ${unavailable.descriptor.workerId} is ${this.effectiveWorkerState(unavailable)}${unavailable.client ? \"\" : \" and disconnected\"}`,\n\t\t\t);\n\t\t}\n\t\tconst workers = residents as Array<ResidentWorker & { client: DaemonWorkerClient }>;\n\t\tconst acknowledged: ResidentWorker[] = [];\n\t\tconst preparationResults = await Promise.allSettled(\n\t\t\tworkers.map(async (worker) => {\n\t\t\t\tconst client = worker.client;\n\t\t\t\tconst response = await client.requestWorker(\n\t\t\t\t\t{ type: \"worker_prepare_update\" },\n\t\t\t\t\tMath.max(1, Math.min(UPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS, deadline - Date.now())),\n\t\t\t\t);\n\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\tworker.updateRestartPrepareClient = client;\n\t\t\t\tacknowledged.push(worker);\n\t\t\t\tif (!response.data || typeof response.data !== \"object\") {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid update manifest\");\n\t\t\t\t}\n\t\t\t\tif (worker.client !== client || worker.descriptor.lifecycle !== \"ready\") {\n\t\t\t\t\tthrow new Error(`Worker ${worker.descriptor.workerId} disconnected during update preparation`);\n\t\t\t\t}\n\t\t\t\tconst manifest = response.data as DaemonUpdateRestartManifest;\n\t\t\t\tif (manifest.formatVersion !== DAEMON_UPDATE_RESTART_FORMAT_VERSION) {\n\t\t\t\t\tthrow new Error(`Worker returned unsupported update manifest version ${manifest.formatVersion}`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!manifest.sessions.some(\n\t\t\t\t\t\t(session) => session.activeSessionId === worker.descriptor.rootActiveSessionId,\n\t\t\t\t\t) &&\n\t\t\t\t\t!manifest.discardedActiveSessionIds?.includes(worker.descriptor.rootActiveSessionId)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Worker ${worker.descriptor.workerId} omitted its root disposition from the update manifest`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn { worker, manifest };\n\t\t\t}),\n\t\t);\n\t\tconst cancelAcknowledged = async () => {\n\t\t\tawait Promise.all(\n\t\t\t\tacknowledged.map(async (worker) => {\n\t\t\t\t\tconst prepareClient = worker.updateRestartPrepareClient;\n\t\t\t\t\tworker.updateRestartPrepareClient = undefined;\n\t\t\t\t\tif (!prepareClient) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await prepareClient.requestWorker({ type: \"worker_cancel_update\" }, 5000);\n\t\t\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t`Could not cancel prepared worker ${worker.descriptor.workerId}; reconnecting it: ${String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprepareClient.close();\n\t\t\t\t\t\tif (worker.client && worker.client !== prepareClient) worker.client.close();\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t};\n\t\tconst preparationFailure = preparationResults.find(\n\t\t\t(result): result is PromiseRejectedResult => result.status === \"rejected\",\n\t\t);\n\t\tif (preparationFailure) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow preparationFailure.reason;\n\t\t}\n\t\tconst prepared = preparationResults.flatMap((result) =>\n\t\t\tresult.status === \"fulfilled\" ? [result.value.worker] : [],\n\t\t);\n\t\tconst responses = preparationResults.flatMap((result) =>\n\t\t\tresult.status === \"fulfilled\" ? [result.value.manifest] : [],\n\t\t);\n\t\tconst discardedActiveSessionIds = responses.flatMap((manifest) => manifest.discardedActiveSessionIds ?? []);\n\t\tconst manifest: DaemonUpdateRestartManifest = {\n\t\t\tformatVersion: DAEMON_UPDATE_RESTART_FORMAT_VERSION,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\tsessions: responses.flatMap((manifest) => manifest.sessions),\n\t\t\t...(discardedActiveSessionIds.length > 0 ? { discardedActiveSessionIds } : {}),\n\t\t};\n\t\t// A worker that disconnected after preparing cancelled its checkpoint with\n\t\t// the old client; a recovered replacement may have admitted inputs past the\n\t\t// captured manifest. Abort before the manifest is persisted so the caller's\n\t\t// fallback cannot restore from the stale checkpoint.\n\t\tconst staleWorker = prepared.find((worker) => worker.client !== worker.updateRestartPrepareClient);\n\t\tif (staleWorker) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow new Error(\n\t\t\t\t`Worker ${staleWorker.descriptor.workerId} reconnected during update preparation; its checkpoint is stale`,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tthis.validateAndPersistUpdateManifest(manifest);\n\t\t} catch (error) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow error;\n\t\t}\n\t\t// Commit through the connection that owns the prepared transaction; a client\n\t\t// swapped in after the check above must fail the commit rather than reach a\n\t\t// worker that no longer holds the checkpoint.\n\t\tconst commitClients = new Map(prepared.map((worker) => [worker, worker.updateRestartPrepareClient]));\n\t\tfor (const worker of prepared) worker.updateRestartPrepareClient = undefined;\n\t\tconst commitResults = await Promise.allSettled(\n\t\t\tprepared.map(async (worker) => {\n\t\t\t\tconst client = commitClients.get(worker);\n\t\t\t\tif (!client) throw new Error(`Worker ${worker.descriptor.workerId} disconnected before update commit`);\n\t\t\t\tconst response = await client.requestWorker(\n\t\t\t\t\t{ type: \"worker_commit_update\" },\n\t\t\t\t\tUPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS,\n\t\t\t\t);\n\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t}),\n\t\t);\n\t\tconst commitFailure = commitResults.find(\n\t\t\t(result): result is PromiseRejectedResult => result.status === \"rejected\",\n\t\t);\n\t\tif (commitFailure) {\n\t\t\tthis.log(`Update restart commit response failed; forcing restart completion: ${String(commitFailure.reason)}`);\n\t\t\tawait Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false, true)));\n\t\t\treturn manifest;\n\t\t}\n\t\tconst stopResults = await Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false)));\n\t\tif (stopResults.some((result) => result.status === \"rejected\")) {\n\t\t\tthis.log(\"A committed update worker did not stop gracefully; forcing restart completion\");\n\t\t\tawait Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false, true)));\n\t\t}\n\t\treturn manifest;\n\t}\n\n\tprivate validateAndPersistUpdateManifest(manifest: DaemonUpdateRestartManifest): void {\n\t\tif (manifest.formatVersion !== DAEMON_UPDATE_RESTART_FORMAT_VERSION) {\n\t\t\tthrow new Error(`Unsupported update manifest version ${manifest.formatVersion}`);\n\t\t}\n\t\tconst activeSessionIds = new Set<string>();\n\t\tconst sessionFiles = new Set<string>();\n\t\tfor (const discardedActiveSessionId of manifest.discardedActiveSessionIds ?? []) {\n\t\t\tif (!discardedActiveSessionId || activeSessionIds.has(discardedActiveSessionId)) {\n\t\t\t\tthrow new Error(\"Update manifest contains an invalid discarded session disposition\");\n\t\t\t}\n\t\t\tactiveSessionIds.add(discardedActiveSessionId);\n\t\t}\n\t\tfor (const session of manifest.sessions) {\n\t\t\tif (!session.activeSessionId || !session.sessionFile) {\n\t\t\t\tthrow new Error(\"Update manifest contains an incomplete session checkpoint\");\n\t\t\t}\n\t\t\tif (activeSessionIds.has(session.activeSessionId)) {\n\t\t\t\tthrow new Error(`Update manifest contains duplicate active session ${session.activeSessionId}`);\n\t\t\t}\n\t\t\tconst sessionFile = canonicalSessionPath(session.sessionFile);\n\t\t\tif (sessionFiles.has(sessionFile)) {\n\t\t\t\tthrow new Error(`Update manifest contains duplicate session file ${sessionFile}`);\n\t\t\t}\n\t\t\tactiveSessionIds.add(session.activeSessionId);\n\t\t\tsessionFiles.add(sessionFile);\n\t\t}\n\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tconst path = getDaemonUpdateRestartManifestPath(this.socketPath, agentDir);\n\t\tmkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n\t\tconst tempPath = `${path}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(manifest)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\tconst validated = JSON.parse(readFileSync(tempPath, \"utf8\")) as DaemonUpdateRestartManifest;\n\t\tif (!Array.isArray(validated.sessions) || validated.sessions.length !== manifest.sessions.length) {\n\t\t\tthrow new Error(\"Could not validate aggregate update manifest\");\n\t\t}\n\t\trenameSync(tempPath, path);\n\t}\n\n\t/**\n\t * Verdict on whether a pid is still the process we launched. Callers must\n\t * be conservative in both directions: signal a pid only on \"current\"\n\t * (never SIGKILL a recycled pid), and clean up a registration only on\n\t * \"gone\"/\"replaced\" (never orphan a live worker because a transient\n\t * identity lookup failed).\n\t */\n\tprivate processIdentity(\n\t\tpid: number,\n\t\tprocessStartId: string | undefined,\n\t): \"current\" | \"replaced\" | \"gone\" | \"unknown\" {\n\t\tif (!isProcessAlive(pid)) {\n\t\t\treturn \"gone\";\n\t\t}\n\t\tif (processStartId === undefined) {\n\t\t\treturn \"unknown\";\n\t\t}\n\t\tconst observed = getProcessStartId(pid);\n\t\tif (observed === undefined) {\n\t\t\treturn \"unknown\";\n\t\t}\n\t\treturn observed === processStartId ? \"current\" : \"replaced\";\n\t}\n\n\t/**\n\t * Keep an exact stop's registration and descriptor authoritative while any\n\t * part of its cleanup is in flight. Root kills acquire this before forwarding\n\t * because a synchronous shutdown event may arrive before the worker replies.\n\t */\n\tprivate acquireWorkerStopOwnership(worker: ResidentWorker): () => void {\n\t\tif (!this.workerStopCounts) this.workerStopCounts = new Map();\n\t\tconst stopCounts = this.workerStopCounts;\n\t\tstopCounts.set(worker, (stopCounts.get(worker) ?? 0) + 1);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst remaining = (stopCounts.get(worker) ?? 1) - 1;\n\t\t\tif (remaining === 0) stopCounts.delete(worker);\n\t\t\telse stopCounts.set(worker, remaining);\n\t\t};\n\t}\n\n\tprivate async stopWorker(\n\t\tworker: ResidentWorker,\n\t\tremoveDescriptor: boolean,\n\t\tforce = false,\n\t\tarchiveSession = false,\n\t\trecoveryCleanup = false,\n\t\tdirectChild?: { child: ChildProcess; closed: Promise<void> },\n\t): Promise<void> {\n\t\tconst releaseStopOwnership = this.acquireWorkerStopOwnership(worker);\n\t\ttry {\n\t\t\tawait this.stopWorkerUntracked(worker, removeDescriptor, force, archiveSession, recoveryCleanup, directChild);\n\t\t} finally {\n\t\t\treleaseStopOwnership();\n\t\t}\n\t}\n\n\tprivate async stopWorkerUntracked(\n\t\tworker: ResidentWorker,\n\t\tremoveDescriptor: boolean,\n\t\tforce = false,\n\t\tarchiveSession = false,\n\t\trecoveryCleanup = false,\n\t\tdirectChild?: { child: ChildProcess; closed: Promise<void> },\n\t): Promise<void> {\n\t\tif (worker.ownerCleanupTimer) {\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t\tif (!recoveryCleanup) {\n\t\t\tworker.stopRevision++;\n\t\t}\n\t\t// A retry can rescind this stop and relaunch the worker while we await\n\t\t// below. Bind every liveness check and signal to the process this stop\n\t\t// entered with, and abort cleanup once the stop no longer applies: the\n\t\t// pid changed (relaunched) or a removeDescriptor stop lost its tombstone\n\t\t// (rescinded, even before the successor pid lands).\n\t\tconst entryPid = worker.descriptor.pid;\n\t\tconst entryStartId = worker.descriptor.processStartId;\n\t\tconst assertStopStillApplies = () => {\n\t\t\tif (directChild) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tworker.descriptor.pid !== entryPid ||\n\t\t\t\t(removeDescriptor && worker.descriptor.stopRequestedAt === undefined)\n\t\t\t) {\n\t\t\t\tthrow new Error(`Session worker ${worker.descriptor.workerId} was relaunched during stop`);\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tif (removeDescriptor) {\n\t\t\t\tthis.persistWorkerStopTombstone(worker, archiveSession);\n\t\t\t} else {\n\t\t\t\tworker.intentionalStop = true;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!directChild) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.reportCleanupFailure(`worker rollback state ${worker.descriptor.workerId}`, error);\n\t\t}\n\t\tconst transferError = new Error(\"Session worker stopped during snapshot transfer\");\n\t\tconst generationTranscripts = new Set<SnapshotTranscriptCache>();\n\t\tfor (const [activeSessionId, generations] of [...(worker.snapshotGenerations ?? new Map())]) {\n\t\t\tfor (const generation of [...generations.values()]) {\n\t\t\t\tgenerationTranscripts.add(generation.transcript);\n\t\t\t\tif (generation.incoming || !generation.transcript.complete || generation.validation) {\n\t\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, transferError);\n\t\t\t\t} else {\n\t\t\t\t\tgeneration.transcript.dispose();\n\t\t\t\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const transcript of worker.transcriptCaches.values()) {\n\t\t\tif (!generationTranscripts.has(transcript) && !transcript.complete) {\n\t\t\t\ttranscript.markFailed(transferError);\n\t\t\t}\n\t\t\ttranscript.dispose();\n\t\t}\n\t\tworker.transcriptCaches.clear();\n\t\tworker.snapshotCache.clear();\n\t\tworker.snapshotGenerations?.clear();\n\t\tif (worker.client) {\n\t\t\tif (archiveSession) {\n\t\t\t\tawait worker.client\n\t\t\t\t\t.requestWorker({ type: \"worker_archive_and_shutdown\" }, force ? 1000 : 5000)\n\t\t\t\t\t.catch(() => undefined);\n\t\t\t} else {\n\t\t\t\tawait worker.client.request({ type: \"shutdown\" }, force ? 1000 : 5000).catch(() => undefined);\n\t\t\t}\n\t\t\tworker.client.close();\n\t\t\tworker.client = undefined;\n\t\t} else if (directChild) {\n\t\t\tdirectChild.child.kill(\"SIGTERM\");\n\t\t} else if (this.processIdentity(entryPid, entryStartId) === \"current\") {\n\t\t\tsignalProcessGroupOrProcess(entryPid, \"SIGTERM\");\n\t\t}\n\t\t// Identity-aware in both directions: a replaced pid counts as gone (never\n\t\t// signal a recycled pid) while an unknown identity counts as alive (never\n\t\t// clean up a possibly-live worker on a transient lookup failure). kill(0)\n\t\t// runs on every poll; the expensive identity check is throttled.\n\t\tlet identityVerdict: \"current\" | \"replaced\" | \"gone\" | \"unknown\" = \"current\";\n\t\tlet identityCheckedAt = 0;\n\t\tconst isWorkerProcessAlive = () => {\n\t\t\tif (directChild) {\n\t\t\t\treturn directChild.child.exitCode === null && directChild.child.signalCode === null;\n\t\t\t}\n\t\t\tif (!processIdExists(entryPid)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (now - identityCheckedAt >= LIVENESS_IDENTITY_RECHECK_MS) {\n\t\t\t\tidentityCheckedAt = now;\n\t\t\t\tidentityVerdict = this.processIdentity(entryPid, entryStartId);\n\t\t\t}\n\t\t\treturn identityVerdict !== \"replaced\" && identityVerdict !== \"gone\";\n\t\t};\n\t\tconst gracefulDeadline = Date.now() + (force ? 500 : 2000);\n\t\twhile (isWorkerProcessAlive() && Date.now() < gracefulDeadline) {\n\t\t\tawait delay(25);\n\t\t}\n\t\tlet sigkillSent = false;\n\t\tif (force && isWorkerProcessAlive()) {\n\t\t\tif (directChild) {\n\t\t\t\tsigkillSent = directChild.child.kill(\"SIGKILL\");\n\t\t\t} else if (this.processIdentity(entryPid, entryStartId) === \"current\") {\n\t\t\t\t// Fresh, unthrottled check: the cached verdict may be up to 500ms\n\t\t\t\t// old, long enough for the pid to be recycled.\n\t\t\t\tsignalProcessGroupOrProcess(entryPid, \"SIGKILL\");\n\t\t\t\tsigkillSent = true;\n\t\t\t}\n\t\t\tconst forceDeadline = Date.now() + 1000;\n\t\t\twhile (isWorkerProcessAlive() && Date.now() < forceDeadline) {\n\t\t\t\tawait delay(25);\n\t\t\t}\n\t\t}\n\t\tif (isWorkerProcessAlive()) {\n\t\t\tworker.intentionalStop = worker.descriptor.stopRequestedAt !== undefined;\n\t\t\tif (removeDescriptor) {\n\t\t\t\tthis.scheduleWorkerStopFinalization(worker);\n\t\t\t}\n\t\t\tthrow new WorkerStopTimeoutError(\n\t\t\t\t`Session worker ${worker.descriptor.workerId} did not stop${sigkillSent ? \" after SIGKILL\" : \"\"}`,\n\t\t\t);\n\t\t}\n\t\tif (directChild) {\n\t\t\tawait directChild.closed;\n\t\t}\n\t\tassertStopStillApplies();\n\t\tif (removeDescriptor && worker.descriptor.archiveOnStop) {\n\t\t\tif (force) {\n\t\t\t\tthis.reclaimStoppedWorkerCronLock(worker);\n\t\t\t}\n\t\t\tawait this.finalizeArchivedWorkerStop(worker);\n\t\t\tassertStopStillApplies();\n\t\t}\n\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\tif (removeDescriptor) {\n\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t}\n\t\tif (!this.shuttingDown) {\n\t\t\tvoid this.syncAgentPeers().catch(() => undefined);\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t}\n\t}\n\n\t/**\n\t * A stop that timed out leaves a tombstoned registration behind. Keep\n\t * escalating in the background until the process is gone, then finish the\n\t * interrupted cleanup instead of leaving a dead worker registered forever.\n\t */\n\tprivate scheduleWorkerStopFinalization(worker: ResidentWorker): void {\n\t\tif (worker.stopFinalization) {\n\t\t\treturn;\n\t\t}\n\t\tworker.stopFinalization = this.finalizeTimedOutWorkerStop(worker).finally(() => {\n\t\t\tworker.stopFinalization = undefined;\n\t\t});\n\t}\n\n\tprivate async finalizeTimedOutWorkerStop(worker: ResidentWorker): Promise<void> {\n\t\t// Bind to the exact process generation being stopped: a retry can rescind\n\t\t// the stop and relaunch with a new pid, and the OS can recycle the old\n\t\t// pid. The finalizer must never follow either successor.\n\t\tconst pid = worker.descriptor.pid;\n\t\tconst processStartId = worker.descriptor.processStartId;\n\t\tconst stopRevision = worker.stopRevision;\n\t\tconst isStopGenerationCurrent = () =>\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.stopRevision === stopRevision &&\n\t\t\tworker.descriptor.stopRequestedAt !== undefined &&\n\t\t\tworker.descriptor.pid === pid;\n\t\t// A replaced pid counts as gone (never SIGKILL a recycled pid); an\n\t\t// unobservable identity counts as alive (never clean up a possibly-live\n\t\t// worker). kill(0) probes every poll; ps-backed checks are throttled.\n\t\tlet stoppedVerdict = true;\n\t\tlet stoppedCanSignal = processStartId !== undefined;\n\t\tlet stoppedCheckedAt = 0;\n\t\tconst isStoppedProcessAlive = () => {\n\t\t\tif (!processIdExists(pid)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (now - stoppedCheckedAt < LIVENESS_IDENTITY_RECHECK_MS) {\n\t\t\t\treturn stoppedVerdict;\n\t\t\t}\n\t\t\tstoppedCheckedAt = now;\n\t\t\tif (!isProcessAlive(pid)) {\n\t\t\t\tstoppedVerdict = false;\n\t\t\t} else if (processStartId === undefined) {\n\t\t\t\tstoppedVerdict = true;\n\t\t\t\t// Without an identity captured while the original worker was known\n\t\t\t\t// alive, this pid may now belong to an unrelated process. Keep\n\t\t\t\t// waiting for it to disappear, but never escalate by pid alone.\n\t\t\t\tstoppedCanSignal = false;\n\t\t\t} else {\n\t\t\t\tconst observed = getProcessStartId(pid);\n\t\t\t\tstoppedVerdict = observed !== processStartId ? observed === undefined : true;\n\t\t\t\tstoppedCanSignal = observed === processStartId;\n\t\t\t}\n\t\t\treturn stoppedVerdict;\n\t\t};\n\t\tconst sigkillDeadline = Date.now() + STOP_FINALIZATION_SIGKILL_GRACE_MS;\n\t\tlet killed = false;\n\t\twhile (!this.shuttingDown) {\n\t\t\tif (!isStopGenerationCurrent()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isStoppedProcessAlive()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!killed && stoppedCanSignal && Date.now() >= sigkillDeadline) {\n\t\t\t\t// Fresh, unthrottled identity check right before signalling: the\n\t\t\t\t// cached verdict may be up to 500ms old, long enough for the pid\n\t\t\t\t// to be recycled by an unrelated process. A transiently\n\t\t\t\t// unobservable identity skips this attempt but keeps escalation\n\t\t\t\t// armed so a wedged worker is still killed on a later pass.\n\t\t\t\tconst observedNow = processStartId === undefined ? undefined : getProcessStartId(pid);\n\t\t\t\tif (processStartId === undefined || observedNow === processStartId) {\n\t\t\t\t\tsignalProcessGroupOrProcess(pid, \"SIGKILL\");\n\t\t\t\t\tkilled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait unrefDelay(STOP_FINALIZATION_RECHECK_MS);\n\t\t}\n\t\t// Retry transient cleanup failures (for example catalog archival) so a\n\t\t// dead worker's registration is never stranded permanently. Each attempt\n\t\t// bumps the worker's stopRevision, so rescission is detected through the\n\t\t// registration and tombstone instead of the waiting-phase snapshot.\n\t\tconst isCleanupStillWanted = () =>\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.descriptor.stopRequestedAt !== undefined &&\n\t\t\tworker.descriptor.pid === pid;\n\t\twhile (!this.shuttingDown && isCleanupStillWanted()) {\n\t\t\ttry {\n\t\t\t\tawait this.stopWorker(worker, true, true, worker.descriptor.archiveOnStop === true);\n\t\t\t\tthis.log(`Finalized timed-out stop for worker ${worker.descriptor.workerId}`);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportCleanupFailure(`timed-out worker stop ${worker.descriptor.workerId}`, error);\n\t\t\t\tawait unrefDelay(STOP_FINALIZATION_RETRY_MS);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finalizeArchivedWorkerStop(worker: ResidentWorker): Promise<void> {\n\t\tconst context = this.workerSessionArtifactContext(worker);\n\t\tif (!context) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.rootSessionId) {\n\t\t\tconst cronStore = AgentCronJobStore.forSessionArtifacts();\n\t\t\tcronStore.registerSessionArtifact(worker.descriptor.rootSessionId, context.artifactDir);\n\t\t\tcronStore.cancelJobsForSession({\n\t\t\t\tsessionId: worker.descriptor.rootSessionId,\n\t\t\t\tsessionFile: context.sessionFile,\n\t\t\t});\n\t\t\tawait this.catalog.archive(context.sessionFile, worker.descriptor.rootSessionId);\n\t\t}\n\t}\n\n\tprivate reclaimStoppedWorkerCronLock(worker: ResidentWorker): void {\n\t\tconst context = this.workerSessionArtifactContext(worker);\n\t\tif (!context) {\n\t\t\treturn;\n\t\t}\n\t\trmSync(join(context.artifactDir, `${SESSION_SCHEDULED_JOBS_FILENAME}.lock`), { recursive: true, force: true });\n\t}\n\n\tprivate workerSessionArtifactContext(\n\t\tworker: ResidentWorker,\n\t): { sessionFile: string; artifactDir: string } | undefined {\n\t\tconst sessionFile = worker.descriptor.sessionFile ?? worker.descriptor.createCommand.sessionPath;\n\t\tif (!sessionFile || !worker.descriptor.rootSessionId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tsessionFile,\n\t\t\tartifactDir: getSessionArtifactPathForFile(sessionFile, worker.descriptor.rootSessionId),\n\t\t};\n\t}\n\n\tprivate persistWorkerStopTombstone(worker: ResidentWorker, archiveSession = false): void {\n\t\tworker.intentionalStop = true;\n\t\tworker.descriptor.stopRequestedAt ??= new Date().toISOString();\n\t\tworker.descriptor.archiveOnStop ||= archiveSession;\n\t\tthis.persistWorker(worker);\n\t}\n\n\tprivate write(client: DaemonSocketClient, message: DaemonOutbound): boolean {\n\t\treturn this.writeSerialized(client, serializeJsonLine(message));\n\t}\n\n\tprivate broadcastHeartbeatsChanged(): void {\n\t\tfor (const client of this.clients) {\n\t\t\tthis.write(client, { type: \"heartbeats_changed\" });\n\t\t}\n\t}\n\n\tprivate writeSerialized(client: DaemonSocketClient, line: string | Uint8Array): boolean {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn false;\n\t\t}\n\t\tconst accepted = client.socket.write(line);\n\t\tif (!accepted) {\n\t\t\tclient.backpressured = true;\n\t\t}\n\t\treturn accepted;\n\t}\n\n\tprivate registerSignalHandlers(): void {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGINT\", \"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => void this.shutdown(signal === \"SIGINT\" ? 130 : signal === \"SIGHUP\" ? 129 : 143, false);\n\t\t\tprocess.on(signal, handler);\n\t\t\tthis.signalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t\tconst exitHandler = () => this.cleanupSocket();\n\t\tprocess.on(\"exit\", exitHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.off(\"exit\", exitHandler));\n\t}\n\n\tprivate cleanupSocket(): void {\n\t\tif (!this.ownsSocketPath) {\n\t\t\treturn;\n\t\t}\n\t\tthis.ownsSocketPath = false;\n\t\tconst identity = this.socketIdentity;\n\t\tthis.socketIdentity = undefined;\n\t\tcleanupDaemonSocketPath(this.socketPath, identity, this.socketLease);\n\t}\n\n\tprivate async cleanupSupervisorResources(): Promise<void> {\n\t\tif (this.cleanupPromise) {\n\t\t\treturn this.cleanupPromise;\n\t\t}\n\t\tthis.cleanupPromise = this.cleanupSupervisorResourcesOnce();\n\t\treturn this.cleanupPromise;\n\t}\n\n\tprivate async cleanupSupervisorResourcesOnce(): Promise<void> {\n\t\tthis.shuttingDown = true;\n\t\tthis.clearIdleEvictionTimer();\n\t\tawait this.idleEvictionSweep?.catch(() => undefined);\n\t\tfor (const cleanup of this.signalCleanupHandlers.splice(0)) {\n\t\t\tawait this.runCleanupStep(\"signal handler\", cleanup);\n\t\t}\n\t\tconst server = this.server;\n\t\tthis.server = undefined;\n\t\tconst serverClosed = new Promise<void>((resolveClose) => {\n\t\t\tif (!server?.listening) {\n\t\t\t\tresolveClose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tserver.close(() => resolveClose());\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportCleanupFailure(\"daemon server\", error);\n\t\t\t\tresolveClose();\n\t\t\t}\n\t\t});\n\t\tfor (const client of this.clients) {\n\t\t\tclient.attachedActiveSessionIds.clear();\n\t\t\tawait this.runCleanupStep(`daemon client input ${client.id}`, () => client.detachInput());\n\t\t\tawait this.runCleanupStep(`daemon client socket ${client.id}`, () => {\n\t\t\t\tclient.socket.destroy();\n\t\t\t});\n\t\t}\n\t\tthis.clients.clear();\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.ownerCleanupTimer) {\n\t\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t\t}\n\t\t\tawait this.runCleanupStep(`worker client ${worker.descriptor.workerId}`, () => worker.client?.close());\n\t\t\tworker.client = undefined;\n\t\t\tconst transcripts = new Set(worker.transcriptCaches.values());\n\t\t\tfor (const generations of worker.snapshotGenerations?.values() ?? []) {\n\t\t\t\tfor (const generation of generations.values()) {\n\t\t\t\t\ttranscripts.add(generation.transcript);\n\t\t\t\t\tthis.settleSnapshotDuplicateValidation(\n\t\t\t\t\t\tgeneration,\n\t\t\t\t\t\tnew Error(\"Daemon supervisor stopped during snapshot transfer\"),\n\t\t\t\t\t);\n\t\t\t\t\tif (!generation.transcript.complete) {\n\t\t\t\t\t\tgeneration.transcript.markFailed(new Error(\"Daemon supervisor stopped during snapshot transfer\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const transcript of transcripts) {\n\t\t\t\tawait this.runCleanupStep(`worker transcript ${worker.descriptor.workerId}`, () => transcript.dispose());\n\t\t\t}\n\t\t\tworker.transcriptCaches.clear();\n\t\t\tworker.snapshotGenerations?.clear();\n\t\t\tworker.snapshotCache.clear();\n\t\t\tworker.snapshotLoads.clear();\n\t\t}\n\t\tthis.workers.clear();\n\t\tthis.openingWorkers.clear();\n\t\tawait this.runCleanupStep(\"daemon catalog\", () => this.catalog.stop());\n\t\tawait this.runCleanupStep(\"daemon server\", () => serverClosed);\n\t\tawait this.runCleanupStep(\"daemon socket\", () => this.cleanupSocket());\n\t\tawait this.runCleanupStep(\"supervisor cache\", () => {\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t});\n\t\tconst lease = this.socketLease;\n\t\tthis.socketLease = undefined;\n\t\tawait this.runCleanupStep(\"daemon socket lock\", async () => lease?.release());\n\t\tconst ownership = this.ownership;\n\t\tthis.ownership = undefined;\n\t\tawait this.runCleanupStep(\"daemon ownership\", async () => ownership?.release());\n\t}\n\n\tprivate async runCleanupStep(label: string, action: () => void | Promise<void>): Promise<void> {\n\t\ttry {\n\t\t\tawait action();\n\t\t} catch (error) {\n\t\t\tthis.reportCleanupFailure(label, error);\n\t\t}\n\t}\n\n\tprivate reportCleanupFailure(label: string, error: unknown): void {\n\t\tconst message = `Failed to clean up ${label}: ${String(error)}`;\n\t\ttry {\n\t\t\tthis.log(message);\n\t\t} catch {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\tprivate async shutdown(\n\t\texitCode: number,\n\t\tstopWorkers: boolean,\n\t\trelaunch = false,\n\t\tforceWorkers = false,\n\t\tclosingReason?: DaemonClosingReason,\n\t): Promise<never> {\n\t\tif (this.shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tthis.shuttingDown = true;\n\t\tthis.clearIdleEvictionTimer();\n\t\tawait this.idleEvictionSweep?.catch(() => undefined);\n\t\tif (closingReason) {\n\t\t\tfor (const client of this.clients) {\n\t\t\t\tthis.write(client, { type: \"daemon_closing\", reason: closingReason });\n\t\t\t}\n\t\t}\n\t\tfor (const cleanup of this.signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tif (stopWorkers) {\n\t\t\tawait Promise.all(\n\t\t\t\t[...this.workers.values()].map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.stopWorker(worker, true, forceWorkers, true);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!(error instanceof WorkerStopTimeoutError)) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t`Worker ${worker.descriptor.workerId} remains tombstoned for recovery after shutdown: ${error.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (!this.hasPersistedWorkerDescriptors()) {\n\t\t\t\trmSync(this.supervisorConfigPath, { force: true });\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const worker of this.workers.values()) {\n\t\t\t\tworker.intentionalStop = true;\n\t\t\t\tworker.client?.close();\n\t\t\t\tworker.client = undefined;\n\t\t\t}\n\t\t}\n\t\tawait this.catalog.stop();\n\t\tfor (const client of this.clients) {\n\t\t\tclient.detachInput();\n\t\t\tclient.socket.end();\n\t\t}\n\t\tawait new Promise<void>((resolveClose) => this.server?.close(() => resolveClose()) ?? resolveClose());\n\t\tawait this.runCleanupStep(\"daemon socket\", () => this.cleanupSocket());\n\t\tawait this.runCleanupStep(\"supervisor cache\", () => {\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t});\n\t\tconst lease = this.socketLease;\n\t\tthis.socketLease = undefined;\n\t\tawait this.runCleanupStep(\"daemon socket lock\", async () => lease?.release());\n\t\tconst ownership = this.ownership;\n\t\tthis.ownership = undefined;\n\t\tawait this.runCleanupStep(\"daemon ownership\", async () => ownership?.release());\n\t\tif (relaunch) {\n\t\t\tconst launch = createCliSubprocessLaunchSpec([\"--mode\", \"daemon\", \"--daemon-socket\", this.socketPath]);\n\t\t\tconst environment = createCliSubprocessEnv();\n\t\t\tdelete environment[DAEMON_CATALOG_ROLE_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_ROLE_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_TOKEN_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_ACTIVE_SESSION_ID_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_SUPERVISOR_SOCKET_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_RECOVERY_JOURNAL_ENV];\n\t\t\tdelete environment[ORPHAN_PROCESS_JOURNAL_ENV];\n\t\t\tdelete environment[SESSION_LEASES_ENABLED_ENV];\n\t\t\tdelete environment[SESSION_LEASE_OWNER_ID_ENV];\n\t\t\tconst replacement = spawn(launch.command, launch.args, {\n\t\t\t\tcwd: this.defaultSessionConfig.cwd ?? process.cwd(),\n\t\t\t\tdetached: true,\n\t\t\t\tenv: environment,\n\t\t\t\tstdio: \"ignore\",\n\t\t\t});\n\t\t\treplacement.unref();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"daemon-supervisor.js","sourceRoot":"","sources":["../../../src/modes/daemon/daemon-supervisor.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { chmodSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createServer, type Server, type Socket } from \"node:net\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { Writable } from \"node:stream\";\nimport { getLogger } from \"@asm-agent/ai\";\nimport { createCliSubprocessEnv, createCliSubprocessLaunchSpec } from \"../../cli/subprocess-launch.js\";\nimport {\n\tappendRotatingLog,\n\tgetCronJobsPath,\n\tgetDaemonLogPath,\n\tgetDaemonUpdateRestartManifestPath,\n\tgetSessionsDir,\n\tVERSION,\n} from \"../../config.js\";\nimport {\n\ttype AgentFamilyCatalogEntry,\n\ttype AgentSessionMessageAgentSummary,\n\tassertAgentFamilyReach,\n\tassertAgentSessionNameAvailable,\n\tformatAgentSessionNameUnavailable,\n\tsessionNameReservationKey,\n} from \"../../core/agent-messages.js\";\nimport {\n\ttype AgentSessionRuntimeConfig,\n\ttype DurableAgentSessionRuntimeConfig,\n\tdurableAgentSessionRuntimeConfig,\n\tmergeAgentSessionRuntimeConfig,\n} from \"../../core/agent-session-config.js\";\nimport {\n\ttype AgentCronJob,\n\tAgentCronJobStore,\n\tmigrateLegacyCronJobsToSessionArtifacts,\n\tSESSION_SCHEDULED_JOBS_FILENAME,\n} from \"../../core/cron-jobs.js\";\nimport {\n\tclearOrphanProcessJournal,\n\tkillOrphanProcess,\n\tORPHAN_PROCESS_JOURNAL_ENV,\n\treadActiveOrphanProcesses,\n\tshouldReapOrphanProcess,\n} from \"../../core/orphan-process-journal.js\";\nimport { PromptAdmissionCancelledError, waitForPromptAdmission } from \"../../core/prompt-admission.js\";\nimport {\n\tcanEvictWorker,\n\ttype IdleEvictionMinutes,\n\ttype WorkerEvictionSnapshot,\n} from \"../../core/session-action-store.js\";\nimport { canonicalSessionPath, getProcessStartId, SessionAlreadyActiveError } from \"../../core/session-lease.js\";\nimport { getSessionArtifactPathForFile, readSessionInfo, type SessionInfo } from \"../../core/session-manager.js\";\nimport { SettingsManager } from \"../../core/settings-manager.js\";\nimport { isProcessAlive, processIdExists, signalProcessGroupOrProcess } from \"../../utils/child-process.js\";\nimport type { AgentConnectionHeartbeat } from \"../agent-connection/types.js\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"../rpc/jsonl.js\";\nimport type { PrivateFrame } from \"../session-worker/private-framing.js\";\nimport { createActiveSessionId, type DaemonSocketClient } from \"./active-session-state.js\";\nimport { CommandRecoveryJournal, createCommandIdempotencyKey } from \"./command-recovery-journal.js\";\nimport { CompactAssistantStreamReconstructor, isCompactAssistantDelta } from \"./compact-session-stream.js\";\nimport { DAEMON_CATALOG_ROLE_ENV, DaemonCatalogClient } from \"./daemon-catalog-process.js\";\nimport { deserializeDaemonError, serializeDaemonError } from \"./daemon-errors.js\";\nimport {\n\tcollectDaemonClientEnv,\n\tcreateDaemonEventMeta,\n\tDAEMON_COMMAND_COMPATIBILITY,\n\tDAEMON_COMMAND_ENVELOPE_MIN_PROTOCOL_VERSION,\n\tDAEMON_DEFAULT_CLIENT_CAPABILITIES,\n\tDAEMON_DEFAULT_SERVER_CAPABILITIES,\n\tDAEMON_PROTOCOL_INFO,\n\tDAEMON_SCHEMA_ID,\n\tDAEMON_SCHEMA_REVISION,\n\tDAEMON_UPDATE_RESTART_FORMAT_VERSION,\n\ttype DaemonAttachResult,\n\ttype DaemonClientCapability,\n\ttype DaemonClosingReason,\n\ttype DaemonCommand,\n\ttype DaemonOutbound,\n\ttype DaemonResponse,\n\ttype DaemonUpdateRestartManifest,\n\tfailure,\n\tisDaemonCommandEnvelope,\n\tisDaemonMutatingCommand,\n\tsalvageDaemonCommandId,\n\tsuccess,\n\tUPDATE_RESTART_DRAIN_COMMANDS,\n} from \"./daemon-protocol.js\";\nimport { getDaemonRuntimeIdentity } from \"./daemon-runtime-identity.js\";\nimport { matchesSessionIdSuffix } from \"./daemon-session-id.js\";\nimport {\n\tclassifySessionRosterStatus,\n\tisSessionSummaryBusy,\n\ttype SessionSummary,\n\tsummaryForInactiveSession,\n} from \"./daemon-session-list.js\";\nimport {\n\tacquireDaemonSocketPathLease,\n\tcleanupDaemonSocketPath,\n\ttype DaemonSocketIdentity,\n\ttype DaemonSocketPathLease,\n\tdefaultDaemonSocketDir,\n\tdefaultDaemonSocketPath,\n\tgetDaemonSocketIdentity,\n\tnormalizeSocketPath,\n\tprepareDaemonSocketPath,\n\trestrictDaemonSocketPath,\n} from \"./daemon-socket.js\";\nimport {\n\tacquireDaemonSupervisorOwnership,\n\tisDaemonShutdownAdmissionActive,\n\twaitForDaemonStartupFence,\n} from \"./daemon-supervisor-ownership.js\";\nimport { DaemonWorkerClient } from \"./daemon-worker-client.js\";\nimport {\n\tDAEMON_WORKER_ACTIVE_SESSION_ID_ENV,\n\tDAEMON_WORKER_RECOVERY_JOURNAL_ENV,\n\tDAEMON_WORKER_ROLE_ENV,\n\tDAEMON_WORKER_STARTUP_GATE_COMMIT,\n\tDAEMON_WORKER_STARTUP_GATE_FD_ENV,\n\tDAEMON_WORKER_SUPERVISOR_SOCKET_ENV,\n\tDAEMON_WORKER_TOKEN_ENV,\n\ttype DaemonCreateCommand,\n\ttype DaemonWorkerDescriptor,\n\ttype DaemonWorkerFrameHeader,\n\ttype DaemonWorkerLifecycle,\n\tdurableDaemonCreateCommand,\n\tdurableDaemonWorkerDescriptor,\n\tSESSION_LEASE_OWNER_ID_ENV,\n\tSESSION_LEASES_ENABLED_ENV,\n} from \"./daemon-worker-protocol.js\";\nimport { MutationDrainLatch } from \"./mutation-drain-latch.js\";\nimport { createRlmLedgerRegistrySeedSource, RlmSpawnLedger } from \"./rlm-ledger.js\";\nimport { serializeSavedSessionInfo } from \"./saved-session-info.js\";\nimport { SNAPSHOT_TARGET_CHUNK_BYTES, SnapshotTranscriptCache } from \"./snapshot-transcript-cache.js\";\nimport { WorkerRecoveryJournal } from \"./worker-recovery-journal.js\";\n\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\ntype DaemonCommandBody = DistributiveOmit<DaemonCommand, \"id\">;\n\nconst structuredLog = getLogger(\"coding-agent.daemon-supervisor\");\nconst WORKER_CONNECT_TIMEOUT_MS = 30_000;\nconst WORKER_REQUEST_TIMEOUT_MS = 24 * 60 * 60 * 1000;\nconst INPUT_PAUSE_CLEANUP_TIMEOUT_MS = 5_000;\nconst UPDATE_RESTART_MUTATION_DRAIN_TIMEOUT_MS = 80_000;\nconst UPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS = 90_000;\n// The whole pre-commit prepare (drain + worker fencing) must finish inside the\n// caller's 120s prepare_update_restart request timeout, or roll back; otherwise\n// an abandoned prepare leaves the daemon permanently fenced with workers stopped.\nconst UPDATE_RESTART_PREPARE_DEADLINE_MS = 100_000;\nconst WORKER_RETRY_DELAYS_MS = [250, 1000, 5000] as const;\nconst DEFERRED_RECOVERY_RECHECK_MS = 5000;\nconst STOP_FINALIZATION_RECHECK_MS = 250;\nconst STOP_FINALIZATION_SIGKILL_GRACE_MS = 5000;\nconst STOP_FINALIZATION_RETRY_MS = 5000;\nconst STALE_RECLAIM_WAIT_MS = 10_000;\n// Polling loops probe existence cheaply via kill(0); the ps-backed zombie and\n// identity checks are throttled so a wedged worker cannot saturate the\n// supervisor event loop with synchronous subprocess spawns.\nconst LIVENESS_IDENTITY_RECHECK_MS = 500;\nconst OWNED_WORKER_DISCONNECT_GRACE_MS = 30_000;\nconst IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS = 5 * 60_000;\nconst IDLE_EVICTION_MIN_SWEEP_INTERVAL_MS = 60_000;\nconst IDLE_EVICTION_DRAIN_TIMEOUT_MS = 5_000;\nconst CHILD_PASSIVATION_PER_WORKER_CAP = 2;\nconst SUPERVISOR_CONFIG_FILE_NAME = \"supervisor-config\";\nconst WORKER_STARTUP_GATE_FD = 3;\n\nconst DAEMON_COMMAND_TYPES: ReadonlySet<string> = new Set([\n\t\"ack_result\",\n\t\"list\",\n\t\"list_agent_peers\",\n\t\"list_saved_sessions\",\n\t\"create\",\n\t\"attach\",\n\t\"reattach\",\n\t\"detach\",\n\t\"complete_owned_session\",\n\t\"promote_owned_session\",\n\t\"kill\",\n\t\"rename\",\n\t\"prompt\",\n\t\"cancel_prompt_admission\",\n\t\"prompt_and_wait\",\n\t\"steer\",\n\t\"follow_up\",\n\t\"restore_next_turn\",\n\t\"restore_actions\",\n\t\"append_custom_message\",\n\t\"resume_queue\",\n\t\"send_message\",\n\t\"agent_messages_status\",\n\t\"agent_messages_pause\",\n\t\"agent_messages_resume\",\n\t\"agent_messages_clear\",\n\t\"abort\",\n\t\"start_side_question\",\n\t\"abort_side_question\",\n\t\"execute_bash\",\n\t\"execute_bash_and_wait\",\n\t\"abort_bash\",\n\t\"cancel_rlm_child\",\n\t\"delete_rlm_subagent\",\n\t\"wait_for_idle\",\n\t\"wait_for_headless_completion\",\n\t\"get_session_header\",\n\t\"get_state\",\n\t\"get_connection_state\",\n\t\"get_messages\",\n\t\"get_rlm_children\",\n\t\"get_session_stats\",\n\t\"get_context_tree\",\n\t\"get_commands\",\n\t\"get_resource_snapshot\",\n\t\"replace_acp_mcp_servers\",\n\t\"get_model_catalog\",\n\t\"get_available_models\",\n\t\"get_queue\",\n\t\"mutate_queued_message\",\n\t\"clear_queue\",\n\t\"abort_and_clear_queue\",\n\t\"acquire_session_input_pause\",\n\t\"release_session_input_pause\",\n\t\"cron_list\",\n\t\"heartbeats_list\",\n\t\"heartbeat_manage\",\n\t\"cron_add\",\n\t\"cron_cancel\",\n\t\"heartbeat_get\",\n\t\"heartbeat_set\",\n\t\"heartbeat_update\",\n\t\"set_model\",\n\t\"cycle_model\",\n\t\"set_scoped_models\",\n\t\"set_thinking_level\",\n\t\"cycle_thinking_level\",\n\t\"set_service_tier\",\n\t\"set_transport\",\n\t\"set_steering_mode\",\n\t\"set_follow_up_mode\",\n\t\"set_auto_compaction\",\n\t\"set_auto_retry\",\n\t\"compact\",\n\t\"refine\",\n\t\"abort_compaction\",\n\t\"abort_branch_summary\",\n\t\"abort_retry\",\n\t\"reload\",\n\t\"new_session\",\n\t\"switch_session\",\n\t\"fork\",\n\t\"navigate_tree\",\n\t\"import_jsonl\",\n\t\"export_html\",\n\t\"export_jsonl\",\n\t\"set_session_name\",\n\t\"get_rlm_max_depth_status\",\n\t\"set_rlm_max_depth\",\n\t\"rename_saved_session\",\n\t\"delete_saved_session\",\n\t\"get_session_context\",\n\t\"get_session_tree\",\n\t\"get_user_messages_for_forking\",\n\t\"get_last_assistant_text\",\n\t\"get_system_prompt\",\n\t\"get_tool_definition\",\n\t\"set_session_entry_label\",\n\t\"extension_ui_response\",\n\t\"prepare_update_restart\",\n\t\"retry_worker\",\n\t\"restart\",\n\t\"shutdown\",\n]);\n\ninterface ResidentWorker {\n\tdescriptor: DaemonWorkerDescriptor;\n\tdescriptorPath: string;\n\tclient?: DaemonWorkerClient;\n\theartbeatSnapshot?: AgentConnectionHeartbeat[];\n\theartbeatSnapshotStale?: boolean;\n\tsummaries: Map<string, SessionSummary>;\n\tsnapshotCache: Map<string, DaemonAttachResult>;\n\ttranscriptCaches: Map<string, SnapshotTranscriptCache>;\n\tsnapshotGenerations: Map<string, Map<string, SnapshotTranscriptGeneration>>;\n\tsnapshotLoads: Map<string, Promise<DaemonAttachResult>>;\n\trecovery?: Promise<void>;\n\tdeferredRecovery?: Promise<void>;\n\tintentionalStop: boolean;\n\tstopRevision: number;\n\tlaunchEnv?: Record<string, string>;\n\ttransientCreateCommand?: DaemonCreateCommand;\n\tstopFinalization?: Promise<void>;\n\townerCleanupTimer?: ReturnType<typeof setTimeout>;\n\tpromotedOwnerClientId?: string;\n\tupdateRestartPrepareClient?: DaemonWorkerClient;\n}\n\ninterface SnapshotDuplicateValidation {\n\tpromise: Promise<void>;\n\tresolve: () => void;\n\treject: (error: Error) => void;\n}\n\ninterface SnapshotTranscriptGeneration {\n\ttranscript: SnapshotTranscriptCache;\n\tresult: DaemonAttachResult;\n\tbegin?: Buffer;\n\tend?: Buffer;\n\tincoming: boolean;\n\tretired: boolean;\n\tduplicateChunkIndex?: number;\n\tduplicateResult?: DaemonAttachResult;\n\tvalidation?: SnapshotDuplicateValidation;\n}\n\ninterface DaemonSupervisorOptions {\n\tsocketPath?: string;\n\tdefaultSessionConfig: AgentSessionRuntimeConfig;\n\tdescriptorDir?: string;\n}\n\ninterface PersistedSupervisorConfig {\n\tversion: 1;\n\tsocketPath: string;\n\tdefaultSessionConfig: DurableAgentSessionRuntimeConfig;\n}\n\ninterface WorkerMatch {\n\tworker: ResidentWorker;\n\tsummary: SessionSummary;\n}\n\ninterface WorkerAttachData {\n\tresult: DaemonAttachResult;\n\tworker: ResidentWorker;\n\ttranscript?: SnapshotTranscriptCache;\n\treleaseTranscript?: () => void;\n}\n\ninterface SupervisorPromptAdmission {\n\tclient: DaemonSocketClient;\n\tactiveSessionId: string;\n\tpublicAdmissionId: string;\n\tworkerAdmissionId: string;\n\tstatus: \"waiting\" | \"owned\" | \"cancelled\";\n\tcontroller: AbortController;\n\tworker?: ResidentWorker;\n\tworkerActiveSessionId?: string;\n}\n\ninterface SupervisorSessionInputPause {\n\towner: DaemonSocketClient;\n\tworker: ResidentWorker;\n\tactiveSessionId: string;\n\trequestedActiveSessionId: string;\n\tleaseKey: string;\n\tpauseId: string;\n\treleaseTask?: Promise<DaemonResponse>;\n}\n\nfunction throwIfAdmissionCancelled(admission: SupervisorPromptAdmission | undefined): void {\n\tif (admission?.status === \"cancelled\") throw new PromptAdmissionCancelledError();\n}\n\nclass SupervisorRecoveryCancelledError extends Error {\n\treadonly code = \"supervisor_recovery_cancelled\" as const;\n}\n\nclass SnapshotLoadInvalidatedError extends Error {}\n\nclass WorkerStopTimeoutError extends Error {}\n\nfunction isSupervisorGenerationStale(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === \"supervisor_generation_stale\"\n\t);\n}\n\nfunction isSupervisorRecoveryCancelled(error: unknown): boolean {\n\treturn isSupervisorShutdownAdmissionCancelled(error) || isSupervisorGenerationStale(error);\n}\n\nfunction isSupervisorShutdownAdmissionCancelled(error: unknown): boolean {\n\treturn (\n\t\terror instanceof SupervisorRecoveryCancelledError ||\n\t\t(typeof error === \"object\" &&\n\t\t\terror !== null &&\n\t\t\t\"code\" in error &&\n\t\t\t(error as { code?: unknown }).code === \"supervisor_recovery_cancelled\")\n\t);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n\nfunction unrefDelay(ms: number): Promise<void> {\n\treturn new Promise((resolveDelay) => setTimeout(resolveDelay, ms).unref());\n}\n\nfunction commitWorkerStartupGate(gate: Writable): Promise<void> {\n\treturn new Promise((resolveCommit, rejectCommit) => {\n\t\tlet settled = false;\n\t\tconst finish = (error?: Error | null) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tif (error) {\n\t\t\t\trejectCommit(error);\n\t\t\t} else {\n\t\t\t\tresolveCommit();\n\t\t\t}\n\t\t};\n\t\tconst onError = (error: Error) => finish(error);\n\t\tgate.on(\"error\", onError);\n\t\tgate.once(\"close\", () => gate.off(\"error\", onError));\n\t\tgate.end(DAEMON_WORKER_STARTUP_GATE_COMMIT, (error?: Error | null) => finish(error));\n\t});\n}\n\nfunction withoutCommandId(command: DaemonCommand): DaemonCommandBody {\n\tconst { id: _id, ...body } = command;\n\treturn body as DaemonCommandBody;\n}\n\nfunction withoutSupervisorCreateFields(command: DaemonCreateCommand): DaemonCreateCommand {\n\tconst { launchEnv: _launchEnv, lifecycle: _lifecycle, ...workerCommand } = command;\n\treturn workerCommand;\n}\n\nfunction responseWithId(response: DaemonResponse, id: string | undefined): DaemonResponse {\n\treturn { ...response, id };\n}\n\nfunction isSessionSummary(value: unknown): value is SessionSummary {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as { id?: unknown; sessionId?: unknown; cwd?: unknown };\n\treturn (\n\t\ttypeof candidate.id === \"string\" && typeof candidate.sessionId === \"string\" && typeof candidate.cwd === \"string\"\n\t);\n}\n\nfunction isDaemonWorkerDescriptor(value: unknown, socketPath: string): value is DaemonWorkerDescriptor {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst descriptor = value as Partial<DaemonWorkerDescriptor>;\n\treturn (\n\t\t(descriptor.version === 1 || descriptor.version === 2) &&\n\t\ttypeof descriptor.supervisorSocketPath === \"string\" &&\n\t\tnormalizeSocketPath(descriptor.supervisorSocketPath) === socketPath &&\n\t\ttypeof descriptor.workerId === \"string\" &&\n\t\tNumber.isInteger(descriptor.pid) &&\n\t\t(descriptor.pid ?? 0) > 0 &&\n\t\t(descriptor.processStartId === undefined || typeof descriptor.processStartId === \"string\") &&\n\t\t(descriptor.ownerClientId === undefined || typeof descriptor.ownerClientId === \"string\") &&\n\t\ttypeof descriptor.socketPath === \"string\" &&\n\t\ttypeof descriptor.authenticationToken === \"string\" &&\n\t\ttypeof descriptor.rootActiveSessionId === \"string\" &&\n\t\ttypeof descriptor.createdAt === \"string\" &&\n\t\ttypeof descriptor.updatedAt === \"string\" &&\n\t\tNumber.isInteger(descriptor.consecutiveFailures) &&\n\t\tdescriptor.createCommand !== undefined &&\n\t\ttypeof descriptor.createCommand === \"object\" &&\n\t\tdescriptor.createCommand.type === \"create\"\n\t);\n}\n\nfunction sessionSummariesFromResponse(response: DaemonResponse): SessionSummary[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\" || !(\"sessions\" in response.data)) {\n\t\tthrow new Error(\"Session worker returned an invalid list response\");\n\t}\n\tconst sessions = (response.data as { sessions: unknown }).sessions;\n\tif (!Array.isArray(sessions) || !sessions.every(isSessionSummary)) {\n\t\tthrow new Error(\"Session worker returned an invalid list response\");\n\t}\n\treturn sessions;\n}\n\nfunction attachResultFromResponse(response: DaemonResponse): DaemonAttachResult {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\tthrow new Error(response.success ? \"Session worker returned an invalid attach response\" : response.error);\n\t}\n\tconst candidate = response.data as Partial<DaemonAttachResult>;\n\tif (typeof candidate.activeSessionId !== \"string\" || !candidate.snapshot || !candidate.client) {\n\t\tthrow new Error(\"Session worker returned an invalid attach response\");\n\t}\n\treturn candidate as DaemonAttachResult;\n}\n\nfunction cronJobsFromResponse(response: DaemonResponse): AgentCronJob[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst jobs = (response.data as { jobs?: unknown }).jobs;\n\treturn Array.isArray(jobs) ? (jobs as AgentCronJob[]) : [];\n}\n\nfunction heartbeatsFromResponse(response: DaemonResponse): AgentConnectionHeartbeat[] {\n\tif (!response.success || !response.data || typeof response.data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst heartbeats = (response.data as { heartbeats?: unknown }).heartbeats;\n\treturn Array.isArray(heartbeats) ? (heartbeats as AgentConnectionHeartbeat[]) : [];\n}\n\nfunction sortCronJobs(jobs: AgentCronJob[]): AgentCronJob[] {\n\treturn jobs.sort((left, right) => {\n\t\tif (left.nextRunAt === right.nextRunAt) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (left.nextRunAt === undefined) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (right.nextRunAt === undefined) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn Date.parse(left.nextRunAt) - Date.parse(right.nextRunAt);\n\t});\n}\n\nfunction descriptorKey(socketPath: string): string {\n\treturn createHash(\"sha256\").update(normalizeSocketPath(socketPath)).digest(\"hex\").slice(0, 12);\n}\n\nfunction defaultWorkerDescriptorDir(agentDir: string, socketPath: string): string {\n\treturn join(agentDir, \"daemon-workers\", descriptorKey(socketPath));\n}\n\nexport function idleEvictionSweepIntervalMs(idleEvictionMinutes: IdleEvictionMinutes): number {\n\tif (idleEvictionMinutes === \"off\") return IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS;\n\treturn Math.max(\n\t\tIDLE_EVICTION_MIN_SWEEP_INTERVAL_MS,\n\t\tMath.min(IDLE_EVICTION_MAX_SWEEP_INTERVAL_MS, (idleEvictionMinutes * 60_000) / 3),\n\t);\n}\n\nfunction workerSocketPath(supervisorSocketPath: string, workerId: string): string {\n\tconst key = descriptorKey(supervisorSocketPath);\n\tif (process.platform === \"win32\") {\n\t\treturn `\\\\\\\\.\\\\pipe\\\\asm-agent-worker-${key}-${workerId.slice(0, 12)}`;\n\t}\n\treturn join(defaultDaemonSocketDir(), `worker-${key}-${workerId.slice(0, 12)}.sock`);\n}\n\nfunction looksLikeSessionPath(selector: string): boolean {\n\treturn isAbsolute(selector) || selector.endsWith(\".jsonl\") || selector.includes(\"/\") || selector.includes(\"\\\\\");\n}\n\nfunction isFinalizedTranscriptEvent(eventType: string | undefined): boolean {\n\treturn (\n\t\teventType === \"message_end\" ||\n\t\teventType === \"turn_end\" ||\n\t\teventType === \"compaction_end\" ||\n\t\teventType === \"bash_end\"\n\t);\n}\n\nfunction normalizeCapabilities(\n\tcapabilities: readonly DaemonClientCapability[] | undefined,\n\tsupportsExtensionUi: boolean | undefined,\n): Set<DaemonClientCapability> {\n\tconst normalized = new Set(capabilities ?? DAEMON_DEFAULT_CLIENT_CAPABILITIES);\n\tif (supportsExtensionUi) {\n\t\tnormalized.add(\"extension_ui\");\n\t}\n\treturn normalized;\n}\n\nfunction mergeSessionLists(active: readonly SessionSummary[], saved: readonly SessionInfo[]): SessionSummary[] {\n\tconst activeByFile = new Map<string, SessionSummary>();\n\tfor (const summary of active) {\n\t\tif (summary.sessionFile) {\n\t\t\tactiveByFile.set(resolve(summary.sessionFile), summary);\n\t\t}\n\t}\n\tconst merged: SessionSummary[] = [];\n\tconst seenActiveIds = new Set<string>();\n\tfor (const session of saved) {\n\t\tconst resident = activeByFile.get(resolve(session.path));\n\t\tif (resident) {\n\t\t\tmerged.push({\n\t\t\t\t...resident,\n\t\t\t\tcreated: resident.created ?? session.created.toISOString(),\n\t\t\t\tmodified: resident.modified ?? session.modified.toISOString(),\n\t\t\t\tfirstMessage: resident.firstMessage ?? session.firstMessage,\n\t\t\t});\n\t\t\tseenActiveIds.add(resident.activeSessionId ?? resident.id);\n\t\t} else {\n\t\t\tmerged.push(summaryForInactiveSession(session));\n\t\t}\n\t}\n\tfor (const summary of active) {\n\t\tif (!seenActiveIds.has(summary.activeSessionId ?? summary.id)) {\n\t\t\tmerged.push(summary);\n\t\t}\n\t}\n\treturn merged;\n}\n\nexport async function runDaemonSupervisorMode(options: DaemonSupervisorOptions): Promise<never> {\n\tconst socketPath = normalizeSocketPath(options.socketPath ?? defaultDaemonSocketPath());\n\tconst supervisor = new DaemonSupervisor(socketPath, options);\n\tawait supervisor.start();\n\treturn new Promise(() => {});\n}\n\nexport class DaemonSupervisor {\n\tprivate server?: Server;\n\tprivate readonly ready: Promise<void>;\n\tprivate markReady: () => void = () => {};\n\tprivate rejectReady: (error: Error) => void = () => {};\n\tprivate ownsSocketPath = false;\n\tprivate socketIdentity?: DaemonSocketIdentity;\n\tprivate socketLease?: DaemonSocketPathLease;\n\tprivate ownership?: Awaited<ReturnType<typeof acquireDaemonSupervisorOwnership>>;\n\tprivate cleanupPromise?: Promise<void>;\n\tprivate shuttingDown = false;\n\tprivate updateRestartPhase?: \"draining\" | \"fencing\" | \"prepared\";\n\tprivate readonly mutationDrain = new MutationDrainLatch();\n\tprivate readonly clients = new Set<DaemonSocketClient>();\n\tprivate readonly connectionIds = new WeakMap<DaemonSocketClient, string>();\n\tprivate readonly sessionInputPauseEpochs = new WeakMap<DaemonSocketClient, number>();\n\tprivate readonly detachingInputPauseSessions = new WeakMap<DaemonSocketClient, Set<string>>();\n\tprivate readonly protocolClientIds = new WeakMap<DaemonSocketClient, string>();\n\tprivate readonly workers = new Map<string, ResidentWorker>();\n\tprivate workerStopCounts?: Map<ResidentWorker, number>;\n\tprivate readonly openingWorkers = new Map<string, Promise<ResidentWorker>>();\n\t/** Public admission ids are scoped to the socket that registered them. */\n\tprivate readonly promptAdmissions = new Map<DaemonSocketClient, Map<string, SupervisorPromptAdmission>>();\n\tprivate readonly sessionInputPauses = new Map<string, SupervisorSessionInputPause>();\n\tprivate readonly signalCleanupHandlers: Array<() => void> = [];\n\tprivate readonly descriptorDir: string;\n\tprivate readonly generation = randomUUID();\n\tprivate readonly supervisorConfigPath: string;\n\tprivate readonly defaultSessionConfig: AgentSessionRuntimeConfig;\n\tprivate readonly snapshotCacheRoot: string;\n\tprivate commandJournal!: CommandRecoveryJournal;\n\tprivate readonly streamReconstructor = new CompactAssistantStreamReconstructor();\n\tprivate readonly compactCatchupInProgress = new Set<string>();\n\tprivate readonly pendingSessionNames = new Set<string>();\n\tprivate readonly catalog: DaemonCatalogClient;\n\tprivate readonly settingsManager: SettingsManager;\n\tprivate rlmSpawnLedgerInstance?: RlmSpawnLedger;\n\tprivate idleEvictionTimer?: ReturnType<typeof setTimeout>;\n\tprivate idleEvictionSweep?: Promise<void>;\n\tprivate idleEvictionFence?: Promise<void>;\n\n\tconstructor(\n\t\tprivate readonly socketPath: string,\n\t\toptions: DaemonSupervisorOptions,\n\t) {\n\t\tthis.ready = new Promise<void>((resolveReady, rejectReady) => {\n\t\t\tthis.markReady = resolveReady;\n\t\t\tthis.rejectReady = rejectReady;\n\t\t});\n\t\tvoid this.ready.catch(() => undefined);\n\t\tconst agentDir = options.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tthis.descriptorDir = options.descriptorDir ?? defaultWorkerDescriptorDir(agentDir, socketPath);\n\t\tthis.supervisorConfigPath = join(this.descriptorDir, SUPERVISOR_CONFIG_FILE_NAME);\n\t\tthis.defaultSessionConfig = mergeAgentSessionRuntimeConfig(\n\t\t\toptions.defaultSessionConfig,\n\t\t\tthis.loadPersistedSupervisorConfig(),\n\t\t);\n\t\tthis.snapshotCacheRoot = join(this.descriptorDir, \"snapshot-cache\", this.generation);\n\t\tthis.catalog = new DaemonCatalogClient((message) => this.log(message));\n\t\tthis.settingsManager = SettingsManager.create(process.cwd(), this.defaultSessionConfig.agentDir ?? agentDir);\n\t}\n\n\tasync start(): Promise<void> {\n\t\ttry {\n\t\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\t\tif (!agentDir) {\n\t\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t\t}\n\t\t\tthis.socketLease = await acquireDaemonSocketPathLease(this.socketPath);\n\t\t\tawait waitForDaemonStartupFence(this.socketPath);\n\t\t\tthis.ownership = await acquireDaemonSupervisorOwnership({\n\t\t\t\tsocketPath: this.socketPath,\n\t\t\t\tdescriptorDir: this.descriptorDir,\n\t\t\t\tagentDir,\n\t\t\t\tgeneration: this.generation,\n\t\t\t\tappVersion: VERSION,\n\t\t\t});\n\t\t\tawait prepareDaemonSocketPath(this.socketPath, this.socketLease);\n\n\t\t\tmkdirSync(this.descriptorDir, { recursive: true, mode: 0o700 });\n\t\t\tchmodSync(this.descriptorDir, 0o700);\n\t\t\tthis.persistSupervisorConfig();\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t\tmkdirSync(this.snapshotCacheRoot, { recursive: true, mode: 0o700 });\n\t\t\tthis.commandJournal = new CommandRecoveryJournal(join(this.descriptorDir, \"command-journal.jsonl\"));\n\t\t\tthis.loadWorkerDescriptors();\n\t\t\tconst workersToAdopt = [...this.workers.values()];\n\n\t\t\tthis.server = createServer((socket) => this.handleConnection(socket));\n\t\t\tawait this.listen();\n\t\t\tthis.socketIdentity = getDaemonSocketIdentity(this.socketPath);\n\t\t\tif (process.platform !== \"win32\" && !this.socketIdentity) {\n\t\t\t\tthrow new Error(`Could not capture daemon socket identity: ${this.socketPath}`);\n\t\t\t}\n\t\t\tthis.ownsSocketPath = true;\n\t\t\trestrictDaemonSocketPath(this.socketPath);\n\n\t\t\tthis.registerSignalHandlers();\n\t\t\tconst ownedSessionFiles = new Set(\n\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t.flatMap((worker) => [worker.descriptor.sessionFile, worker.descriptor.createCommand.sessionPath])\n\t\t\t\t\t.filter((path): path is string => typeof path === \"string\")\n\t\t\t\t\t.map((path) => resolve(path)),\n\t\t\t);\n\t\t\tconst migratedJobs = migrateLegacyCronJobsToSessionArtifacts(getCronJobsPath(agentDir), {\n\t\t\t\tisSessionOwned: (job) => ownedSessionFiles.has(resolve(job.sessionFile)),\n\t\t\t});\n\t\t\tif (migratedJobs > 0) {\n\t\t\t\tthis.log(`Migrated ${migratedJobs} scheduled jobs into session artifacts`);\n\t\t\t}\n\t\t\tawait this.catalog.start().catch((error) => this.log(`Could not start daemon catalog: ${String(error)}`));\n\t\t\tlet adoptionFailure: unknown;\n\t\t\tlet adoptionFailed = false;\n\t\t\tawait Promise.all(\n\t\t\t\tworkersToAdopt.map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.adoptOrRecoverWorker(worker);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!adoptionFailed) {\n\t\t\t\t\t\t\tadoptionFailed = true;\n\t\t\t\t\t\t\tadoptionFailure = error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (adoptionFailed) {\n\t\t\t\tthrow adoptionFailure;\n\t\t\t}\n\t\t\tfor (const worker of this.workers.values()) {\n\t\t\t\tthis.scheduleOwnedWorkerCleanup(worker);\n\t\t\t}\n\t\t\tthis.scheduleIdleEvictionSweep();\n\t\t\tawait this.ownership.updatePhase(\"owner\");\n\t\t\tthis.log(`ASM Agent daemon supervisor ${this.generation} listening on ${this.socketPath}`);\n\t\t\tthis.markReady();\n\t\t} catch (error) {\n\t\t\tconst startupError = error instanceof Error ? error : new Error(String(error));\n\t\t\tthis.log(`Daemon supervisor startup failed: ${startupError.stack ?? startupError.message}`);\n\t\t\tawait this.cleanupSupervisorResources();\n\t\t\tthis.rejectReady(startupError);\n\t\t\tthrow startupError;\n\t\t}\n\t}\n\n\tprivate listen(): Promise<void> {\n\t\treturn new Promise<void>((resolveListen, rejectListen) => {\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tthis.server?.off(\"listening\", onListening);\n\t\t\t\trejectListen(error);\n\t\t\t};\n\t\t\tconst onListening = () => {\n\t\t\t\tthis.server?.off(\"error\", onError);\n\t\t\t\tresolveListen();\n\t\t\t};\n\t\t\tthis.server?.once(\"error\", onError);\n\t\t\tthis.server?.once(\"listening\", onListening);\n\t\t\tthis.server?.listen(this.socketPath);\n\t\t});\n\t}\n\n\tprivate log(message: string): void {\n\t\tconsole.error(message);\n\t\tstructuredLog.warn(message, { socketPath: this.socketPath });\n\t\tappendRotatingLog(getDaemonLogPath(this.socketPath), `[${new Date().toISOString()}] supervisor: ${message}`);\n\t}\n\n\tprivate clearIdleEvictionTimer(): void {\n\t\tif (!this.idleEvictionTimer) return;\n\t\tclearTimeout(this.idleEvictionTimer);\n\t\tthis.idleEvictionTimer = undefined;\n\t}\n\n\tprivate scheduleIdleEvictionSweep(): void {\n\t\tif (this.shuttingDown || this.idleEvictionTimer || this.idleEvictionSweep) return;\n\t\tconst delayMs = idleEvictionSweepIntervalMs(this.settingsManager.getIdleEvictionMinutes());\n\t\tthis.idleEvictionTimer = setTimeout(() => {\n\t\t\tthis.idleEvictionTimer = undefined;\n\t\t\tconst sweep = this.runIdleEvictionSweep()\n\t\t\t\t.catch((error) => this.log(`Idle eviction sweep failed: ${String(error)}`))\n\t\t\t\t.finally(() => {\n\t\t\t\t\tif (this.idleEvictionSweep === sweep) this.idleEvictionSweep = undefined;\n\t\t\t\t\tthis.scheduleIdleEvictionSweep();\n\t\t\t\t});\n\t\t\tthis.idleEvictionSweep = sweep;\n\t\t}, delayMs);\n\t\tthis.idleEvictionTimer.unref();\n\t}\n\n\tprivate workerEvictionSnapshot(worker: ResidentWorker): WorkerEvictionSnapshot {\n\t\treturn {\n\t\t\tlifecycle: worker.descriptor.lifecycle,\n\t\t\tisConnected: worker.client !== undefined,\n\t\t\tisStopping: this.isWorkerStopping(worker),\n\t\t\thasOwnerClient: worker.descriptor.ownerClientId !== undefined,\n\t\t\tisPreparingUpdateRestart:\n\t\t\t\tthis.updateRestartPhase !== undefined || worker.updateRestartPrepareClient !== undefined,\n\t\t\tsessions: [...worker.summaries.values()].map((summary) => {\n\t\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\t\treturn {\n\t\t\t\t\t// Use the canonical busy projection: a parent remains active for\n\t\t\t\t\t// residency purposes while any of its RLM descendants is running.\n\t\t\t\t\tisSessionActive: isSessionSummaryBusy(summary),\n\t\t\t\t\tattachedClients: [...this.clients].filter((client) =>\n\t\t\t\t\t\tclient.attachedActiveSessionIds.has(activeSessionId),\n\t\t\t\t\t).length,\n\t\t\t\t\thasRegisteredHeartbeat: summary.hasRegisteredHeartbeat === true,\n\t\t\t\t\thasRegisteredCronJob: summary.hasRegisteredCronJob === true,\n\t\t\t\t\tlastActivityAt: Date.parse(summary.lastActivityAt ?? \"\"),\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate async runIdleEvictionSweep(now = Date.now()): Promise<void> {\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined || this.idleEvictionFence) return;\n\t\tawait this.settingsManager.reload();\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\tconst idleEvictionMinutes = this.settingsManager.getIdleEvictionMinutes();\n\t\tif (idleEvictionMinutes === \"off\") return;\n\n\t\tconst refreshed = new Set<ResidentWorker>();\n\t\tawait Promise.all(\n\t\t\t[...this.workers.values()].map(async (worker) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\trefreshed.add(worker);\n\t\t\t\t} catch {\n\t\t\t\t\t// A disconnected or transitioning worker is never an eviction candidate.\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\tconst candidates = [...refreshed].filter((worker) =>\n\t\t\tcanEvictWorker(this.workerEvictionSnapshot(worker), idleEvictionMinutes, now),\n\t\t);\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t// Whole-tree candidates skip child work because stopWorker releases everything.\n\t\tawait Promise.all(\n\t\t\t[...refreshed]\n\t\t\t\t.filter((worker) => !candidates.includes(worker))\n\t\t\t\t.map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await worker.client?.requestWorker(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"worker_passivate_idle_children\",\n\t\t\t\t\t\t\t\tidleEvictionMinutes,\n\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\tlimit: CHILD_PASSIVATION_PER_WORKER_CAP,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t30_000,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (response && !response.success) throw new Error(response.error);\n\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\trefreshed.delete(worker);\n\t\t\t\t\t\tthis.log(`Child passivation sweep failed for worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t);\n\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\n\t\tlet releaseFence: () => void = () => {};\n\t\tconst fence = new Promise<void>((resolveFence) => {\n\t\t\treleaseFence = resolveFence;\n\t\t});\n\t\tthis.idleEvictionFence = fence;\n\t\ttry {\n\t\t\tawait this.mutationDrain.waitForDrain(\n\t\t\t\t0,\n\t\t\t\tAbortSignal.timeout(IDLE_EVICTION_DRAIN_TIMEOUT_MS),\n\t\t\t\t\"Timed out draining daemon mutations for idle eviction\",\n\t\t\t);\n\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\tawait Promise.all(\n\t\t\t\tcandidates.map((worker) => this.refreshWorkerSummaries(worker).catch(() => refreshed.delete(worker))),\n\t\t\t);\n\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\tconst evictable = candidates.filter(\n\t\t\t\t(worker) =>\n\t\t\t\t\trefreshed.has(worker) &&\n\t\t\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\t\t\tcanEvictWorker(this.workerEvictionSnapshot(worker), idleEvictionMinutes, now),\n\t\t\t);\n\t\t\t// Promise.all may reject and release the fence while sibling stops are still\n\t\t\t// finishing. That is safe: a racing mutation either reaches a live worker or\n\t\t\t// gets a clean disconnected/unknown-session error.\n\t\t\tawait Promise.all(\n\t\t\t\tevictable.map(async (worker) => {\n\t\t\t\t\tif (this.shuttingDown || this.updateRestartPhase !== undefined) return;\n\t\t\t\t\tconst snapshot = this.workerEvictionSnapshot(worker);\n\t\t\t\t\tconst idleMinutes = Math.floor(\n\t\t\t\t\t\tMath.min(...snapshot.sessions.map((session) => now - session.lastActivityAt)) / 60_000,\n\t\t\t\t\t);\n\t\t\t\t\tconst root = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\t\tawait this.stopWorker(worker, true);\n\t\t\t\t\tthis.log(\n\t\t\t\t\t\t`Evicted idle worker ${worker.descriptor.workerId} root=${root?.sessionId ?? worker.descriptor.rootSessionId ?? worker.descriptor.rootActiveSessionId} idleMinutes=${idleMinutes} sessions=${snapshot.sessions.length}`,\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t);\n\t\t} finally {\n\t\t\tif (this.idleEvictionFence === fence) this.idleEvictionFence = undefined;\n\t\t\treleaseFence();\n\t\t}\n\t}\n\n\tprivate async assertCurrentOwnership(): Promise<void> {\n\t\tconst ownership = this.ownership;\n\t\tif (!ownership) {\n\t\t\tconst error = new Error(\n\t\t\t\t`Daemon supervisor generation ${this.generation} holds no registry ownership (never acquired or already released); ` +\n\t\t\t\t\t`socket: ${this.socketPath}; restart the daemon to recover — sessions are preserved`,\n\t\t\t);\n\t\t\tObject.assign(error, { code: \"supervisor_generation_stale\" as const });\n\t\t\tthrow error;\n\t\t}\n\t\tawait ownership.assertCurrent();\n\t}\n\n\tprivate async assertRecoveryAllowed(): Promise<void> {\n\t\tawait this.assertCurrentOwnership();\n\t\tif (await isDaemonShutdownAdmissionActive()) {\n\t\t\tthrow new SupervisorRecoveryCancelledError(\"Daemon shutdown admission cancelled worker recovery\");\n\t\t}\n\t}\n\n\tprivate supervisorAuthenticationClaim(): {\n\t\tsupervisorGeneration: string;\n\t\tsupervisorPid: number;\n\t\tsupervisorProcessStartId?: string;\n\t\tsupervisorSocketPath: string;\n\t} {\n\t\tconst record = this.ownership?.record;\n\t\tif (!record) {\n\t\t\tthrow new SupervisorRecoveryCancelledError(\"Daemon supervisor ownership is unavailable\");\n\t\t}\n\t\treturn {\n\t\t\tsupervisorGeneration: this.generation,\n\t\t\tsupervisorPid: record.pid,\n\t\t\t...(record.processStartId ? { supervisorProcessStartId: record.processStartId } : {}),\n\t\t\tsupervisorSocketPath: record.socketPath,\n\t\t};\n\t}\n\n\tprivate loadWorkerDescriptors(): void {\n\t\tfor (const name of readdirSync(this.descriptorDir)) {\n\t\t\tif (name === SUPERVISOR_CONFIG_FILE_NAME || !name.endsWith(\".json\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst path = join(this.descriptorDir, name);\n\t\t\ttry {\n\t\t\t\tconst descriptor: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\t\t\tif (!isDaemonWorkerDescriptor(descriptor, this.socketPath)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdescriptor.supervisorSocketPath = normalizeSocketPath(descriptor.supervisorSocketPath);\n\t\t\t\tdescriptor.lifecycle = \"recovering\";\n\t\t\t\tdescriptor.recoveryJournalPath ??= join(this.descriptorDir, `${descriptor.workerId}.recovery.jsonl`);\n\t\t\t\tdescriptor.orphanProcessJournalPath ??= join(this.descriptorDir, `${descriptor.workerId}.orphans.jsonl`);\n\t\t\t\tconst durableDescriptor = durableDaemonWorkerDescriptor(descriptor);\n\t\t\t\tconst worker: ResidentWorker = {\n\t\t\t\t\tdescriptor: durableDescriptor,\n\t\t\t\t\tdescriptorPath: path,\n\t\t\t\t\tsummaries: new Map(),\n\t\t\t\t\tsnapshotCache: new Map(),\n\t\t\t\t\ttranscriptCaches: new Map(),\n\t\t\t\t\tsnapshotGenerations: new Map(),\n\t\t\t\t\tsnapshotLoads: new Map(),\n\t\t\t\t\tintentionalStop: durableDescriptor.stopRequestedAt !== undefined,\n\t\t\t\t\tstopRevision: 0,\n\t\t\t\t};\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tthis.workers.set(durableDescriptor.workerId, worker);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Ignoring invalid worker descriptor ${path}: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate loadPersistedSupervisorConfig(): AgentSessionRuntimeConfig | undefined {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(\n\t\t\t\treadFileSync(this.supervisorConfigPath, \"utf8\"),\n\t\t\t) as Partial<PersistedSupervisorConfig>;\n\t\t\tif (\n\t\t\t\tparsed.version !== 1 ||\n\t\t\t\ttypeof parsed.socketPath !== \"string\" ||\n\t\t\t\tnormalizeSocketPath(parsed.socketPath) !== this.socketPath ||\n\t\t\t\t!parsed.defaultSessionConfig ||\n\t\t\t\ttypeof parsed.defaultSessionConfig !== \"object\" ||\n\t\t\t\ttypeof parsed.defaultSessionConfig.agentDir !== \"string\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn durableAgentSessionRuntimeConfig(parsed.defaultSessionConfig);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate persistSupervisorConfig(): void {\n\t\tconst persisted: PersistedSupervisorConfig = {\n\t\t\tversion: 1,\n\t\t\tsocketPath: this.socketPath,\n\t\t\tdefaultSessionConfig: durableAgentSessionRuntimeConfig(this.defaultSessionConfig),\n\t\t};\n\t\tconst tempPath = `${this.supervisorConfigPath}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(persisted, null, 2)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, this.supervisorConfigPath);\n\t}\n\n\tprivate hasPersistedWorkerDescriptors(): boolean {\n\t\treturn readdirSync(this.descriptorDir).some(\n\t\t\t(name) => name !== SUPERVISOR_CONFIG_FILE_NAME && name.endsWith(\".json\"),\n\t\t);\n\t}\n\n\tprivate persistWorker(worker: ResidentWorker): void {\n\t\tworker.descriptor.updatedAt = new Date().toISOString();\n\t\tconst persisted = durableDaemonWorkerDescriptor(worker.descriptor);\n\t\tconst tempPath = `${worker.descriptorPath}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(persisted, null, 2)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, worker.descriptorPath);\n\t}\n\n\tprivate deleteWorkerDescriptor(worker: ResidentWorker): void {\n\t\ttry {\n\t\t\trmSync(worker.descriptorPath, { force: true });\n\t\t\trmSync(worker.descriptor.recoveryJournalPath, { force: true });\n\t\t\tif (worker.descriptor.orphanProcessJournalPath) {\n\t\t\t\trmSync(worker.descriptor.orphanProcessJournalPath, { force: true });\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.log(`Failed to remove worker descriptor ${worker.descriptorPath}: ${String(error)}`);\n\t\t}\n\t}\n\n\tprivate handleConnection(socket: Socket): void {\n\t\tconst client: DaemonSocketClient = {\n\t\t\tid: createActiveSessionId(),\n\t\t\tsocket,\n\t\t\tattachedActiveSessionIds: new Set(),\n\t\t\tcatchupActiveSessionIds: new Set(),\n\t\t\tbackpressured: false,\n\t\t\tauthenticated: true,\n\t\t\tsnapshotActiveSessionIds: new Set(),\n\t\t\tdetachInput: () => {},\n\t\t\tsupportsExtensionUi: false,\n\t\t\tcapabilities: new Set(DAEMON_DEFAULT_CLIENT_CAPABILITIES),\n\t\t};\n\t\tthis.connectionIds.set(client, client.id);\n\t\tthis.sessionInputPauseEpochs.set(client, 0);\n\t\tthis.detachingInputPauseSessions.set(client, new Set());\n\t\tthis.clients.add(client);\n\t\tvoid this.ready.then(\n\t\t\t() => {\n\t\t\t\tif (!client.socket.destroyed && this.clients.has(client)) {\n\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\ttype: \"daemon_hello\",\n\t\t\t\t\t\tsocketPath: this.socketPath,\n\t\t\t\t\t\tprotocol: DAEMON_PROTOCOL_INFO,\n\t\t\t\t\t\tschemaId: DAEMON_SCHEMA_ID,\n\t\t\t\t\t\tschemaRevision: DAEMON_SCHEMA_REVISION,\n\t\t\t\t\t\tappVersion: VERSION,\n\t\t\t\t\t\truntime: getDaemonRuntimeIdentity(),\n\t\t\t\t\t\tsupervisorGeneration: this.generation,\n\t\t\t\t\t\tsupervisorOwnerToken: this.ownership?.record.token,\n\t\t\t\t\t\tsupervisorPid: process.pid,\n\t\t\t\t\t\tsupervisorProcessStartId: this.ownership?.record.processStartId,\n\t\t\t\t\t\tsupervisorSocketPath: this.ownership?.record.socketPath,\n\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\tserverCapabilities: DAEMON_DEFAULT_SERVER_CAPABILITIES,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => client.socket.destroy(),\n\t\t);\n\n\t\tclient.detachInput = attachJsonlLineReader(socket, (line) => void this.handleLine(client, line));\n\t\tlet cleaned = false;\n\t\tconst cleanup = () => {\n\t\t\tif (cleaned) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleaned = true;\n\t\t\tclient.detachInput();\n\t\t\tthis.sessionInputPauseEpochs.set(client, (this.sessionInputPauseEpochs.get(client) ?? 0) + 1);\n\t\t\tconst ownerClientId = this.protocolClientId(client);\n\t\t\tvoid this.releaseClientSessionInputPauses(client, undefined, true).catch((error: unknown) =>\n\t\t\t\tthis.log(`Failed to release input pauses for disconnected client ${ownerClientId}: ${String(error)}`),\n\t\t\t);\n\t\t\tthis.clients.delete(client);\n\t\t\tthis.cancelWaitingPromptAdmissionsForClient(client);\n\t\t\tfor (const activeSessionId of [...client.attachedActiveSessionIds]) {\n\t\t\t\tclient.attachedActiveSessionIds.delete(activeSessionId);\n\t\t\t\tvoid this.syncWorkerExtensionUi(activeSessionId);\n\t\t\t}\n\t\t\tthis.scheduleOwnedWorkerCleanupForClient(this.protocolClientId(client));\n\t\t};\n\t\tsocket.on(\"close\", cleanup);\n\t\tsocket.on(\"error\", cleanup);\n\t\tsocket.on(\"drain\", () => {\n\t\t\tclient.backpressured = false;\n\t\t\tif (!client.snapshotStreaming) {\n\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate cancelOwnedWorkerCleanup(clientId: string): void {\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.descriptor.ownerClientId !== clientId || !worker.ownerCleanupTimer) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t}\n\n\tprivate protocolClientId(client: DaemonSocketClient): string {\n\t\treturn this.protocolClientIds.get(client) ?? client.id;\n\t}\n\n\tprivate async releaseClientSessionInputPauses(\n\t\towner: DaemonSocketClient,\n\t\tactiveSessionId?: string,\n\t\tforceCleanupOnFailure = false,\n\t): Promise<void> {\n\t\tconst entries = [...this.sessionInputPauses.values()].filter(\n\t\t\t(entry) =>\n\t\t\t\tentry.owner === owner &&\n\t\t\t\t(activeSessionId === undefined ||\n\t\t\t\t\tentry.activeSessionId === activeSessionId ||\n\t\t\t\t\tentry.requestedActiveSessionId === activeSessionId),\n\t\t);\n\t\tawait Promise.all(\n\t\t\tentries.map(async (entry) => {\n\t\t\t\tif (this.workers.get(entry.worker.descriptor.workerId) !== entry.worker || !entry.worker.client) {\n\t\t\t\t\tif (this.sessionInputPauses.get(entry.pauseId) === entry) this.sessionInputPauses.delete(entry.pauseId);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await this.forwardToWorker(\n\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: randomUUID(),\n\t\t\t\t\t\t\ttype: \"release_session_input_pause\",\n\t\t\t\t\t\t\tactiveSessionId: entry.activeSessionId,\n\t\t\t\t\t\t\tpauseId: entry.pauseId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tINPUT_PAUSE_CLEANUP_TIMEOUT_MS,\n\t\t\t\t\t);\n\t\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\t\tif (this.sessionInputPauses.get(entry.pauseId) === entry) this.sessionInputPauses.delete(entry.pauseId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (forceCleanupOnFailure) {\n\t\t\t\t\t\tconst workerClient = entry.worker.client;\n\t\t\t\t\t\tif (workerClient) {\n\t\t\t\t\t\t\tworkerClient.close();\n\t\t\t\t\t\t\tawait this.handleWorkerClose(\n\t\t\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t\t\tworkerClient,\n\t\t\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.invalidateWorkerSessionInputPauses(\n\t\t\t\t\t\t\t\tentry.worker,\n\t\t\t\t\t\t\t\t\"Session worker became unavailable while releasing an input pause\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate invalidateWorkerSessionInputPauses(worker: ResidentWorker, reason: string): void {\n\t\tconst owners = new Set<DaemonSocketClient>();\n\t\tfor (const [pauseId, entry] of this.sessionInputPauses) {\n\t\t\tif (entry.worker !== worker) continue;\n\t\t\tthis.sessionInputPauses.delete(pauseId);\n\t\t\towners.add(entry.owner);\n\t\t}\n\t\tfor (const owner of owners) {\n\t\t\towner.socket.destroy(new Error(reason));\n\t\t}\n\t}\n\n\tprivate scheduleOwnedWorkerCleanupForClient(clientId: string): void {\n\t\tif ([...this.clients].some((client) => this.protocolClientId(client) === clientId)) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.descriptor.ownerClientId === clientId) {\n\t\t\t\tthis.scheduleOwnedWorkerCleanup(worker);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleOwnedWorkerCleanup(worker: ResidentWorker): void {\n\t\tconst ownerClientId = worker.descriptor.ownerClientId;\n\t\tif (\n\t\t\t!ownerClientId ||\n\t\t\tworker.ownerCleanupTimer ||\n\t\t\t[...this.clients].some((client) => this.protocolClientId(client) === ownerClientId)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tworker.ownerCleanupTimer = setTimeout(() => {\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t\tif (\n\t\t\t\tworker.descriptor.ownerClientId !== ownerClientId ||\n\t\t\t\t[...this.clients].some((client) => this.protocolClientId(client) === ownerClientId) ||\n\t\t\t\tthis.workers.get(worker.descriptor.workerId) !== worker\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid this.stopWorker(worker, true).catch((error) =>\n\t\t\t\tthis.log(`Could not clean up client-owned worker ${worker.descriptor.workerId}: ${String(error)}`),\n\t\t\t);\n\t\t}, OWNED_WORKER_DISCONNECT_GRACE_MS);\n\t\tworker.ownerCleanupTimer.unref();\n\t}\n\n\tprivate promptAdmissionKey(activeSessionId: string, publicAdmissionId: string): string {\n\t\treturn `${activeSessionId}\\0${publicAdmissionId}`;\n\t}\n\n\tprivate promptAdmissionsFor(client: DaemonSocketClient): Map<string, SupervisorPromptAdmission> {\n\t\tlet admissions = this.promptAdmissions.get(client);\n\t\tif (!admissions) {\n\t\t\tadmissions = new Map();\n\t\t\tthis.promptAdmissions.set(client, admissions);\n\t\t}\n\t\treturn admissions;\n\t}\n\n\tprivate getPromptAdmission(\n\t\tclient: DaemonSocketClient,\n\t\tactiveSessionId: string,\n\t\tpublicAdmissionId: string,\n\t): SupervisorPromptAdmission | undefined {\n\t\treturn this.promptAdmissions.get(client)?.get(this.promptAdmissionKey(activeSessionId, publicAdmissionId));\n\t}\n\n\tprivate deletePromptAdmission(admission: SupervisorPromptAdmission): void {\n\t\tconst admissions = this.promptAdmissions.get(admission.client);\n\t\tconst key = this.promptAdmissionKey(admission.activeSessionId, admission.publicAdmissionId);\n\t\tif (admissions?.get(key) !== admission) return;\n\t\tadmissions.delete(key);\n\t\tif (admissions.size === 0) this.promptAdmissions.delete(admission.client);\n\t}\n\n\tprivate cancelWaitingPromptAdmissionsForClient(client: DaemonSocketClient): void {\n\t\tfor (const admission of this.promptAdmissions.get(client)?.values() ?? []) {\n\t\t\tif (admission.status !== \"waiting\") continue;\n\t\t\tif (!admission.worker || !admission.workerActiveSessionId) {\n\t\t\t\tadmission.status = \"cancelled\";\n\t\t\t\tadmission.controller.abort();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst worker = admission.worker;\n\t\t\tconst workerActiveSessionId = admission.workerActiveSessionId;\n\t\t\tvoid this.forwardToWorker(worker, {\n\t\t\t\ttype: \"cancel_prompt_admission\",\n\t\t\t\tactiveSessionId: workerActiveSessionId,\n\t\t\t\tadmissionId: admission.workerAdmissionId,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tif (admission.status !== \"waiting\") return;\n\t\t\t\t\tconst status =\n\t\t\t\t\t\tresponse.success && response.data && typeof response.data === \"object\" && \"status\" in response.data\n\t\t\t\t\t\t\t? (response.data as { status?: unknown }).status\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (status === \"owned\") admission.status = \"owned\";\n\t\t\t\t\telse if (status === \"cancelled\") admission.status = \"cancelled\";\n\t\t\t\t})\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\tthis.log(\n\t\t\t\t\t\t`Could not cancel prompt admission ${admission.workerAdmissionId} on disconnected client: ${String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Non-async by design: prompt registration completes before handleLine's first await. */\n\tprivate parseCommandAndRegisterPromptAdmission(\n\t\tclient: DaemonSocketClient,\n\t\tline: string,\n\t): {\n\t\tcommand: DaemonCommand;\n\t\tenvelopeClientId?: string;\n\t\tprotocolVersion: number;\n\t\tadmission?: SupervisorPromptAdmission;\n\t} {\n\t\tconst parsed = JSON.parse(line) as unknown;\n\t\tconst envelope = isDaemonCommandEnvelope(parsed) ? parsed : undefined;\n\t\tif (!envelope) {\n\t\t\tthrow new Error(`Daemon commands require protocol ${DAEMON_COMMAND_ENVELOPE_MIN_PROTOCOL_VERSION} or newer`);\n\t\t}\n\t\tconst command = { ...envelope.command, id: envelope.id } as DaemonCommand;\n\t\tlet admission: SupervisorPromptAdmission | undefined;\n\t\tif ((command.type === \"prompt\" || command.type === \"prompt_and_wait\") && command.admissionId !== undefined) {\n\t\t\tif (typeof command.activeSessionId !== \"string\" || typeof command.admissionId !== \"string\") {\n\t\t\t\tthrow new Error(\"Prompt admission requires string activeSessionId and admissionId\");\n\t\t\t}\n\t\t\tif (command.admissionId === \"\") throw new Error(\"admissionId must not be empty\");\n\t\t\tconst admissions = this.promptAdmissionsFor(client);\n\t\t\tconst key = this.promptAdmissionKey(command.activeSessionId, command.admissionId);\n\t\t\tif (admissions.has(key)) {\n\t\t\t\tthrow new Error(`Prompt admission id is already in use: ${command.admissionId}`);\n\t\t\t}\n\t\t\tadmission = {\n\t\t\t\tclient,\n\t\t\t\tactiveSessionId: command.activeSessionId,\n\t\t\t\tpublicAdmissionId: command.admissionId,\n\t\t\t\tworkerAdmissionId: `supervisor-admission:${randomUUID()}`,\n\t\t\t\tstatus: \"waiting\",\n\t\t\t\tcontroller: new AbortController(),\n\t\t\t};\n\t\t\tadmissions.set(key, admission);\n\t\t}\n\t\treturn {\n\t\t\tcommand,\n\t\t\tenvelopeClientId: envelope.clientId ?? client.id,\n\t\t\tprotocolVersion: envelope.protocol.version,\n\t\t\tadmission,\n\t\t};\n\t}\n\n\tprivate async handleLine(client: DaemonSocketClient, line: string): Promise<void> {\n\t\tlet preParsed: ReturnType<DaemonSupervisor[\"parseCommandAndRegisterPromptAdmission\"]>;\n\t\ttry {\n\t\t\tpreParsed = this.parseCommandAndRegisterPromptAdmission(client, line);\n\t\t} catch (error) {\n\t\t\tthis.write(client, failure(salvageDaemonCommandId(line), \"parse\", error));\n\t\t\treturn;\n\t\t}\n\t\tconst command = preParsed.command;\n\t\tconst parsedAdmission = preParsed.admission;\n\t\tif (command.type === \"cancel_prompt_admission\" && this.updateRestartPhase !== undefined) {\n\t\t\tthis.write(client, failure(command.id, command.type, \"Daemon is preparing an update restart\"));\n\t\t\treturn;\n\t\t}\n\t\tconst cancellationAdmission =\n\t\t\tcommand.type === \"cancel_prompt_admission\"\n\t\t\t\t? this.getPromptAdmission(client, command.activeSessionId, command.admissionId)\n\t\t\t\t: undefined;\n\t\tif (cancellationAdmission?.status === \"waiting\" && !cancellationAdmission.worker) {\n\t\t\tcancellationAdmission.status = \"cancelled\";\n\t\t\tcancellationAdmission.controller.abort();\n\t\t}\n\t\ttry {\n\t\t\tawait waitForPromptAdmission(this.ready, parsedAdmission?.controller.signal);\n\t\t} catch (error) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, error));\n\t\t\treturn;\n\t\t}\n\t\tconst envelopeClientId = preParsed.envelopeClientId;\n\t\tif (envelopeClientId) {\n\t\t\tthis.protocolClientIds.set(client, envelopeClientId);\n\t\t\tclient.id = envelopeClientId;\n\t\t}\n\t\tthis.cancelOwnedWorkerCleanup(client.id);\n\t\tif (!DAEMON_COMMAND_TYPES.has(command.type)) {\n\t\t\tthis.write(client, failure(command.id, command.type, `Unknown daemon command: ${command.type}`));\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tcommand.type === \"get_session_tree\" &&\n\t\t\tpreParsed.protocolVersion < DAEMON_COMMAND_COMPATIBILITY.get_session_tree.minProtocol\n\t\t) {\n\t\t\tthis.write(\n\t\t\t\tclient,\n\t\t\t\tfailure(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\t`get_session_tree requires client protocol ${DAEMON_COMMAND_COMPATIBILITY.get_session_tree.minProtocol} or newer`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait waitForPromptAdmission(this.assertCurrentOwnership(), parsedAdmission?.controller.signal);\n\t\t} catch (error) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, error));\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutation = isDaemonMutatingCommand(command);\n\t\tconst journalIdentity =\n\t\t\tenvelopeClientId && command.id && mutation ? { clientId: envelopeClientId, commandId: command.id } : undefined;\n\t\tconst existing = journalIdentity\n\t\t\t? this.commandJournal.lookup(journalIdentity.clientId, journalIdentity.commandId)\n\t\t\t: undefined;\n\t\tif (existing?.status === \"complete\") {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, existing.response);\n\t\t\treturn;\n\t\t}\n\t\tif (existing?.status === \"pending\" && journalIdentity) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(\n\t\t\t\tclient,\n\t\t\t\tfailure(command.id, command.type, \"The previous command result is uncertain and was not replayed\", {\n\t\t\t\t\tcode: \"command_result_uncertain\",\n\t\t\t\t\t...journalIdentity,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst phase = this.updateRestartPhase;\n\t\tconst restartRejected =\n\t\t\tphase === \"draining\"\n\t\t\t\t? !UPDATE_RESTART_DRAIN_COMMANDS.has(command.type)\n\t\t\t\t: phase !== undefined && !(phase === \"prepared\" && command.type === \"shutdown\");\n\t\tif (restartRejected && mutation) {\n\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\tthis.write(client, failure(command.id, command.type, \"Daemon is preparing an update restart\"));\n\t\t\treturn;\n\t\t}\n\t\tif (journalIdentity) {\n\t\t\tconst admitted = this.commandJournal.begin(journalIdentity.clientId, journalIdentity.commandId, command.type);\n\t\t\tif (admitted.status === \"complete\") {\n\t\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\t\tthis.write(client, admitted.response);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (admitted.status === \"pending\") {\n\t\t\t\tif (parsedAdmission) this.deletePromptAdmission(parsedAdmission);\n\t\t\t\tthis.write(\n\t\t\t\t\tclient,\n\t\t\t\t\tfailure(command.id, command.type, \"The previous command result is uncertain and was not replayed\", {\n\t\t\t\t\t\tcode: \"command_result_uncertain\",\n\t\t\t\t\t\t...journalIdentity,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (mutation && !UPDATE_RESTART_DRAIN_COMMANDS.has(command.type)) {\n\t\t\tconst idleEvictionFence = this.idleEvictionFence;\n\t\t\tif (idleEvictionFence) await idleEvictionFence;\n\t\t}\n\t\t// Attach is intentionally read-only and is not fence-gated. If eviction wins\n\t\t// the race, attach fails cleanly with \"Session worker is not connected\" and\n\t\t// the client retries through the saved-session path instead of mutating state.\n\t\tif (mutation) this.mutationDrain.begin();\n\t\ttry {\n\t\t\tconst response = await this.handleCommand(client, command, cancellationAdmission);\n\t\t\tif (response) {\n\t\t\t\tif (journalIdentity) {\n\t\t\t\t\tawait this.assertCurrentOwnership();\n\t\t\t\t\tthis.commandJournal.recordResult(journalIdentity.clientId, journalIdentity.commandId, response);\n\t\t\t\t}\n\t\t\t\tthis.write(client, response);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.log(`Supervisor command ${command.type} failed: ${error instanceof Error ? error.stack : String(error)}`);\n\t\t\tlet response = failure(command.id, command.type, error, serializeDaemonError(error));\n\t\t\tif (journalIdentity && !isSupervisorGenerationStale(error)) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.assertCurrentOwnership();\n\t\t\t\t\tthis.commandJournal.recordResult(journalIdentity.clientId, journalIdentity.commandId, response);\n\t\t\t\t} catch (ownershipError) {\n\t\t\t\t\tresponse = failure(command.id, command.type, ownershipError, serializeDaemonError(ownershipError));\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.write(client, response);\n\t\t} finally {\n\t\t\tif (mutation) this.mutationDrain.end();\n\t\t}\n\t}\n\n\tprivate async handleCommand(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: DaemonCommand,\n\t\tcancellationAdmission?: SupervisorPromptAdmission,\n\t): Promise<DaemonResponse | undefined> {\n\t\tswitch (command.type) {\n\t\t\tcase \"cancel_prompt_admission\": {\n\t\t\t\tconst admission =\n\t\t\t\t\tcancellationAdmission ?? this.getPromptAdmission(client, command.activeSessionId, command.admissionId);\n\t\t\t\tif (!admission) return success(command.id, command.type, { status: \"unknown\" as const });\n\t\t\t\tif (admission.status === \"owned\") return success(command.id, command.type, { status: \"owned\" as const });\n\t\t\t\t// A definitive cancellation never downgrades to unknown/waiting.\n\t\t\t\tif (admission.status === \"cancelled\") {\n\t\t\t\t\treturn success(command.id, command.type, { status: \"cancelled\" as const });\n\t\t\t\t}\n\t\t\t\tif (!admission.worker || !admission.workerActiveSessionId) {\n\t\t\t\t\tadmission.status = \"cancelled\";\n\t\t\t\t\tadmission.controller.abort();\n\t\t\t\t\treturn success(command.id, command.type, { status: \"cancelled\" as const });\n\t\t\t\t}\n\t\t\t\tconst response = await this.forwardToWorker(admission.worker, {\n\t\t\t\t\t...command,\n\t\t\t\t\tactiveSessionId: admission.workerActiveSessionId,\n\t\t\t\t\tadmissionId: admission.workerAdmissionId,\n\t\t\t\t});\n\t\t\t\tconst status =\n\t\t\t\t\tresponse.success && response.data && typeof response.data === \"object\" && \"status\" in response.data\n\t\t\t\t\t\t? (response.data as { status: \"cancelled\" | \"owned\" | \"unknown\" }).status\n\t\t\t\t\t\t: \"unknown\";\n\t\t\t\t// Re-read: a socket close may have cancelled during the round-trip (cast widens TS's pre-await narrowing).\n\t\t\t\tconst current = (admission as SupervisorPromptAdmission).status;\n\t\t\t\tif (status === \"owned\") admission.status = \"owned\";\n\t\t\t\telse if (status === \"cancelled\") admission.status = \"cancelled\";\n\t\t\t\telse if (current !== \"cancelled\") admission.status = \"waiting\";\n\t\t\t\treturn { ...response, id: command.id };\n\t\t\t}\n\t\t\tcase \"ack_result\":\n\t\t\t\tthis.commandJournal.acknowledge(client.id, command.commandId);\n\t\t\t\treturn undefined;\n\t\t\tcase \"list\":\n\t\t\t\treturn this.handleList(client, command);\n\t\t\tcase \"list_agent_peers\": {\n\t\t\t\tconst requester = [...this.workers.values()].find(\n\t\t\t\t\t(worker) => worker.descriptor.authenticationToken === command.workerToken,\n\t\t\t\t);\n\t\t\t\tif (!requester) throw new Error(\"Worker authentication failed\");\n\t\t\t\tconst peers = [...this.workers.values()]\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(worker) =>\n\t\t\t\t\t\t\tworker !== requester &&\n\t\t\t\t\t\t\tthis.isLiveWorker(worker) &&\n\t\t\t\t\t\t\tworker.descriptor.lifecycle === \"ready\" &&\n\t\t\t\t\t\t\tworker.client !== undefined,\n\t\t\t\t\t)\n\t\t\t\t\t.flatMap((worker) => {\n\t\t\t\t\t\tconst root = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\t\t\treturn root ? [this.agentPeerSummary(root)] : [];\n\t\t\t\t\t});\n\t\t\t\treturn success(command.id, command.type, { peers });\n\t\t\t}\n\t\t\tcase \"list_saved_sessions\":\n\t\t\t\treturn this.handleSavedSessionList(client, command);\n\t\t\tcase \"create\": {\n\t\t\t\tconst worker = await this.createOrReuseWorker(this.protocolClientId(client), command);\n\t\t\t\tconst requestedSummary = command.sessionPath\n\t\t\t\t\t? this.findSummaryInWorker(worker, command.sessionPath)\n\t\t\t\t\t: undefined;\n\t\t\t\tif (\n\t\t\t\t\trequestedSummary &&\n\t\t\t\t\t(requestedSummary.activeSessionId ?? requestedSummary.id) !== worker.descriptor.rootActiveSessionId\n\t\t\t\t) {\n\t\t\t\t\t// A create forwarded to a recovering worker still surfaces an opaque lifecycle error.\n\t\t\t\t\tconst response = await this.forwardToWorker(worker, withoutSupervisorCreateFields(command));\n\t\t\t\t\tif (response.success && isSessionSummary(response.data)) {\n\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\t\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t\t\t\t}\n\t\t\t\t\treturn responseWithId(response, command.id);\n\t\t\t\t}\n\t\t\t\tconst summary = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\tif (!summary) {\n\t\t\t\t\tthrow new Error(\"Session worker started without a root session\");\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"create\", this.publicSummary(worker, summary));\n\t\t\t}\n\t\t\tcase \"attach\": {\n\t\t\t\tconst attached = await this.attachClient(client, command);\n\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\tconst transcript = attached.transcript;\n\t\t\t\t\tif (!transcript) {\n\t\t\t\t\t\tthrow new Error(\"Session worker did not provide a snapshot transcript\");\n\t\t\t\t\t}\n\t\t\t\t\tconst streamedResult = this.createStreamedAttachResult(attached.result, transcript);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.write(client, success(command.id, \"attach\", streamedResult));\n\t\t\t\t\t\tvoid this.streamSnapshot(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\t\tstreamedResult,\n\t\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\t\t\"attach\",\n\t\t\t\t\t\t\tattached.releaseTranscript,\n\t\t\t\t\t\t).catch((error) =>\n\t\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\t`Failed to stream attach snapshot for ${streamedResult.activeSessionId}: ${String(error)}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tattached.releaseTranscript?.();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"attach\", attached.result);\n\t\t\t}\n\t\t\tcase \"reattach\": {\n\t\t\t\tconst target = await this.findWorkerForClient(client, command.targetActiveSessionId);\n\t\t\t\tconst targetActiveSessionId = target.summary.activeSessionId ?? target.summary.id;\n\t\t\t\tif (targetActiveSessionId === command.activeSessionId) {\n\t\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\t\t\tdetachingSessions?.delete(command.targetActiveSessionId);\n\t\t\t\t\tdetachingSessions?.delete(targetActiveSessionId);\n\t\t\t\t\treturn success(command.id, command.type, { cancelled: false });\n\t\t\t\t}\n\t\t\t\tconst targetWasAttached = client.attachedActiveSessionIds.has(targetActiveSessionId);\n\t\t\t\tconst releaseSnapshotReservation = this.reserveSnapshotStream(client, targetActiveSessionId);\n\t\t\t\tlet releaseTranscript: (() => void) | undefined;\n\t\t\t\tclient.attachedActiveSessionIds.add(targetActiveSessionId);\n\t\t\t\ttry {\n\t\t\t\t\tconst attached = await this.attachClient(client, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\t\tactiveSessionId: targetActiveSessionId,\n\t\t\t\t\t});\n\t\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\t\t\tdetachingSessions?.delete(command.targetActiveSessionId);\n\t\t\t\t\tdetachingSessions?.delete(targetActiveSessionId);\n\t\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\t\tconst transcript =\n\t\t\t\t\t\t\tattached.transcript ?? this.getOrCreateTranscriptCache(attached.worker, attached.result);\n\t\t\t\t\t\treleaseTranscript = attached.releaseTranscript;\n\t\t\t\t\t\tconst streamedResult = this.createStreamedAttachResult(attached.result, transcript);\n\t\t\t\t\t\tthis.write(client, success(command.id, command.type, streamedResult));\n\t\t\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\t\t\tconst streaming = this.streamSnapshot(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\t\tstreamedResult,\n\t\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\t\t\"replacement\",\n\t\t\t\t\t\t\treleaseTranscript,\n\t\t\t\t\t\t\treleaseSnapshotReservation,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treleaseTranscript = undefined;\n\t\t\t\t\t\tvoid streaming.catch((error) =>\n\t\t\t\t\t\t\tthis.log(`Failed to stream reattach snapshot for ${targetActiveSessionId}: ${String(error)}`),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.write(client, success(command.id, command.type, attached.result));\n\t\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\t\treleaseSnapshotReservation();\n\t\t\t\t\treturn undefined;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treleaseTranscript?.();\n\t\t\t\t\tif (!targetWasAttached) {\n\t\t\t\t\t\tthis.detachClient(client, targetActiveSessionId);\n\t\t\t\t\t}\n\t\t\t\t\treleaseSnapshotReservation();\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase \"acquire_session_input_pause\": {\n\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions.get(client);\n\t\t\t\tif (detachingSessions?.has(command.activeSessionId)) {\n\t\t\t\t\tthrow new Error(`Session is detaching: ${command.activeSessionId}`);\n\t\t\t\t}\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst activeSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t\t\tif (detachingSessions?.has(command.activeSessionId) || detachingSessions?.has(activeSessionId)) {\n\t\t\t\t\tthrow new Error(`Session is detaching: ${command.activeSessionId}`);\n\t\t\t\t}\n\t\t\t\tconst ownerClientId = this.protocolClientId(client);\n\t\t\t\tconst connectionId = this.connectionIds.get(client);\n\t\t\t\tif (!connectionId) throw new Error(\"Daemon client connection identity is unavailable\");\n\t\t\t\tconst acquisitionEpoch = this.sessionInputPauseEpochs.get(client) ?? 0;\n\t\t\t\tconst existing = [...this.sessionInputPauses.values()].find(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\tentry.owner === client &&\n\t\t\t\t\t\tentry.worker === match.worker &&\n\t\t\t\t\t\tentry.activeSessionId === activeSessionId &&\n\t\t\t\t\t\tentry.leaseKey === command.leaseKey &&\n\t\t\t\t\t\t!entry.releaseTask,\n\t\t\t\t);\n\t\t\t\tif (existing) {\n\t\t\t\t\treturn success(command.id, command.type, { pauseId: existing.pauseId });\n\t\t\t\t}\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, {\n\t\t\t\t\t...command,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tleaseKey: JSON.stringify([connectionId, ownerClientId, command.leaseKey]),\n\t\t\t\t});\n\t\t\t\tif (!response.success) return response;\n\t\t\t\tconst pauseId = (response.data as { pauseId?: unknown } | undefined)?.pauseId;\n\t\t\t\tif (typeof pauseId !== \"string\") throw new Error(\"Worker returned an invalid session input pause id\");\n\t\t\t\tif (!this.clients.has(client) || (this.sessionInputPauseEpochs.get(client) ?? 0) !== acquisitionEpoch) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst release = await this.forwardToWorker(match.worker, {\n\t\t\t\t\t\t\tid: randomUUID(),\n\t\t\t\t\t\t\ttype: \"release_session_input_pause\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tpauseId,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!release.success) throw new Error(release.error);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmatch.worker.client?.close();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(\"Session input pause acquisition was invalidated before completion\");\n\t\t\t\t}\n\t\t\t\tthis.sessionInputPauses.set(pauseId, {\n\t\t\t\t\towner: client,\n\t\t\t\t\tworker: match.worker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\trequestedActiveSessionId: command.activeSessionId,\n\t\t\t\t\tleaseKey: command.leaseKey,\n\t\t\t\t\tpauseId,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"release_session_input_pause\": {\n\t\t\t\tconst entry = this.sessionInputPauses.get(command.pauseId);\n\t\t\t\tif (!entry) return success(command.id, command.type);\n\t\t\t\tif (entry.owner !== client) {\n\t\t\t\t\tthrow new Error(`Session input pause is owned by another client: ${command.pauseId}`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcommand.activeSessionId !== entry.activeSessionId &&\n\t\t\t\t\tcommand.activeSessionId !== entry.requestedActiveSessionId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(`Session input pause belongs to another session: ${command.pauseId}`);\n\t\t\t\t}\n\t\t\t\tconst releaseTask =\n\t\t\t\t\tentry.releaseTask ??\n\t\t\t\t\tthis.forwardToWorker(entry.worker, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\tactiveSessionId: entry.activeSessionId,\n\t\t\t\t\t});\n\t\t\t\tentry.releaseTask = releaseTask;\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await releaseTask;\n\t\t\t\t\tif (response.success && this.sessionInputPauses.get(command.pauseId) === entry) {\n\t\t\t\t\t\tthis.sessionInputPauses.delete(command.pauseId);\n\t\t\t\t\t}\n\t\t\t\t\treturn response;\n\t\t\t\t} finally {\n\t\t\t\t\tif (this.sessionInputPauses.get(command.pauseId) === entry && entry.releaseTask === releaseTask) {\n\t\t\t\t\t\tentry.releaseTask = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase \"detach\": {\n\t\t\t\tconst detachingSessions = this.detachingInputPauseSessions.get(client) ?? new Set<string>();\n\t\t\t\tthis.detachingInputPauseSessions.set(client, detachingSessions);\n\t\t\t\tif (command.activeSessionId) detachingSessions.add(command.activeSessionId);\n\t\t\t\telse for (const activeSessionId of client.attachedActiveSessionIds) detachingSessions.add(activeSessionId);\n\t\t\t\tthis.sessionInputPauseEpochs.set(client, (this.sessionInputPauseEpochs.get(client) ?? 0) + 1);\n\t\t\t\tthis.detachClient(client, command.activeSessionId);\n\t\t\t\tawait this.releaseClientSessionInputPauses(client, command.activeSessionId, true);\n\t\t\t\treturn success(command.id, \"detach\");\n\t\t\t}\n\t\t\tcase \"complete_owned_session\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tif (match.worker.descriptor.ownerClientId !== this.protocolClientId(client)) {\n\t\t\t\t\tthrow new Error(\"Session is not owned by this client\");\n\t\t\t\t}\n\t\t\t\tif (match.worker.ownerCleanupTimer) {\n\t\t\t\t\tclearTimeout(match.worker.ownerCleanupTimer);\n\t\t\t\t\tmatch.worker.ownerCleanupTimer = undefined;\n\t\t\t\t}\n\t\t\t\tawait this.stopWorker(match.worker, true);\n\t\t\t\treturn success(command.id, command.type);\n\t\t\t}\n\t\t\tcase \"promote_owned_session\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\treturn success(command.id, command.type, this.publicSummary(match.worker, match.summary));\n\t\t\t}\n\t\t\tcase \"retry_worker\": {\n\t\t\t\tconst direct = [...this.workers.values()].find(\n\t\t\t\t\t(worker) =>\n\t\t\t\t\t\tworker.descriptor.rootActiveSessionId === command.activeSessionId ||\n\t\t\t\t\t\tworker.descriptor.rootSessionId === command.activeSessionId,\n\t\t\t\t);\n\t\t\t\tconst worker = direct ?? (await this.findWorkerForClient(client, command.activeSessionId)).worker;\n\t\t\t\tthis.assertWorkerAccessibleToClient(client, worker, command.activeSessionId);\n\t\t\t\tif ((this.workerStopCounts?.get(worker) ?? 0) > 0) {\n\t\t\t\t\tthrow new Error(\"Session worker is stopping; retry after it finishes\");\n\t\t\t\t}\n\t\t\t\tworker.intentionalStop = false;\n\t\t\t\tworker.descriptor.stopRequestedAt = undefined;\n\t\t\t\tworker.descriptor.archiveOnStop = undefined;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tawait this.recoverWorker(worker);\n\t\t\t\tif (this.workers.get(worker.descriptor.workerId)?.descriptor.lifecycle !== \"ready\") {\n\t\t\t\t\tthrow new Error(worker.descriptor.lastError ?? \"Session worker recovery failed\");\n\t\t\t\t}\n\t\t\t\tconst summary = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\treturn success(command.id, command.type, summary ? this.publicSummary(worker, summary) : undefined);\n\t\t\t}\n\t\t\tcase \"restart\":\n\t\t\t\tsetImmediate(() => void this.shutdown(0, false, true, false, \"update\"));\n\t\t\t\treturn success(command.id, command.type);\n\t\t\tcase \"shutdown\":\n\t\t\t\tsetImmediate(() => void this.shutdown(0, true, false, command.force === true, \"shutdown\"));\n\t\t\t\treturn success(command.id, \"shutdown\");\n\t\t\tcase \"prepare_update_restart\": {\n\t\t\t\tconst manifest = await this.prepareUpdateRestart();\n\t\t\t\treturn success(command.id, \"prepare_update_restart\", manifest);\n\t\t\t}\n\t\t\tcase \"agent_messages_status\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst first = [...this.workers.values()].find((worker) => this.isLiveWorker(worker) && worker.client);\n\t\t\t\tif (!first) {\n\t\t\t\t\treturn success(command.id, command.type, { paused: false, limits: {} });\n\t\t\t\t}\n\t\t\t\treturn this.forwardToWorker(first, command);\n\t\t\t}\n\t\t\tcase \"asm_runtime_status\": {\n\t\t\t\tconst first = [...this.workers.values()].find((worker) => this.isLiveWorker(worker) && worker.client);\n\t\t\t\tif (!first) {\n\t\t\t\t\treturn success(command.id, command.type, {\n\t\t\t\t\t\tavailable: false,\n\t\t\t\t\t\terror: \"ASM-CM status requires an active session worker\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this.forwardToWorker(first, command, 150_000);\n\t\t\t}\n\t\t\tcase \"asm_shadow_encode\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command, 150_000);\n\t\t\t}\n\t\t\tcase \"agent_messages_pause\":\n\t\t\tcase \"agent_messages_resume\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst responses = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter((worker) => this.isLiveWorker(worker) && worker.client)\n\t\t\t\t\t\t.map((worker) => this.forwardToWorker(worker, command)),\n\t\t\t\t);\n\t\t\t\tconst failed = responses.find((response) => !response.success);\n\t\t\t\treturn failed ?? success(command.id, command.type, responses.find((response) => response.success)?.data);\n\t\t\t}\n\t\t\tcase \"cron_list\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst jobs = new Map<string, AgentCronJob>();\n\t\t\t\tconst responses = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.client && worker.descriptor.lifecycle === \"ready\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((worker) =>\n\t\t\t\t\t\t\tthis.forwardToWorker(worker, command, 5000).catch((error: unknown) =>\n\t\t\t\t\t\t\t\tfailure(command.id, command.type, error, serializeDaemonError(error)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfor (const response of responses) {\n\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\tthis.log(`Could not list scheduled jobs from a worker: ${response.error}`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const job of cronJobsFromResponse(response)) {\n\t\t\t\t\t\tjobs.set(job.id, job);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"cron_list\", { jobs: sortCronJobs([...jobs.values()]) });\n\t\t\t}\n\t\t\tcase \"heartbeats_list\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst workers = [...this.workers.values()].filter(\n\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.descriptor.lifecycle !== \"failed\",\n\t\t\t\t);\n\t\t\t\tconst heartbeats = new Map<string, AgentConnectionHeartbeat>();\n\t\t\t\tconst snapshots: Array<{ heartbeats?: AgentConnectionHeartbeat[]; response?: DaemonResponse }> =\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tworkers.map(async (worker) => {\n\t\t\t\t\t\t\tif (worker.client && worker.descriptor.lifecycle === \"ready\") {\n\t\t\t\t\t\t\t\tconst response = await this.forwardToWorker(worker, command, 5000).catch((error: unknown) =>\n\t\t\t\t\t\t\t\t\tfailure(command.id, command.type, error, serializeDaemonError(error)),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (response.success) {\n\t\t\t\t\t\t\t\t\tconst snapshot = heartbeatsFromResponse(response);\n\t\t\t\t\t\t\t\t\tworker.heartbeatSnapshot = snapshot;\n\t\t\t\t\t\t\t\t\tworker.heartbeatSnapshotStale = false;\n\t\t\t\t\t\t\t\t\treturn { heartbeats: snapshot };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.log(`Could not list heartbeats from a worker: ${response.error}`);\n\t\t\t\t\t\t\t\tif (worker.heartbeatSnapshot === undefined || worker.heartbeatSnapshotStale === true) {\n\t\t\t\t\t\t\t\t\treturn { response };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (worker.heartbeatSnapshot !== undefined && worker.heartbeatSnapshotStale !== true) {\n\t\t\t\t\t\t\t\treturn { heartbeats: worker.heartbeatSnapshot };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst state =\n\t\t\t\t\t\t\t\tworker.descriptor.lifecycle === \"ready\" ? \"disconnected\" : worker.descriptor.lifecycle;\n\t\t\t\t\t\t\tconst error = new Error(`Cannot list heartbeats while session worker is ${state}`);\n\t\t\t\t\t\t\treturn { response: failure(command.id, command.type, error, serializeDaemonError(error)) };\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tconst failed = snapshots.find((snapshot) => snapshot.response)?.response;\n\t\t\t\tif (failed) {\n\t\t\t\t\treturn failed;\n\t\t\t\t}\n\t\t\t\tfor (const snapshot of snapshots) {\n\t\t\t\t\tfor (const heartbeat of snapshot.heartbeats ?? []) {\n\t\t\t\t\t\theartbeats.set(heartbeat.job.id, heartbeat);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn success(command.id, \"heartbeats_list\", { heartbeats: [...heartbeats.values()] });\n\t\t\t}\n\t\t\tcase \"heartbeat_manage\": {\n\t\t\t\tconst cachedWorker = [...this.workers.values()].find((worker) =>\n\t\t\t\t\tworker.heartbeatSnapshot?.some(\n\t\t\t\t\t\t(heartbeat) =>\n\t\t\t\t\t\t\theartbeat.job.id === command.jobId && heartbeat.job.activeSessionId === command.activeSessionId,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst worker = cachedWorker ?? (await this.findWorkerForClient(client, command.activeSessionId)).worker;\n\t\t\t\tthis.assertWorkerAccessibleToClient(client, worker, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(worker, command);\n\t\t\t\tif (\n\t\t\t\t\tresponse.success &&\n\t\t\t\t\tresponse.data &&\n\t\t\t\t\ttypeof response.data === \"object\" &&\n\t\t\t\t\t\"heartbeat\" in response.data\n\t\t\t\t) {\n\t\t\t\t\tconst job = (response.data as { heartbeat?: AgentCronJob }).heartbeat;\n\t\t\t\t\tif (job && worker.heartbeatSnapshot) {\n\t\t\t\t\t\tconst existing = worker.heartbeatSnapshot.find((heartbeat) => heartbeat.job.id === job.id);\n\t\t\t\t\t\tconst remaining = worker.heartbeatSnapshot.filter((heartbeat) => heartbeat.job.id !== job.id);\n\t\t\t\t\t\tworker.heartbeatSnapshot =\n\t\t\t\t\t\t\tjob.status === \"active\" || job.status === \"paused\"\n\t\t\t\t\t\t\t\t? [...remaining, existing ? { ...existing, job } : { job }]\n\t\t\t\t\t\t\t\t: remaining;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"cron_add\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, command);\n\t\t\t\tif (response.success && command.promoteOwnedSession) {\n\t\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"cron_cancel\": {\n\t\t\t\tif (command.activeSessionId) {\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t\t}\n\t\t\t\tconst listed = await Promise.all(\n\t\t\t\t\t[...this.workers.values()]\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(worker) => this.isLiveWorker(worker) && worker.client && worker.descriptor.lifecycle === \"ready\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(async (worker) => ({\n\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\tresponse: await this.forwardToWorker(\n\t\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\t\t{ type: \"cron_list\", includeInactive: true },\n\t\t\t\t\t\t\t\t5000,\n\t\t\t\t\t\t\t).catch(() => undefined),\n\t\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tfor (const candidate of listed) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcandidate.response?.success &&\n\t\t\t\t\t\tcronJobsFromResponse(candidate.response).some((job) => job.id === command.jobId)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn this.forwardToWorker(candidate.worker, command);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new Error(`No cron job found: ${command.jobId}`);\n\t\t\t}\n\t\t\tcase \"heartbeat_get\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t}\n\t\t\tcase \"heartbeat_set\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\tconst response = await this.forwardToWorker(match.worker, command);\n\t\t\t\tif (response.success && command.promoteOwnedSession) {\n\t\t\t\t\tawait this.promoteOwnedWorker(client, match.worker);\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tcase \"heartbeat_update\": {\n\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\treturn this.forwardToWorker(match.worker, command);\n\t\t\t}\n\t\t\tcase \"rename_saved_session\": {\n\t\t\t\tconst target = await this.savedSessionNameReservationInput(command.sessionPath, command.name.trim());\n\t\t\t\treturn await this.withSessionNameReservation(target, async () => {\n\t\t\t\t\tawait this.assertSupervisorSavedSessionNameAvailable(command.sessionPath, target.name);\n\t\t\t\t\tif (!command.activeSessionId) {\n\t\t\t\t\t\tawait this.catalog.rename(command.sessionPath, command.name);\n\t\t\t\t\t\t// Third rename write point: an offline saved-session rename\n\t\t\t\t\t\t// changes the name the ledger carries for that child.\n\t\t\t\t\t\tawait this.rlmSpawnLedger()\n\t\t\t\t\t\t\t.appendRenameByChildPath(command.sessionPath, target.name)\n\t\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t\t\t`failed to append RLM ledger rename: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\treturn success(command.id, command.type);\n\t\t\t\t\t}\n\t\t\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\t\t\treturn await this.forwardToWorker(match.worker, {\n\t\t\t\t\t\t...command,\n\t\t\t\t\t\tactiveSessionId: match.summary.activeSessionId ?? match.summary.id,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"delete_saved_session\":\n\t\t\t\tif (!command.activeSessionId) {\n\t\t\t\t\tconst active = this.findWorkerBySessionFile(command.sessionPath);\n\t\t\t\t\tif (active) {\n\t\t\t\t\t\tthrow new Error(\"Cannot delete the currently active session\");\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await this.catalog.delete(command.sessionPath);\n\t\t\t\t\treturn success(command.id, command.type, result);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (command.type === \"send_message\") {\n\t\t\t// agentOrigin without fromActiveSessionId is trusted only at the direct socket-client boundary.\n\t\t\tconst source = command.fromActiveSessionId\n\t\t\t\t? await this.findWorkerForClient(client, command.fromActiveSessionId)\n\t\t\t\t: undefined;\n\t\t\tlet target: WorkerMatch;\n\t\t\ttry {\n\t\t\t\ttarget = await this.findWorkerForClient(client, command.targetActiveSessionId);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Unknown active session:\")) throw error;\n\t\t\t\tconst cwd = source?.summary.cwd ?? this.defaultSessionConfig.cwd ?? process.cwd();\n\t\t\t\tlet sessionPath: string;\n\t\t\t\ttry {\n\t\t\t\t\tsessionPath = await this.catalog.resolve(\n\t\t\t\t\t\tcommand.targetActiveSessionId,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tsource?.worker.descriptor.sessionDir ?? this.defaultSessionConfig.sessionDir,\n\t\t\t\t\t);\n\t\t\t\t} catch (catalogError) {\n\t\t\t\t\t// Preserve selector ambiguity so a2a senders can distinguish it from\n\t\t\t\t\t// the original unknown-active-session lookup failure.\n\t\t\t\t\tif (catalogError instanceof Error && catalogError.message.startsWith(\"Ambiguous session selector\")) {\n\t\t\t\t\t\tthrow catalogError;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (source && command.agentOrigin === true) {\n\t\t\t\t\tconst targetInfo = await readSessionInfo(sessionPath);\n\t\t\t\t\tif (!targetInfo) throw new Error(`Unknown active session: ${command.targetActiveSessionId}`);\n\t\t\t\t\tassertAgentFamilyReach(\n\t\t\t\t\t\tthis.familyCatalogEntry(source.summary),\n\t\t\t\t\t\tthis.familyCatalogEntry(summaryForInactiveSession(targetInfo)),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst worker = await this.createOrReuseWorker(this.protocolClientId(client), {\n\t\t\t\t\ttype: \"create\",\n\t\t\t\t\tsessionPath,\n\t\t\t\t\tcontinueRecent: false,\n\t\t\t\t});\n\t\t\t\tconst summary =\n\t\t\t\t\tthis.findSummaryInWorker(worker, sessionPath) ??\n\t\t\t\t\tworker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\t\t\tif (!summary) throw new Error(\"Woken session worker has no target session\");\n\t\t\t\ttarget = { worker, summary };\n\t\t\t}\n\t\t\tconst targetActiveSessionId = target.summary.activeSessionId ?? target.summary.id;\n\t\t\tif (source && command.agentOrigin === true) {\n\t\t\t\tassertAgentFamilyReach(this.familyCatalogEntry(source.summary), this.familyCatalogEntry(target.summary));\n\t\t\t}\n\t\t\tif (source) {\n\t\t\t\tif ((source.summary.activeSessionId ?? source.summary.id) === targetActiveSessionId) {\n\t\t\t\t\tthrow new Error(\"Agent messaging cannot target the sending session\");\n\t\t\t\t}\n\t\t\t\tconst targetClient = this.requireAvailableWorkerClient(target.worker);\n\t\t\t\tconst response = await targetClient.requestWorker(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"worker_deliver_message\",\n\t\t\t\t\t\ttargetActiveSessionId,\n\t\t\t\t\t\tmessage: command.message,\n\t\t\t\t\t\tsender: {\n\t\t\t\t\t\t\tactiveSessionId: source.summary.activeSessionId ?? source.summary.id,\n\t\t\t\t\t\t\tsessionId: source.summary.sessionId,\n\t\t\t\t\t\t\t...(source.summary.sessionName ? { sessionName: source.summary.sessionName } : {}),\n\t\t\t\t\t\t\truntimeKind: source.summary.runtimeKind ?? \"top-level\",\n\t\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tWORKER_REQUEST_TIMEOUT_MS,\n\t\t\t\t);\n\t\t\t\treturn { ...response, id: command.id, command: command.type };\n\t\t\t}\n\t\t\treturn this.forwardToWorker(target.worker, { ...command, targetActiveSessionId });\n\t\t}\n\n\t\tif (!(\"activeSessionId\" in command) || typeof command.activeSessionId !== \"string\") {\n\t\t\tthrow new Error(`Supervisor cannot route daemon command: ${command.type}`);\n\t\t}\n\t\tconst admission =\n\t\t\t(command.type === \"prompt\" || command.type === \"prompt_and_wait\") && command.admissionId\n\t\t\t\t? this.getPromptAdmission(client, command.activeSessionId, command.admissionId)\n\t\t\t\t: undefined;\n\t\ttry {\n\t\t\tthrowIfAdmissionCancelled(admission);\n\t\t\tconst match = await waitForPromptAdmission(\n\t\t\t\tcommand.type === \"set_session_name\" && command.workerToken !== undefined\n\t\t\t\t\t? this.findWorker(\n\t\t\t\t\t\t\tcommand.activeSessionId,\n\t\t\t\t\t\t\t(worker) => worker.descriptor.authenticationToken === command.workerToken,\n\t\t\t\t\t\t)\n\t\t\t\t\t: this.findWorkerForClient(client, command.activeSessionId),\n\t\t\t\tadmission?.controller.signal,\n\t\t\t);\n\t\t\tthrowIfAdmissionCancelled(admission);\n\t\t\tconst resolvedCommand = {\n\t\t\t\t...command,\n\t\t\t\tactiveSessionId: match.summary.activeSessionId ?? match.summary.id,\n\t\t\t\t...(admission ? { admissionId: admission.workerAdmissionId } : {}),\n\t\t\t} as DaemonCommand;\n\t\t\tif (admission) {\n\t\t\t\tadmission.worker = match.worker;\n\t\t\t\tadmission.workerActiveSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t\t}\n\t\t\tconst isRootKill =\n\t\t\t\tcommand.type === \"kill\" &&\n\t\t\t\t(match.summary.activeSessionId ?? match.summary.id) === match.worker.descriptor.rootActiveSessionId;\n\t\t\tif (!isRootKill) {\n\t\t\t\tconst forward = async () => {\n\t\t\t\t\tconst response = await this.forwardToWorker(match.worker, resolvedCommand);\n\t\t\t\t\tif (admission && response.success) admission.status = \"owned\";\n\t\t\t\t\treturn response;\n\t\t\t\t};\n\t\t\t\tif (command.type === \"rename\" || command.type === \"set_session_name\") {\n\t\t\t\t\tconst reservation = this.summaryNameReservationInput(match.summary, command.name.trim());\n\t\t\t\t\treturn await this.withSessionNameReservation(reservation, async () => {\n\t\t\t\t\t\tawait this.assertSupervisorSessionNameAvailable(match.summary, reservation.name);\n\t\t\t\t\t\treturn forward();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn await forward();\n\t\t\t}\n\t\t\tthis.persistWorkerStopTombstone(match.worker, true);\n\t\t\tconst releaseStopOwnership = this.acquireWorkerStopOwnership(match.worker);\n\t\t\tlet response: DaemonResponse;\n\t\t\ttry {\n\t\t\t\tresponse = await this.forwardToWorker(match.worker, resolvedCommand);\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.stopWorker(match.worker, true, false, true);\n\t\t\t\t} finally {\n\t\t\t\t\treleaseStopOwnership();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn response;\n\t\t} finally {\n\t\t\tif (admission) this.deletePromptAdmission(admission);\n\t\t}\n\t}\n\n\tprivate async handleList(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"list\" }>,\n\t): Promise<DaemonResponse> {\n\t\tawait Promise.all(\n\t\t\t[...this.workers.values()]\n\t\t\t\t.filter((worker) => !this.isWorkerStopping(worker))\n\t\t\t\t.map((worker) => this.refreshWorkerSummaries(worker).catch(() => undefined)),\n\t\t);\n\t\tconst clientOwnedWorkers = [...this.workers.values()].filter((worker) => !this.isVisibleWorker(worker));\n\t\t// Stopping workers stay listed (with an honest workerState) because this\n\t\t// list also feeds busy-daemon safety checks in daemon-launch.\n\t\tconst active = [...this.workers.values()]\n\t\t\t.filter(\n\t\t\t\t(worker) =>\n\t\t\t\t\tthis.isVisibleWorker(worker) ||\n\t\t\t\t\t(command.includeClientOwned === true && this.isWorkerAccessibleToClient(client, worker)),\n\t\t\t)\n\t\t\t.flatMap((worker) => [...worker.summaries.values()].map((summary) => this.publicSummary(worker, summary)));\n\t\tconst busyClientOwnedSessionCount = clientOwnedWorkers\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.filter(isSessionSummaryBusy).length;\n\t\tconst data = {\n\t\t\tsessions: active,\n\t\t\t...(command.includeClientOwned ? { busyClientOwnedSessionCount } : {}),\n\t\t};\n\t\tif (!command.all) {\n\t\t\treturn success(command.id, \"list\", data);\n\t\t}\n\t\tconst sessionDir = command.sessionDir ?? this.defaultSessionConfig.sessionDir;\n\t\tconst saved = await this.catalog.list(command.cwd ? resolve(command.cwd) : undefined, sessionDir);\n\t\treturn success(command.id, \"list\", { ...data, sessions: mergeSessionLists(active, saved) });\n\t}\n\n\tprivate async handleSavedSessionList(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"list_saved_sessions\" }>,\n\t): Promise<DaemonResponse> {\n\t\tlet cwd: string;\n\t\tlet sessionDir: string | undefined;\n\t\tlet activeSessionId: string | undefined;\n\t\tif (\"activeSessionId\" in command) {\n\t\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\t\tcwd = match.summary.cwd;\n\t\t\tsessionDir = this.defaultSessionConfig.sessionDir;\n\t\t\tactiveSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\t} else {\n\t\t\tcwd = resolve(command.cwd);\n\t\t\tsessionDir = command.sessionDir;\n\t\t}\n\t\tconst callbacks = command.id\n\t\t\t? {\n\t\t\t\t\tonProgress: (loaded: number, total: number) =>\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\tid: command.id,\n\t\t\t\t\t\t\ttype: \"session_list_progress\",\n\t\t\t\t\t\t\tcommand: \"list_saved_sessions\",\n\t\t\t\t\t\t\t...(activeSessionId ? { activeSessionId } : {}),\n\t\t\t\t\t\t\tloaded,\n\t\t\t\t\t\t\ttotal,\n\t\t\t\t\t\t}),\n\t\t\t\t\tonSession: (session: SessionInfo) =>\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\tid: command.id,\n\t\t\t\t\t\t\ttype: \"session_list_item\",\n\t\t\t\t\t\t\tcommand: \"list_saved_sessions\",\n\t\t\t\t\t\t\t...(activeSessionId ? { activeSessionId } : {}),\n\t\t\t\t\t\t\tsession: serializeSavedSessionInfo(session),\n\t\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst saved = await this.catalog.list(command.scope === \"current\" ? cwd : undefined, sessionDir, callbacks);\n\t\treturn success(command.id, \"list_saved_sessions\", { sessions: saved.map(serializeSavedSessionInfo) });\n\t}\n\n\tprivate async createOrReuseWorker(clientId: string, command: DaemonCreateCommand): Promise<ResidentWorker> {\n\t\tlet createCommand = command;\n\t\tif (command.name !== undefined) {\n\t\t\tconst normalizedName = command.name.trim();\n\t\t\tif (!normalizedName) {\n\t\t\t\tthrow new Error(\"Session name cannot be empty\");\n\t\t\t}\n\t\t\tcreateCommand = { ...command, name: normalizedName };\n\t\t}\n\t\tconst ownerClientId = command.lifecycle === \"client_owned\" ? clientId : undefined;\n\t\tif (command.sessionPath) {\n\t\t\tconst activeMatches = this.matchWorkers(command.sessionPath);\n\t\t\tif (\n\t\t\t\tactiveMatches.length === 1 &&\n\t\t\t\t!(await this.reclaimStaleWorkerRegistration(activeMatches[0]!.worker, command.launchEnv !== undefined))\n\t\t\t) {\n\t\t\t\treturn this.reuseWorkerForCreate(activeMatches[0]!.worker, ownerClientId, command.sessionPath);\n\t\t\t}\n\t\t\tif (activeMatches.length > 1) {\n\t\t\t\tthrow new Error(`Ambiguous active session \"${command.sessionPath}\"`);\n\t\t\t}\n\t\t\tconst config = mergeAgentSessionRuntimeConfig(this.defaultSessionConfig, command.config);\n\t\t\tconst sessionPath = looksLikeSessionPath(command.sessionPath)\n\t\t\t\t? resolve(command.sessionPath)\n\t\t\t\t: await this.catalog.resolve(command.sessionPath, config.cwd ?? process.cwd(), config.sessionDir);\n\t\t\tcreateCommand = { ...createCommand, sessionPath };\n\t\t\tconst existing = this.findWorkerBySessionFile(sessionPath);\n\t\t\tif (existing && !(await this.reclaimStaleWorkerRegistration(existing, command.launchEnv !== undefined))) {\n\t\t\t\treturn this.reuseWorkerForCreate(existing, ownerClientId, sessionPath);\n\t\t\t}\n\t\t}\n\t\tconst key = createCommand.sessionPath\n\t\t\t? canonicalSessionPath(createCommand.sessionPath)\n\t\t\t: `new:${command.id ? createCommandIdempotencyKey(clientId, command.id) : createActiveSessionId()}`;\n\t\tconst pending = this.openingWorkers.get(key);\n\t\tif (pending) {\n\t\t\treturn pending;\n\t\t}\n\t\tconst opening = (async () => {\n\t\t\tif (!createCommand.name) return this.launchWorker(createCommand, undefined, ownerClientId);\n\t\t\tconst savedSiblings = createCommand.sessionPath ? await this.rlmLedgerSiblings(createCommand.sessionPath) : [];\n\t\t\tconst target = savedSiblings.find(\n\t\t\t\t(session) => canonicalSessionPath(session.path) === canonicalSessionPath(createCommand.sessionPath!),\n\t\t\t);\n\t\t\tconst targetSummary = target ? summaryForInactiveSession(target) : { sessionId: \"new-root\", rlmDepth: 0 };\n\t\t\tconst reservation = this.summaryNameReservationInput(targetSummary, createCommand.name);\n\t\t\treturn this.withSessionNameReservation(reservation, async () => {\n\t\t\t\tif (target?.parentSessionPath && (target.rlmDepth ?? 0) > 0) {\n\t\t\t\t\tthis.assertSavedSiblingNameAvailable(savedSiblings, target, createCommand.name!);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.assertSupervisorSessionNameAvailable(targetSummary, createCommand.name!);\n\t\t\t\t}\n\t\t\t\treturn this.launchWorker(createCommand, undefined, ownerClientId);\n\t\t\t});\n\t\t})();\n\t\tthis.openingWorkers.set(key, opening);\n\t\ttry {\n\t\t\treturn await opening;\n\t\t} finally {\n\t\t\tif (this.openingWorkers.get(key) === opening) {\n\t\t\t\tthis.openingWorkers.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate reuseWorkerForCreate(\n\t\tworker: ResidentWorker,\n\t\townerClientId: string | undefined,\n\t\tsessionPath: string,\n\t): ResidentWorker {\n\t\tif (worker.descriptor.lifecycle === \"failed\") {\n\t\t\tthrow new Error(\n\t\t\t\t`Session \"${sessionPath}\" is registered to a failed worker that could not be safely reclaimed`,\n\t\t\t);\n\t\t}\n\t\tif (worker.descriptor.ownerClientId === ownerClientId) {\n\t\t\treturn worker;\n\t\t}\n\t\tthrow new SessionAlreadyActiveError(sessionPath, worker.descriptor.rootActiveSessionId);\n\t}\n\n\t/**\n\t * A stopping worker whose process already died can strand its registration\n\t * (for example when the stop timed out and its finalization was interrupted\n\t * by a supervisor restart). Such a registration would block reopening the\n\t * saved transcript forever, so complete the interrupted stop and let the\n\t * caller launch a fresh worker for the saved session.\n\t */\n\tprivate async reclaimStaleWorkerRegistration(worker: ResidentWorker, freshCreate = false): Promise<boolean> {\n\t\tif (worker.client !== undefined || worker.recovery !== undefined) {\n\t\t\treturn false;\n\t\t}\n\t\tif (worker.descriptor.stopRequestedAt === undefined) {\n\t\t\tif (worker.descriptor.lifecycle !== \"failed\" || worker.descriptor.ownerClientId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst identity = this.processIdentity(worker.descriptor.pid, worker.descriptor.processStartId);\n\t\t\tif (identity === \"current\") {\n\t\t\t\tif (!freshCreate || !worker.descriptor.processStartId) return false;\n\t\t\t\tawait this.stopWorker(worker, true, true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (identity !== \"gone\" && identity !== \"replaced\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tworker.intentionalStop = true;\n\t\t\tawait this.recoverUncertainWorkerOperations(worker, false);\n\t\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t\treturn true;\n\t\t}\n\t\t// Fail fast before waiting on anything: only a confirmed-dead process is\n\t\t// reclaimable. A live, unknown, or still-stopping worker is left alone\n\t\t// and the caller reports the session as already active.\n\t\tconst identity = this.processIdentity(worker.descriptor.pid, worker.descriptor.processStartId);\n\t\tif (identity !== \"gone\" && identity !== \"replaced\") {\n\t\t\treturn false;\n\t\t}\n\t\t// Single cleanup path: the background stop finalizer is identity-aware,\n\t\t// retrying, and single-flighted, so concurrent resumes share one stop.\n\t\t// The wait is bounded so a resume request always returns promptly.\n\t\tthis.scheduleWorkerStopFinalization(worker);\n\t\tconst finalization = worker.stopFinalization;\n\t\tif (finalization) {\n\t\t\tawait Promise.race([finalization.catch(() => undefined), unrefDelay(STALE_RECLAIM_WAIT_MS)]);\n\t\t}\n\t\tif (this.workers.get(worker.descriptor.workerId) === worker) {\n\t\t\t// The process is confirmed dead, so the registration must never be\n\t\t\t// reused; slow cleanup fails the resume honestly instead.\n\t\t\tthrow new Error(\n\t\t\t\t`Stopped session worker ${worker.descriptor.workerId} is still being cleaned up; retry shortly`,\n\t\t\t);\n\t\t}\n\t\tthis.log(`Reclaimed stale registration for stopped worker ${worker.descriptor.workerId}`);\n\t\treturn true;\n\t}\n\n\tprivate async promoteOwnedWorker(client: DaemonSocketClient, worker: ResidentWorker): Promise<void> {\n\t\tconst clientId = this.protocolClientId(client);\n\t\tif (worker.descriptor.ownerClientId === undefined && worker.promotedOwnerClientId === clientId) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.ownerClientId !== clientId) {\n\t\t\tthrow new Error(\"Session is not owned by this client\");\n\t\t}\n\t\tconst previousDescriptor = worker.descriptor;\n\t\tworker.descriptor = { ...previousDescriptor, ownerClientId: undefined };\n\t\ttry {\n\t\t\tthis.persistWorker(worker);\n\t\t} catch (error) {\n\t\t\tworker.descriptor = previousDescriptor;\n\t\t\tthrow error;\n\t\t}\n\t\tworker.promotedOwnerClientId = clientId;\n\t\tif (worker.ownerCleanupTimer) {\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t\tworker.launchEnv = undefined;\n\t\tworker.transientCreateCommand = undefined;\n\t}\n\n\tprivate async launchWorker(\n\t\tcommand: DaemonCreateCommand,\n\t\texisting?: ResidentWorker,\n\t\townerClientId?: string,\n\t): Promise<ResidentWorker> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (existing && this.isWorkerRecoveryCancelled(existing)) {\n\t\t\tthrow new Error(`Session worker ${existing.descriptor.workerId} recovery was cancelled`);\n\t\t}\n\t\tconst recoveryStopRevision = existing?.stopRevision;\n\t\tconst launchEnv = command.launchEnv ?? existing?.launchEnv;\n\t\tconst createCommand: DaemonCreateCommand = {\n\t\t\t...withoutSupervisorCreateFields(command),\n\t\t\tconfig: mergeAgentSessionRuntimeConfig(this.defaultSessionConfig, command.config),\n\t\t};\n\t\tconst workerId = existing?.descriptor.workerId ?? createActiveSessionId();\n\t\tconst rootActiveSessionId = existing?.descriptor.rootActiveSessionId ?? createActiveSessionId();\n\t\tconst socketPath = existing?.descriptor.socketPath ?? workerSocketPath(this.socketPath, workerId);\n\t\tconst token = existing?.descriptor.authenticationToken ?? randomBytes(32).toString(\"base64url\");\n\t\tconst now = new Date().toISOString();\n\t\tconst descriptorPath = existing?.descriptorPath ?? join(this.descriptorDir, `${workerId}.json`);\n\t\tconst recoveryJournalPath =\n\t\t\texisting?.descriptor.recoveryJournalPath ?? join(this.descriptorDir, `${workerId}.recovery.jsonl`);\n\t\tconst orphanProcessJournalPath =\n\t\t\texisting?.descriptor.orphanProcessJournalPath ?? join(this.descriptorDir, `${workerId}.orphans.jsonl`);\n\t\tconst launch = createCliSubprocessLaunchSpec([\"--mode\", \"daemon\", \"--daemon-socket\", socketPath]);\n\t\tconst workerEnvironment = createCliSubprocessEnv({\n\t\t\t...process.env,\n\t\t\t...launchEnv,\n\t\t\t[DAEMON_WORKER_ROLE_ENV]: \"1\",\n\t\t\t[DAEMON_WORKER_TOKEN_ENV]: token,\n\t\t\t[DAEMON_WORKER_ACTIVE_SESSION_ID_ENV]: rootActiveSessionId,\n\t\t\t[DAEMON_WORKER_SUPERVISOR_SOCKET_ENV]: this.socketPath,\n\t\t\t[DAEMON_WORKER_RECOVERY_JOURNAL_ENV]: recoveryJournalPath,\n\t\t\t[DAEMON_WORKER_STARTUP_GATE_FD_ENV]: String(WORKER_STARTUP_GATE_FD),\n\t\t\t[ORPHAN_PROCESS_JOURNAL_ENV]: orphanProcessJournalPath,\n\t\t\t[SESSION_LEASES_ENABLED_ENV]: \"1\",\n\t\t\t[SESSION_LEASE_OWNER_ID_ENV]: rootActiveSessionId,\n\t\t});\n\t\tdelete workerEnvironment.RLM_DEPTH;\n\t\tawait this.assertRecoveryAllowed();\n\t\tconst child: ChildProcess = spawn(launch.command, launch.args, {\n\t\t\tcwd: createCommand.config?.cwd ?? process.cwd(),\n\t\t\tdetached: true,\n\t\t\tenv: workerEnvironment,\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\t\tconst detachWorkerStderr = child.stderr\n\t\t\t? attachJsonlLineReader(child.stderr, (line) => this.log(`Session worker ${workerId} stderr: ${line}`), {\n\t\t\t\t\tmaxLineLength: 64 * 1024,\n\t\t\t\t\tonLineOverflow: (prefix) => this.log(`Session worker ${workerId} stderr: ${prefix} [truncated]`),\n\t\t\t\t})\n\t\t\t: () => {};\n\t\tchild.once(\"close\", detachWorkerStderr);\n\t\tconst childClosed = new Promise<void>((resolveClose) => child.once(\"close\", () => resolveClose()));\n\t\tchild.on(\"error\", (error) => {\n\t\t\tthis.log(\n\t\t\t\t`Session worker ${workerId} process error: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t});\n\t\tconst startupGate = child.stdio[WORKER_STARTUP_GATE_FD];\n\t\tconst previousDescriptor = existing?.descriptor;\n\t\tconst previousIntentionalStop = existing?.intentionalStop;\n\t\tlet descriptorAssigned = false;\n\t\tlet childPid: number;\n\t\tlet childProcessStartId: string | undefined;\n\t\tlet worker: ResidentWorker;\n\t\ttry {\n\t\t\tif (!child.pid) {\n\t\t\t\tthrow new Error(\"Failed to obtain daemon session worker pid\");\n\t\t\t}\n\t\t\tif (!(startupGate instanceof Writable)) {\n\t\t\t\tthrow new Error(\"Failed to create daemon session worker startup gate\");\n\t\t\t}\n\t\t\tchildPid = child.pid;\n\t\t\tchildProcessStartId = getProcessStartId(childPid);\n\t\t\tawait this.assertRecoveryAllowed();\n\n\t\t\tconst descriptor: DaemonWorkerDescriptor = {\n\t\t\t\tversion: 2,\n\t\t\t\tworkerId,\n\t\t\t\tpid: childPid,\n\t\t\t\t...(childProcessStartId ? { processStartId: childProcessStartId } : {}),\n\t\t\t\tsocketPath,\n\t\t\t\trecoveryJournalPath,\n\t\t\t\torphanProcessJournalPath,\n\t\t\t\tsupervisorSocketPath: this.socketPath,\n\t\t\t\tauthenticationToken: token,\n\t\t\t\trootActiveSessionId,\n\t\t\t\townerClientId: existing?.descriptor.ownerClientId ?? ownerClientId,\n\t\t\t\tsessionDir: createCommand.config?.sessionDir,\n\t\t\t\tcreatedAt: existing?.descriptor.createdAt ?? now,\n\t\t\t\tupdatedAt: now,\n\t\t\t\tlifecycle: \"starting\",\n\t\t\t\tcreateCommand: durableDaemonCreateCommand(createCommand),\n\t\t\t\tconsecutiveFailures: existing?.descriptor.consecutiveFailures ?? 0,\n\t\t\t};\n\t\t\tworker = existing ?? {\n\t\t\t\tdescriptor,\n\t\t\t\tdescriptorPath,\n\t\t\t\tsummaries: new Map(),\n\t\t\t\tsnapshotCache: new Map(),\n\t\t\t\ttranscriptCaches: new Map(),\n\t\t\t\tsnapshotGenerations: new Map(),\n\t\t\t\tsnapshotLoads: new Map(),\n\t\t\t\tintentionalStop: false,\n\t\t\t\tstopRevision: 0,\n\t\t\t\tlaunchEnv,\n\t\t\t\ttransientCreateCommand: ownerClientId ? createCommand : undefined,\n\t\t\t};\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor = descriptor;\n\t\t\tworker.launchEnv = launchEnv;\n\t\t\tworker.transientCreateCommand = descriptor.ownerClientId ? createCommand : undefined;\n\t\t\tdescriptorAssigned = true;\n\t\t\tthis.persistWorker(worker);\n\t\t\tworker.intentionalStop = false;\n\t\t\tthis.workers.set(workerId, worker);\n\t\t} catch (error) {\n\t\t\tif (startupGate instanceof Writable) {\n\t\t\t\tstartupGate.destroy();\n\t\t\t}\n\t\t\tawait childClosed;\n\t\t\tchild.unref();\n\t\t\ttry {\n\t\t\t\trmSync(`${descriptorPath}.${process.pid}.tmp`, { force: true });\n\t\t\t} catch (cleanupError) {\n\t\t\t\tthis.reportCleanupFailure(`worker launch temp ${workerId}`, cleanupError);\n\t\t\t}\n\t\t\tif (existing && descriptorAssigned && previousDescriptor) {\n\t\t\t\ttry {\n\t\t\t\t\texisting.descriptor = previousDescriptor;\n\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\tthis.reportCleanupFailure(`worker launch descriptor ${workerId}`, cleanupError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tawait commitWorkerStartupGate(startupGate);\n\t\t\t} catch (error) {\n\t\t\t\tstartupGate.destroy();\n\t\t\t\tawait childClosed;\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tchild.unref();\n\t\t\t}\n\t\t\tconst client = await this.connectWorker(worker, WORKER_CONNECT_TIMEOUT_MS);\n\t\t\tconst response = await client.request(withoutCommandId(createCommand), WORKER_REQUEST_TIMEOUT_MS);\n\t\t\tif (!response.success) {\n\t\t\t\tthrow deserializeDaemonError(response);\n\t\t\t}\n\t\t\tif (!isSessionSummary(response.data)) {\n\t\t\t\tthrow new Error(\"Session worker returned an invalid create response\");\n\t\t\t}\n\t\t\tconst summary = response.data;\n\t\t\tif ((summary.activeSessionId ?? summary.id) !== rootActiveSessionId) {\n\t\t\t\tthrow new Error(\"Session worker did not preserve its assigned active session id\");\n\t\t\t}\n\t\t\tworker.summaries.set(rootActiveSessionId, summary);\n\t\t\tworker.descriptor.rootSessionId = summary.sessionId;\n\t\t\tworker.descriptor.sessionFile = summary.sessionFile;\n\t\t\tawait this.subscribeWorker(worker, rootActiveSessionId);\n\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\tif (existing && (this.isWorkerRecoveryCancelled(worker) || worker.stopRevision !== recoveryStopRevision)) {\n\t\t\t\tthrow new Error(`Session worker ${workerId} recovery was cancelled`);\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\tworker.descriptor.lastError = undefined;\n\t\t\tthis.persistWorker(worker);\n\t\t\tif (!worker.descriptor.ownerClientId) {\n\t\t\t\tworker.launchEnv = undefined;\n\t\t\t\tworker.transientCreateCommand = undefined;\n\t\t\t}\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\treturn worker;\n\t\t} catch (error) {\n\t\t\tif (isSupervisorGenerationStale(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (isSupervisorShutdownAdmissionCancelled(error)) {\n\t\t\t\tlet rolledBack = false;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.stopWorker(worker, existing === undefined, true, false, existing !== undefined, {\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tclosed: childClosed,\n\t\t\t\t\t});\n\t\t\t\t\trolledBack = true;\n\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\tthis.reportCleanupFailure(`cancelled worker launch ${workerId}`, cleanupError);\n\t\t\t\t}\n\t\t\t\tconst mappedWorker = this.workers.get(workerId);\n\t\t\t\tif (\n\t\t\t\t\trolledBack &&\n\t\t\t\t\texisting &&\n\t\t\t\t\tpreviousDescriptor &&\n\t\t\t\t\t!this.shuttingDown &&\n\t\t\t\t\texisting.stopRevision === recoveryStopRevision &&\n\t\t\t\t\texisting.descriptor.stopRequestedAt === undefined &&\n\t\t\t\t\t(mappedWorker === undefined || mappedWorker === existing)\n\t\t\t\t) {\n\t\t\t\t\texisting.descriptor = previousDescriptor;\n\t\t\t\t\texisting.intentionalStop = previousIntentionalStop ?? false;\n\t\t\t\t\tthis.workers.set(workerId, existing);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.persistWorker(existing);\n\t\t\t\t\t} catch (cleanupError) {\n\t\t\t\t\t\tthis.reportCleanupFailure(`cancelled worker recovery ${workerId}`, cleanupError);\n\t\t\t\t\t}\n\t\t\t\t\tthis.deferWorkerRecovery(existing, error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tconst shouldResumeRecovery =\n\t\t\t\texisting !== undefined &&\n\t\t\t\t!this.shuttingDown &&\n\t\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\t\tworker.stopRevision === recoveryStopRevision;\n\t\t\tawait this.stopWorker(worker, existing === undefined, true, false, existing !== undefined).catch((stopError) =>\n\t\t\t\tthis.log(`Could not stop failed worker ${workerId}: ${String(stopError)}`),\n\t\t\t);\n\t\t\tif (\n\t\t\t\tshouldResumeRecovery &&\n\t\t\t\t!this.shuttingDown &&\n\t\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\t\tworker.stopRevision === recoveryStopRevision\n\t\t\t) {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\tworker.intentionalStop = false;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tthis.workers.set(workerId, worker);\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async connectWorker(worker: ResidentWorker, timeoutMs: number): Promise<DaemonWorkerClient> {\n\t\tconst deadline = Date.now() + timeoutMs;\n\t\tlet lastError: unknown;\n\t\twhile (Date.now() < deadline) {\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tconst client = new DaemonWorkerClient(worker.descriptor.socketPath);\n\t\t\ttry {\n\t\t\t\tawait client.connect(Math.min(500, Math.max(50, deadline - Date.now())));\n\t\t\t\tawait client.waitForHello(1000);\n\t\t\t\tawait client.authenticateWorker(\n\t\t\t\t\tworker.descriptor.authenticationToken,\n\t\t\t\t\tthis.supervisorAuthenticationClaim(),\n\t\t\t\t\t1000,\n\t\t\t\t);\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\tclient.onFrame((frame) => this.handleWorkerFrame(worker, frame));\n\t\t\t\tclient.onClose((error) => void this.handleWorkerClose(worker, client, error));\n\t\t\t\tworker.client?.close();\n\t\t\t\tworker.client = client;\n\t\t\t\treturn client;\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error;\n\t\t\t\tclient.close();\n\t\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tawait delay(25);\n\t\t\t}\n\t\t}\n\t\tthrow new Error(`Timed out connecting to daemon session worker: ${String(lastError)}`);\n\t}\n\n\tprivate async subscribeWorker(worker: ResidentWorker, activeSessionId: string): Promise<void> {\n\t\tif (!worker.client) {\n\t\t\tthrow new Error(\"Session worker is not connected\");\n\t\t}\n\t\tconst supportsExtensionUi = [...this.clients].some(\n\t\t\t(client) => client.attachedActiveSessionIds.has(activeSessionId) && client.supportsExtensionUi,\n\t\t);\n\t\tconst response = await worker.client.requestWorker({\n\t\t\ttype: \"worker_subscribe\",\n\t\t\tactiveSessionId,\n\t\t\tcapabilities: supportsExtensionUi\n\t\t\t\t? [\"attach_snapshot\", \"event_sequence\", \"extension_ui\", \"slim_attach\", \"chunked_snapshot\"]\n\t\t\t\t: [\"attach_snapshot\", \"event_sequence\", \"slim_attach\", \"chunked_snapshot\"],\n\t\t\tsupportsExtensionUi,\n\t\t});\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error);\n\t\t}\n\t}\n\n\tprivate async adoptOrRecoverWorker(worker: ResidentWorker): Promise<void> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (worker.descriptor.stopRequestedAt) {\n\t\t\ttry {\n\t\t\t\t// A descriptor persisted before identity tracking has no\n\t\t\t\t// processStartId, so stopWorker could neither signal the live\n\t\t\t\t// process nor let the finalizer escalate. Authenticating on the\n\t\t\t\t// worker's socket proves the pid still belongs to our worker, so\n\t\t\t\t// the start id observed while it was alive can be persisted (and\n\t\t\t\t// the connected client gives stopWorker its graceful IPC path).\n\t\t\t\tif (worker.descriptor.processStartId === undefined && isProcessAlive(worker.descriptor.pid)) {\n\t\t\t\t\tconst observedProcessStartId = getProcessStartId(worker.descriptor.pid);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.connectWorker(worker, 2000);\n\t\t\t\t\t\tif (observedProcessStartId) {\n\t\t\t\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Unverifiable identity stays untrusted; the stop below\n\t\t\t\t\t\t// still runs its graceful path and the finalizer keeps\n\t\t\t\t\t\t// waiting rather than signalling a possibly-recycled pid.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.stopWorker(worker, true, true, worker.descriptor.archiveOnStop === true);\n\t\t\t\tthis.log(`Completed intentional stop for worker ${worker.descriptor.workerId} during supervisor adoption`);\n\t\t\t} catch (error) {\n\t\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\t\tworker.descriptor.lastError = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t\tthis.log(`Could not complete intentional stop for worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tif (!isProcessAlive(worker.descriptor.pid)) {\n\t\t\t\tthrow new Error(\"Session worker process is no longer running\");\n\t\t\t}\n\t\t\tconst observedProcessStartId = getProcessStartId(worker.descriptor.pid);\n\t\t\tawait this.connectWorker(worker, 2000);\n\t\t\tawait this.subscribeWorker(worker, worker.descriptor.rootActiveSessionId);\n\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\tif (worker.descriptor.processStartId === undefined && observedProcessStartId) {\n\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t}\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\tthis.persistWorker(worker);\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t} catch (error) {\n\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.log(`Could not adopt worker ${worker.descriptor.workerId}: ${String(error)}`);\n\t\t\tawait this.recoverWorker(worker);\n\t\t}\n\t}\n\n\tprivate async handleWorkerClose(worker: ResidentWorker, client: DaemonWorkerClient, error: Error): Promise<void> {\n\t\tif (worker.client !== client) {\n\t\t\treturn;\n\t\t}\n\t\tworker.client = undefined;\n\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker disconnected while input was paused\");\n\t\tconst interrupted = new Map<string, Set<string>>();\n\t\tfor (const [activeSessionId, generations] of worker.snapshotGenerations ?? []) {\n\t\t\tfor (const generation of generations.values()) {\n\t\t\t\tif (generation.incoming || !generation.transcript.complete) {\n\t\t\t\t\tconst snapshotIds = interrupted.get(activeSessionId) ?? new Set<string>();\n\t\t\t\t\tsnapshotIds.add(generation.transcript.snapshotId);\n\t\t\t\t\tinterrupted.set(activeSessionId, snapshotIds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const [activeSessionId, transcript] of worker.transcriptCaches) {\n\t\t\tif (!transcript.complete) {\n\t\t\t\tconst snapshotIds = interrupted.get(activeSessionId) ?? new Set<string>();\n\t\t\t\tsnapshotIds.add(transcript.snapshotId);\n\t\t\t\tinterrupted.set(activeSessionId, snapshotIds);\n\t\t\t}\n\t\t}\n\t\tfor (const [activeSessionId, snapshotIds] of interrupted) {\n\t\t\tfor (const snapshotId of snapshotIds) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tnew Error(\"Session worker disconnected during snapshot transfer\"),\n\t\t\t\t\tfalse,\n\t\t\t\t\tsnapshotId,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (this.shuttingDown || worker.intentionalStop) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.assertRecoveryAllowed();\n\t\t} catch (recoveryError) {\n\t\t\tif (!isSupervisorGenerationStale(recoveryError)) {\n\t\t\t\tthis.deferWorkerRecovery(worker, error);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\treturn;\n\t\t}\n\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\tworker.descriptor.lastError = error.message;\n\t\tthis.persistWorker(worker);\n\t\tvoid this.recoverWorker(worker);\n\t}\n\n\tprivate isWorkerRecoveryEligible(worker: ResidentWorker): boolean {\n\t\treturn this.isWorkerRecoveryCandidate(worker) && worker.recovery === undefined;\n\t}\n\n\tprivate isWorkerRecoveryCandidate(worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\t!this.shuttingDown &&\n\t\t\t!worker.intentionalStop &&\n\t\t\tworker.descriptor.stopRequestedAt === undefined &&\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.client === undefined\n\t\t);\n\t}\n\n\tprivate deferWorkerRecovery(worker: ResidentWorker, disconnectError: Error): void {\n\t\tif (worker.deferredRecovery) {\n\t\t\treturn;\n\t\t}\n\t\tworker.deferredRecovery = this.resumeDeferredWorkerRecovery(worker, disconnectError).finally(() => {\n\t\t\tworker.deferredRecovery = undefined;\n\t\t});\n\t}\n\n\tprivate async resumeDeferredWorkerRecovery(worker: ResidentWorker, disconnectError: Error): Promise<void> {\n\t\twhile (true) {\n\t\t\tawait unrefDelay(DEFERRED_RECOVERY_RECHECK_MS);\n\t\t\tif (!this.isWorkerRecoveryCandidate(worker)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t} catch (error) {\n\t\t\t\tif (isSupervisorGenerationStale(error)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryCandidate(worker)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.isWorkerRecoveryEligible(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\tworker.descriptor.lastError = disconnectError.message;\n\t\t\tthis.persistWorker(worker);\n\t\t\tvoid this.recoverWorker(worker);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate failWorkerSnapshotCache(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\terror: Error,\n\t\tcloseWorkerChannel = false,\n\t\texpectedSnapshotId?: string,\n\t): void {\n\t\tconst generations = worker.snapshotGenerations?.get(activeSessionId);\n\t\tif (expectedSnapshotId) {\n\t\t\tconst generation = generations?.get(expectedSnapshotId);\n\t\t\tif (generation) {\n\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, error);\n\t\t\t} else {\n\t\t\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\t\t\tif (transcript?.snapshotId !== expectedSnapshotId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttranscript.markFailed(error);\n\t\t\t\ttranscript.dispose();\n\t\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === expectedSnapshotId) {\n\t\t\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst failedTranscripts = new Set<SnapshotTranscriptCache>();\n\t\t\tfor (const generation of [...(generations?.values() ?? [])]) {\n\t\t\t\tfailedTranscripts.add(generation.transcript);\n\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, error);\n\t\t\t}\n\t\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\t\tif (transcript && !failedTranscripts.has(transcript)) {\n\t\t\t\ttranscript.markFailed(error);\n\t\t\t\ttranscript.dispose();\n\t\t\t}\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t\tif (closeWorkerChannel) {\n\t\t\tconst client = worker.client;\n\t\t\tif (client) {\n\t\t\t\tthis.handleWorkerClose(worker, client, error);\n\t\t\t\tclient.close();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate retireWorkerSnapshotCache(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\texpectedTranscript: SnapshotTranscriptCache,\n\t): void {\n\t\tif (worker.transcriptCaches.get(activeSessionId) === expectedTranscript) {\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t}\n\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === expectedTranscript.snapshotId) {\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, expectedTranscript.snapshotId);\n\t\tif (!generation) {\n\t\t\texpectedTranscript.dispose();\n\t\t\treturn;\n\t\t}\n\t\tgeneration.retired = true;\n\t\tthis.settleSnapshotDuplicateValidation(generation);\n\t\tif (generation.incoming) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\texpectedTranscript.dispose();\n\t}\n\n\tprivate snapshotGenerationsFor(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t): Map<string, SnapshotTranscriptGeneration> {\n\t\tworker.snapshotGenerations ??= new Map();\n\t\tlet generations = worker.snapshotGenerations.get(activeSessionId);\n\t\tif (!generations) {\n\t\t\tgenerations = new Map();\n\t\t\tworker.snapshotGenerations.set(activeSessionId, generations);\n\t\t}\n\t\treturn generations;\n\t}\n\n\tprivate snapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tsnapshotId: string,\n\t): SnapshotTranscriptGeneration | undefined {\n\t\treturn worker.snapshotGenerations?.get(activeSessionId)?.get(snapshotId);\n\t}\n\n\tprivate currentSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t): SnapshotTranscriptGeneration | undefined {\n\t\tworker.transcriptCaches ??= new Map();\n\t\tworker.snapshotCache ??= new Map();\n\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\tif (!transcript) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\tlet generation = generations.get(transcript.snapshotId);\n\t\tif (generation) {\n\t\t\treturn generation;\n\t\t}\n\t\tconst result = worker.snapshotCache.get(activeSessionId);\n\t\tif (!result) {\n\t\t\treturn undefined;\n\t\t}\n\t\tgeneration = {\n\t\t\ttranscript,\n\t\t\tresult,\n\t\t\tincoming: false,\n\t\t\tretired: false,\n\t\t};\n\t\tgenerations.set(transcript.snapshotId, generation);\n\t\treturn generation;\n\t}\n\n\tprivate deleteSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tgeneration: SnapshotTranscriptGeneration,\n\t): void {\n\t\tconst generations = worker.snapshotGenerations?.get(activeSessionId);\n\t\tif (!generations) {\n\t\t\treturn;\n\t\t}\n\t\tif (generations.get(generation.transcript.snapshotId) === generation) {\n\t\t\tgenerations.delete(generation.transcript.snapshotId);\n\t\t}\n\t\tif (generations.size === 0) {\n\t\t\tworker.snapshotGenerations.delete(activeSessionId);\n\t\t}\n\t}\n\n\tprivate failSnapshotGeneration(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tgeneration: SnapshotTranscriptGeneration,\n\t\terror: Error,\n\t): void {\n\t\tthis.settleSnapshotDuplicateValidation(generation, error);\n\t\tgeneration.transcript.markFailed(error);\n\t\tgeneration.transcript.dispose();\n\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\tif (worker.transcriptCaches.get(activeSessionId) === generation.transcript) {\n\t\t\tworker.transcriptCaches.delete(activeSessionId);\n\t\t}\n\t\tif (worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id === generation.transcript.snapshotId) {\n\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t}\n\t}\n\n\tprivate createSnapshotDuplicateValidation(): SnapshotDuplicateValidation {\n\t\tlet resolve!: () => void;\n\t\tlet reject!: (error: Error) => void;\n\t\tconst promise = new Promise<void>((resolvePromise, rejectPromise) => {\n\t\t\tresolve = resolvePromise;\n\t\t\treject = rejectPromise;\n\t\t});\n\t\tvoid promise.catch(() => undefined);\n\t\treturn { promise, resolve, reject };\n\t}\n\n\tprivate settleSnapshotDuplicateValidation(generation: SnapshotTranscriptGeneration, error?: Error): void {\n\t\tconst validation = generation.validation;\n\t\tif (!validation) {\n\t\t\treturn;\n\t\t}\n\t\tgeneration.validation = undefined;\n\t\tif (error) {\n\t\t\tvalidation.reject(error);\n\t\t} else {\n\t\t\tvalidation.resolve();\n\t\t}\n\t}\n\n\tprivate async recoverWorker(worker: ResidentWorker): Promise<void> {\n\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.ownerClientId && !worker.launchEnv && !isProcessAlive(worker.descriptor.pid)) {\n\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\tworker.descriptor.lastError = \"Waiting for the owning client to reconnect\";\n\t\t\tthis.persistWorker(worker);\n\t\t\treturn;\n\t\t}\n\t\tif (worker.recovery) {\n\t\t\treturn worker.recovery;\n\t\t}\n\t\tworker.recovery = (async () => {\n\t\t\tfor (const [retryIndex, retryDelay] of WORKER_RETRY_DELAYS_MS.entries()) {\n\t\t\t\tawait delay(retryDelay);\n\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\tconst processAlive = isProcessAlive(worker.descriptor.pid);\n\t\t\t\t\tconst observedProcessStartId = processAlive ? getProcessStartId(worker.descriptor.pid) : undefined;\n\t\t\t\t\tconst processIdentityMatches =\n\t\t\t\t\t\tworker.descriptor.processStartId === undefined ||\n\t\t\t\t\t\tobservedProcessStartId === worker.descriptor.processStartId;\n\t\t\t\t\tif (processAlive && processIdentityMatches) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.connectWorker(worker, 1500);\n\t\t\t\t\t\t\tawait this.subscribeWorker(worker, worker.descriptor.rootActiveSessionId);\n\t\t\t\t\t\t\tawait this.refreshWorkerSummaries(worker, true);\n\t\t\t\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (worker.descriptor.processStartId === undefined && observedProcessStartId) {\n\t\t\t\t\t\t\t\tworker.descriptor.processStartId = observedProcessStartId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t\t\tworker.descriptor.lifecycle = \"ready\";\n\t\t\t\t\t\t\tworker.descriptor.consecutiveFailures = 0;\n\t\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (isSupervisorRecoveryCancelled(error)) {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t\t\tworker.client?.close();\n\t\t\t\t\t\t\tworker.client = undefined;\n\t\t\t\t\t\t\tif (retryIndex < WORKER_RETRY_DELAYS_MS.length - 1) {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tprocessAlive &&\n\t\t\t\t\t\t(worker.descriptor.processStartId === undefined || observedProcessStartId === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Cannot safely replace live session worker ${worker.descriptor.workerId} without a verified process identity`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst recoveryCommand = worker.descriptor.ownerClientId ? worker.transientCreateCommand : undefined;\n\t\t\t\t\tif (!recoveryCommand || !worker.launchEnv) {\n\t\t\t\t\t\tawait this.recoverUncertainWorkerOperations(worker, false);\n\t\t\t\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\t\t\t\tworker.descriptor.lastError = \"Waiting for a client with fresh runtime context\";\n\t\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst safeToKillWorkerProcess =\n\t\t\t\t\t\tprocessAlive && processIdentityMatches && worker.descriptor.processStartId !== undefined;\n\t\t\t\t\tawait this.recoverUncertainWorkerOperations(worker, safeToKillWorkerProcess);\n\t\t\t\t\tif (this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait this.launchWorker(recoveryCommand, worker, worker.descriptor.ownerClientId);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (isSupervisorRecoveryCancelled(error) || this.isWorkerRecoveryCancelled(worker)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tworker.client?.close();\n\t\t\t\t\tworker.client = undefined;\n\t\t\t\t\tworker.descriptor.consecutiveFailures++;\n\t\t\t\t\tworker.descriptor.lastFailureAt = new Date().toISOString();\n\t\t\t\t\tworker.descriptor.lastError = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthis.persistWorker(worker);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworker.descriptor.lifecycle = \"failed\";\n\t\t\tthis.persistWorker(worker);\n\t\t\tthis.log(`Worker ${worker.descriptor.workerId} failed after three recovery attempts`);\n\t\t})().finally(() => {\n\t\t\tworker.recovery = undefined;\n\t\t});\n\t\treturn worker.recovery;\n\t}\n\n\tprivate isWorkerRecoveryCancelled(worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\tthis.shuttingDown ||\n\t\t\tworker.intentionalStop ||\n\t\t\tworker.descriptor.stopRequestedAt !== undefined ||\n\t\t\tthis.workers.get(worker.descriptor.workerId) !== worker\n\t\t);\n\t}\n\n\tprivate async recoverUncertainWorkerOperations(worker: ResidentWorker, killWorkerProcess = true): Promise<void> {\n\t\tawait this.assertRecoveryAllowed();\n\t\tif (killWorkerProcess) {\n\t\t\tsignalProcessGroupOrProcess(worker.descriptor.pid, \"SIGKILL\");\n\t\t}\n\t\tconst orphanProcessJournalPath = worker.descriptor.orphanProcessJournalPath;\n\t\tif (orphanProcessJournalPath) {\n\t\t\ttry {\n\t\t\t\tfor (const orphan of readActiveOrphanProcesses(orphanProcessJournalPath, worker.descriptor.pid)) {\n\t\t\t\t\tif (!shouldReapOrphanProcess(orphan)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tkillOrphanProcess(orphan.pid);\n\t\t\t\t}\n\t\t\t\tclearOrphanProcessJournal(orphanProcessJournalPath);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Could not reap orphaned worker resources: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t\tconst journal = new WorkerRecoveryJournal(worker.descriptor.recoveryJournalPath);\n\t\tconst latest = journal.getLatest();\n\t\tconst uncertain = latest.filter((record) => record.busy);\n\t\tif (uncertain.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst interruptedSessions = new Map<\n\t\t\tstring,\n\t\t\t{ activeSessionId: string; sessionFile: string; operations: Set<string> }\n\t\t>();\n\t\tfor (const record of uncertain) {\n\t\t\tconst sessionFile =\n\t\t\t\trecord.sessionFile ??\n\t\t\t\t(record.activeSessionId === worker.descriptor.rootActiveSessionId\n\t\t\t\t\t? worker.descriptor.sessionFile\n\t\t\t\t\t: undefined);\n\t\t\tif (!sessionFile) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst key = `${record.activeSessionId}\\0${sessionFile}`;\n\t\t\tlet interrupted = interruptedSessions.get(key);\n\t\t\tif (!interrupted) {\n\t\t\t\tinterrupted = { activeSessionId: record.activeSessionId, sessionFile, operations: new Set() };\n\t\t\t\tinterruptedSessions.set(key, interrupted);\n\t\t\t}\n\t\t\tinterrupted.operations.add(record.operation);\n\t\t}\n\t\tawait this.assertRecoveryAllowed();\n\t\tawait Promise.all(\n\t\t\t[...interruptedSessions.values()].map((interrupted) =>\n\t\t\t\tthis.catalog.markInterrupted(interrupted.sessionFile, interrupted.activeSessionId, [\n\t\t\t\t\t...interrupted.operations,\n\t\t\t\t]),\n\t\t\t),\n\t\t);\n\t\tawait this.assertRecoveryAllowed();\n\t\tfor (const record of latest) {\n\t\t\tjournal.record({\n\t\t\t\tactiveSessionId: record.activeSessionId,\n\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t...(record.sessionFile ? { sessionFile: record.sessionFile } : {}),\n\t\t\t\tbusy: false,\n\t\t\t\toperation: \"recovery_hold\",\n\t\t\t});\n\t\t}\n\t\tthis.log(\n\t\t\t`Recovered worker ${worker.descriptor.workerId} without replaying uncertain operations: ${uncertain\n\t\t\t\t.map((record) => record.operation)\n\t\t\t\t.join(\", \")}`,\n\t\t);\n\t}\n\n\tprivate async refreshWorkerSummaries(worker: ResidentWorker, recovery = false): Promise<void> {\n\t\tif (this.isWorkerStopping(worker)) {\n\t\t\tthrow new Error(\"Session worker is stopping\");\n\t\t}\n\t\tif (!worker.client) {\n\t\t\tthrow new Error(\"Session worker is not connected\");\n\t\t}\n\t\tconst response = await worker.client.request({ type: \"list\" }, 5000);\n\t\tconst summaries = sessionSummariesFromResponse(response);\n\t\tworker.summaries = new Map(summaries.map((summary) => [summary.activeSessionId ?? summary.id, summary]));\n\t\tfor (const summary of summaries) {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\tif (summary.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamReconstructor.seed(activeSessionId, summary.streamingMessage);\n\t\t\t} else if (!summary.isStreaming) {\n\t\t\t\tthis.streamReconstructor.clear(activeSessionId);\n\t\t\t}\n\t\t}\n\t\tconst root = worker.summaries.get(worker.descriptor.rootActiveSessionId);\n\t\tif (root) {\n\t\t\tif (recovery) {\n\t\t\t\tawait this.assertRecoveryAllowed();\n\t\t\t}\n\t\t\tworker.descriptor.rootSessionId = root.sessionId;\n\t\t\tworker.descriptor.sessionFile = root.sessionFile;\n\t\t\tworker.descriptor.createCommand = durableDaemonCreateCommand({\n\t\t\t\ttype: \"create\",\n\t\t\t\tsessionPath: root.sessionFile,\n\t\t\t\tnoSession: worker.descriptor.createCommand.noSession,\n\t\t\t});\n\t\t\tthis.persistWorker(worker);\n\t\t}\n\t}\n\n\tprivate async familyCatalogEntries(): Promise<AgentFamilyCatalogEntry[]> {\n\t\tconst active = [...this.workers.values()].flatMap((worker) => [...worker.summaries.values()]);\n\t\tconst activePaths = new Set(\n\t\t\tactive.flatMap((summary) => (summary.sessionFile ? [canonicalSessionPath(summary.sessionFile)] : [])),\n\t\t);\n\t\tconst savedRoots = (await this.catalog.list()).filter(\n\t\t\t(info) =>\n\t\t\t\t(info.rlmDepth ?? (info.parentSessionPath ? -1 : 0)) === 0 &&\n\t\t\t\t!activePaths.has(canonicalSessionPath(info.path)),\n\t\t);\n\t\treturn [...active, ...savedRoots.map((info) => summaryForInactiveSession(info))].map((summary) =>\n\t\t\tthis.familyCatalogEntry(summary),\n\t\t);\n\t}\n\n\tprivate async withSessionNameReservation<T>(\n\t\tinput: { name: string; depth: number; parentSessionId?: string; parentSessionPath?: string },\n\t\taction: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst key = sessionNameReservationKey(input);\n\t\tif (this.pendingSessionNames.has(key)) {\n\t\t\tthrow new Error(formatAgentSessionNameUnavailable(input.name, input.depth));\n\t\t}\n\t\tthis.pendingSessionNames.add(key);\n\t\ttry {\n\t\t\treturn await action();\n\t\t} finally {\n\t\t\tthis.pendingSessionNames.delete(key);\n\t\t}\n\t}\n\n\tprivate async assertSupervisorSessionNameAvailable(\n\t\ttarget: Pick<SessionSummary, \"sessionId\" | \"rlmDepth\" | \"parentSessionId\" | \"parentSessionPath\">,\n\t\tname: string,\n\t): Promise<void> {\n\t\tassertAgentSessionNameAvailable(await this.familyCatalogEntries(), {\n\t\t\tname,\n\t\t\tdepth: target.rlmDepth ?? 0,\n\t\t\tparentSessionId: target.parentSessionId,\n\t\t\tparentSessionPath: target.parentSessionPath ? canonicalSessionPath(target.parentSessionPath) : undefined,\n\t\t\tignoreSessionId: target.sessionId,\n\t\t});\n\t}\n\n\t/**\n\t * Supervisor-side view of the spawn ledger for this supervisor's sessions\n\t * dir. Workers hold their own instances over the same file; every read\n\t * re-reads the file, so cross-process freshness is per-operation.\n\t */\n\tprivate rlmSpawnLedger(): RlmSpawnLedger {\n\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tthis.rlmSpawnLedgerInstance ??= new RlmSpawnLedger(\n\t\t\tagentDir,\n\t\t\tthis.defaultSessionConfig.sessionDir ?? getSessionsDir(agentDir),\n\t\t\tcreateRlmLedgerRegistrySeedSource(),\n\t\t\t(message) => this.log(message),\n\t\t);\n\t\treturn this.rlmSpawnLedgerInstance;\n\t}\n\n\t/**\n\t * Ledger-backed same-parent rows for name reservation and admission. Rows\n\t * carry ledger topology plus best-effort display fields; consumers here\n\t * only need id/path/name/depth/parent.\n\t */\n\tprivate rlmLedgerSiblings(sessionPath: string): Promise<SessionInfo[]> {\n\t\treturn this.rlmSpawnLedger().siblings(sessionPath);\n\t}\n\n\tprivate async savedSessionNameReservationInput(\n\t\tsessionPath: string,\n\t\tname: string,\n\t): Promise<{ name: string; depth: number; parentSessionId?: string; parentSessionPath?: string }> {\n\t\tconst targetPath = canonicalSessionPath(sessionPath);\n\t\tconst active = [...this.workers.values()]\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.find((summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === targetPath);\n\t\tif (active) return this.summaryNameReservationInput(active, name);\n\t\tconst siblings = await this.rlmLedgerSiblings(sessionPath);\n\t\tconst saved = siblings.find((info) => canonicalSessionPath(info.path) === targetPath);\n\t\tif (!saved) throw new Error(`Session not found: ${sessionPath}`);\n\t\treturn {\n\t\t\tname,\n\t\t\tdepth: saved.rlmDepth ?? siblings.find((sibling) => sibling.rlmDepth !== undefined)?.rlmDepth ?? 0,\n\t\t\tparentSessionPath: saved.parentSessionPath,\n\t\t};\n\t}\n\n\tprivate summaryNameReservationInput(\n\t\ttarget: Pick<SessionSummary, \"rlmDepth\" | \"parentSessionId\" | \"parentSessionPath\">,\n\t\tname: string,\n\t): { name: string; depth: number; parentSessionId?: string; parentSessionPath?: string } {\n\t\tconst depth = target.rlmDepth ?? (target.parentSessionPath ? 1 : 0);\n\t\treturn {\n\t\t\tname,\n\t\t\tdepth,\n\t\t\t...(depth > 0 && target.parentSessionId ? { parentSessionId: target.parentSessionId } : {}),\n\t\t\t...(depth > 0 && target.parentSessionPath ? { parentSessionPath: target.parentSessionPath } : {}),\n\t\t};\n\t}\n\n\tprivate async assertSupervisorSavedSessionNameAvailable(sessionPath: string, name: string): Promise<void> {\n\t\tconst targetPath = canonicalSessionPath(sessionPath);\n\t\tconst active = [...this.workers.values()]\n\t\t\t.flatMap((worker) => [...worker.summaries.values()])\n\t\t\t.find((summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === targetPath);\n\t\tif (active) return this.assertSupervisorSessionNameAvailable(active, name);\n\t\tconst siblings = await this.rlmLedgerSiblings(sessionPath);\n\t\tconst saved = siblings.find((info) => canonicalSessionPath(info.path) === targetPath);\n\t\tif (!saved) throw new Error(`Session not found: ${sessionPath}`);\n\t\tif (saved.parentSessionPath && (saved.rlmDepth ?? 0) > 0) {\n\t\t\tthis.assertSavedSiblingNameAvailable(siblings, saved, name);\n\t\t} else {\n\t\t\tawait this.assertSupervisorSessionNameAvailable(summaryForInactiveSession(saved), name);\n\t\t}\n\t}\n\n\tprivate assertSavedSiblingNameAvailable(siblings: SessionInfo[], target: SessionInfo, name: string): void {\n\t\tconst setDepth = target.rlmDepth ?? siblings.find((sibling) => sibling.rlmDepth !== undefined)?.rlmDepth ?? 0;\n\t\tassertAgentSessionNameAvailable(\n\t\t\tsiblings.map((info) => {\n\t\t\t\tconst summary = summaryForInactiveSession(info);\n\t\t\t\treturn {\n\t\t\t\t\tid: summary.sessionId,\n\t\t\t\t\t...(summary.sessionName ? { name: summary.sessionName } : {}),\n\t\t\t\t\tdepth: setDepth,\n\t\t\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t\t\t...(summary.parentSessionPath\n\t\t\t\t\t\t? { parentSessionPath: canonicalSessionPath(summary.parentSessionPath) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\tdepth: setDepth,\n\t\t\t\tparentSessionPath: target.parentSessionPath ? canonicalSessionPath(target.parentSessionPath) : undefined,\n\t\t\t\tignoreSessionId: target.id,\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate isVisibleWorker(worker: ResidentWorker): boolean {\n\t\treturn worker.descriptor.ownerClientId === undefined;\n\t}\n\n\t/** A worker with a durable or in-memory stop intent is stopping, never live. */\n\tprivate isWorkerStopping(worker: ResidentWorker): boolean {\n\t\treturn worker.intentionalStop || worker.descriptor.stopRequestedAt !== undefined;\n\t}\n\n\t/** Live workers are visible to all clients and not stopping. */\n\tprivate isLiveWorker(worker: ResidentWorker): boolean {\n\t\treturn this.isVisibleWorker(worker) && !this.isWorkerStopping(worker);\n\t}\n\n\t/**\n\t * The lifecycle reported to clients. A stop intent always wins, and a worker\n\t * whose process connection is gone is never reported as \"ready\".\n\t */\n\tprivate effectiveWorkerState(worker: ResidentWorker): DaemonWorkerLifecycle {\n\t\tif (this.isWorkerStopping(worker)) {\n\t\t\treturn \"stopping\";\n\t\t}\n\t\tif (worker.descriptor.lifecycle === \"ready\" && worker.client === undefined) {\n\t\t\treturn \"recovering\";\n\t\t}\n\t\treturn worker.descriptor.lifecycle;\n\t}\n\n\tprivate requireAvailableWorkerClient(worker: ResidentWorker, allowStopping = false): DaemonWorkerClient {\n\t\tif (\n\t\t\t!worker.client ||\n\t\t\tworker.descriptor.lifecycle !== \"ready\" ||\n\t\t\t(!allowStopping && this.isWorkerStopping(worker))\n\t\t) {\n\t\t\tthrow new Error(`Session worker is ${this.effectiveWorkerState(worker)}`);\n\t\t}\n\t\treturn worker.client;\n\t}\n\n\tprivate familyCatalogEntry(summary: SessionSummary): AgentFamilyCatalogEntry {\n\t\tconst depth = summary.rlmDepth ?? (summary.parentSessionPath ? 1 : 0);\n\t\treturn {\n\t\t\tid: summary.sessionId,\n\t\t\t...(summary.sessionName ? { name: summary.sessionName } : {}),\n\t\t\tdepth,\n\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t...(depth > 0 && summary.parentSessionId ? { parentSessionId: summary.parentSessionId } : {}),\n\t\t\t...(depth > 0 && summary.parentSessionPath\n\t\t\t\t? { parentSessionPath: canonicalSessionPath(summary.parentSessionPath) }\n\t\t\t\t: {}),\n\t\t\t...(summary.sessionFile ? { sessionPath: canonicalSessionPath(summary.sessionFile) } : {}),\n\t\t};\n\t}\n\n\tprivate agentPeerSummary(summary: SessionSummary): AgentSessionMessageAgentSummary {\n\t\treturn {\n\t\t\tactiveSessionId: summary.activeSessionId ?? summary.id,\n\t\t\tsessionId: summary.sessionId,\n\t\t\t...(summary.sessionName ? { sessionName: summary.sessionName } : {}),\n\t\t\truntimeKind: summary.runtimeKind ?? \"top-level\",\n\t\t\tcwd: summary.cwd,\n\t\t\tisStreaming: summary.isStreaming,\n\t\t\tunfinishedActionCount:\n\t\t\t\tsummary.unfinishedActionCount ??\n\t\t\t\t(summary.sessionActions.active\n\t\t\t\t\t? 1 + summary.sessionActions.queuedCount\n\t\t\t\t\t: summary.sessionActions.queuedCount),\n\t\t\t...(summary.parentActiveSessionId ? { parentActiveSessionId: summary.parentActiveSessionId } : {}),\n\t\t\t...(summary.parentSessionId ? { parentSessionId: summary.parentSessionId } : {}),\n\t\t\t...(summary.parentSessionPath ? { parentSessionPath: summary.parentSessionPath } : {}),\n\t\t\t...(summary.sessionFile ? { sessionPath: summary.sessionFile } : {}),\n\t\t\t...(summary.rlmDepth !== undefined ? { rlmDepth: summary.rlmDepth } : {}),\n\t\t\tstatus: classifySessionRosterStatus(summary),\n\t\t\t...(summary.rlmChildId ? { rlmChildId: summary.rlmChildId } : {}),\n\t\t};\n\t}\n\n\tprivate publicSummary(worker: ResidentWorker, summary: SessionSummary): SessionSummary {\n\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\treturn {\n\t\t\t...summary,\n\t\t\tattachedClients: [...this.clients].filter((client) => client.attachedActiveSessionIds.has(activeSessionId))\n\t\t\t\t.length,\n\t\t\tworkerState: this.effectiveWorkerState(worker),\n\t\t\tworkerPid: worker.descriptor.pid,\n\t\t};\n\t}\n\n\tprivate async findWorker(\n\t\tselector: string,\n\t\tincludeWorker?: (worker: ResidentWorker) => boolean,\n\t): Promise<WorkerMatch> {\n\t\tlet matches = this.matchWorkers(selector, includeWorker);\n\t\tif (matches.length === 0) {\n\t\t\tawait Promise.all(\n\t\t\t\t[...this.workers.values()].map((worker) => this.refreshWorkerSummaries(worker).catch(() => undefined)),\n\t\t\t);\n\t\t\tmatches = this.matchWorkers(selector, includeWorker);\n\t\t}\n\t\tif (matches.length === 1) {\n\t\t\treturn matches[0]!;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tthrow new Error(`Ambiguous active session \"${selector}\"`);\n\t\t}\n\t\tthrow new Error(`Unknown active session: ${selector}`);\n\t}\n\n\tprivate findWorkerForClient(client: DaemonSocketClient, selector: string): Promise<WorkerMatch> {\n\t\treturn this.findWorker(selector, (worker) => this.isWorkerAccessibleToClient(client, worker));\n\t}\n\n\tprivate isWorkerAccessibleToClient(client: DaemonSocketClient, worker: ResidentWorker): boolean {\n\t\treturn (\n\t\t\tworker.descriptor.ownerClientId === undefined ||\n\t\t\tworker.descriptor.ownerClientId === this.protocolClientId(client)\n\t\t);\n\t}\n\n\tprivate assertWorkerAccessibleToClient(client: DaemonSocketClient, worker: ResidentWorker, selector: string): void {\n\t\tif (!this.isWorkerAccessibleToClient(client, worker)) {\n\t\t\tthrow new Error(`Unknown active session: ${selector}`);\n\t\t}\n\t}\n\n\tprivate matchWorkers(selector: string, includeWorker?: (worker: ResidentWorker) => boolean): WorkerMatch[] {\n\t\tconst exact: WorkerMatch[] = [];\n\t\tconst suffix: WorkerMatch[] = [];\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (includeWorker && !includeWorker(worker)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const summary of worker.summaries.values()) {\n\t\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\t\tconst match = { worker, summary };\n\t\t\t\tif (activeSessionId === selector || summary.sessionId === selector || summary.sessionName === selector) {\n\t\t\t\t\texact.push(match);\n\t\t\t\t} else if (\n\t\t\t\t\tmatchesSessionIdSuffix(activeSessionId, selector) ||\n\t\t\t\t\tmatchesSessionIdSuffix(summary.sessionId, selector)\n\t\t\t\t) {\n\t\t\t\t\tsuffix.push(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn exact.length > 0 ? exact : suffix;\n\t}\n\n\tprivate findSummaryInWorker(worker: ResidentWorker, selector: string): SessionSummary | undefined {\n\t\tconst pathSelector = looksLikeSessionPath(selector) ? canonicalSessionPath(selector) : undefined;\n\t\tconst summaries = [...worker.summaries.values()];\n\t\tconst exact = summaries.find((summary) => {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\treturn (\n\t\t\t\tactiveSessionId === selector ||\n\t\t\t\tsummary.sessionId === selector ||\n\t\t\t\tsummary.sessionName === selector ||\n\t\t\t\t(pathSelector !== undefined &&\n\t\t\t\t\tsummary.sessionFile !== undefined &&\n\t\t\t\t\tcanonicalSessionPath(summary.sessionFile) === pathSelector)\n\t\t\t);\n\t\t});\n\t\tif (exact) return exact;\n\t\treturn summaries.find((summary) => {\n\t\t\tconst activeSessionId = summary.activeSessionId ?? summary.id;\n\t\t\treturn (\n\t\t\t\tmatchesSessionIdSuffix(activeSessionId, selector) || matchesSessionIdSuffix(summary.sessionId, selector)\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate findWorkerBySessionFile(sessionFile: string): ResidentWorker | undefined {\n\t\tconst target = canonicalSessionPath(sessionFile);\n\t\tconst matches = new Set<ResidentWorker>();\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tconst summaryMatches = [...worker.summaries.values()].some(\n\t\t\t\t(summary) => summary.sessionFile && canonicalSessionPath(summary.sessionFile) === target,\n\t\t\t);\n\t\t\tconst descriptorPath = worker.descriptor.sessionFile\n\t\t\t\t? canonicalSessionPath(worker.descriptor.sessionFile)\n\t\t\t\t: undefined;\n\t\t\tconst configuredPath = worker.descriptor.createCommand.sessionPath\n\t\t\t\t? canonicalSessionPath(worker.descriptor.createCommand.sessionPath)\n\t\t\t\t: undefined;\n\t\t\tif (!summaryMatches && descriptorPath !== target && configuredPath !== target) continue;\n\t\t\tif (descriptorPath && configuredPath && descriptorPath !== configuredPath) {\n\t\t\t\tthrow new Error(`Conflicting resident session paths for worker ${worker.descriptor.workerId}`);\n\t\t\t}\n\t\t\tmatches.add(worker);\n\t\t}\n\t\tif (matches.size > 1) {\n\t\t\tthrow new Error(`Ambiguous resident session path \"${sessionFile}\"`);\n\t\t}\n\t\treturn matches.values().next().value;\n\t}\n\n\tprivate async forwardToWorker(\n\t\tworker: ResidentWorker,\n\t\tcommand: DaemonCommand,\n\t\ttimeoutMs = WORKER_REQUEST_TIMEOUT_MS,\n\t): Promise<DaemonResponse> {\n\t\tconst client = this.requireAvailableWorkerClient(worker, command.type === \"kill\");\n\t\tconst response = await client.request(withoutCommandId(command), timeoutMs);\n\t\tif (command.type === \"get_state\" && response.success && isSessionSummary(response.data)) {\n\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t}\n\t\tif (command.type === \"rename\" && response.success && isSessionSummary(response.data)) {\n\t\t\tawait this.refreshWorkerSummaries(worker);\n\t\t\treturn { ...response, id: command.id, data: this.publicSummary(worker, response.data) };\n\t\t}\n\t\treturn responseWithId(response, command.id);\n\t}\n\n\tprivate async attachClient(\n\t\tclient: DaemonSocketClient,\n\t\tcommand: Extract<DaemonCommand, { type: \"attach\" }>,\n\t): Promise<WorkerAttachData> {\n\t\tconst ownedWorker = [...this.workers.values()].find(\n\t\t\t(worker) =>\n\t\t\t\tworker.descriptor.ownerClientId !== undefined &&\n\t\t\t\t(worker.descriptor.rootActiveSessionId === command.activeSessionId ||\n\t\t\t\t\tworker.descriptor.rootSessionId === command.activeSessionId),\n\t\t);\n\t\tif (ownedWorker) {\n\t\t\tif (ownedWorker.descriptor.ownerClientId !== this.protocolClientId(client)) {\n\t\t\t\tthrow new Error(`Unknown active session: ${command.activeSessionId}`);\n\t\t\t}\n\t\t\townedWorker.launchEnv = command.launchEnv ?? ownedWorker.launchEnv;\n\t\t\tif (!ownedWorker.client || ownedWorker.descriptor.lifecycle !== \"ready\") {\n\t\t\t\tif (command.recoveryConfig) {\n\t\t\t\t\townedWorker.transientCreateCommand = {\n\t\t\t\t\t\t...ownedWorker.descriptor.createCommand,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t...command.recoveryConfig,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenv: command.env,\n\t\t\t\t\t\tlaunchEnv: command.launchEnv,\n\t\t\t\t\t\tlifecycle: \"client_owned\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (!ownedWorker.launchEnv) {\n\t\t\t\t\tthrow new Error(\"Client-owned session recovery requires the owning client environment\");\n\t\t\t\t}\n\t\t\t\townedWorker.intentionalStop = false;\n\t\t\t\townedWorker.descriptor.stopRequestedAt = undefined;\n\t\t\t\townedWorker.descriptor.archiveOnStop = undefined;\n\t\t\t\townedWorker.descriptor.lifecycle = \"recovering\";\n\t\t\t\townedWorker.descriptor.consecutiveFailures = 0;\n\t\t\t\tthis.persistWorker(ownedWorker);\n\t\t\t\tawait this.recoverWorker(ownedWorker);\n\t\t\t}\n\t\t}\n\t\tconst match = await this.findWorkerForClient(client, command.activeSessionId);\n\t\tthis.requireAvailableWorkerClient(match.worker);\n\t\tconst activeSessionId = match.summary.activeSessionId ?? match.summary.id;\n\t\tconst duplicateValidation = this.currentSnapshotGeneration(match.worker, activeSessionId)?.validation;\n\t\tif (duplicateValidation) {\n\t\t\tawait duplicateValidation.promise;\n\t\t}\n\t\tif (command.clientId) {\n\t\t\tclient.id = command.clientId;\n\t\t}\n\t\tclient.capabilities = normalizeCapabilities(command.capabilities, command.supportsExtensionUi);\n\t\tclient.supportsExtensionUi = client.capabilities.has(\"extension_ui\");\n\n\t\tlet result = match.worker.snapshotCache.get(activeSessionId);\n\t\tif (\n\t\t\tresult &&\n\t\t\t!client.capabilities.has(\"chunked_snapshot\") &&\n\t\t\tresult.snapshot.messages.length < result.snapshot.summary.messageCount\n\t\t) {\n\t\t\tresult = undefined;\n\t\t}\n\t\tif (!result) {\n\t\t\tconst snapshotLoadKey = `${activeSessionId}:${client.capabilities.has(\"chunked_snapshot\") ? \"chunked\" : \"full\"}`;\n\t\t\tlet retryInvalidatedLoad = true;\n\t\t\twhile (!result) {\n\t\t\t\tlet loading = match.worker.snapshotLoads.get(snapshotLoadKey);\n\t\t\t\tif (!loading) {\n\t\t\t\t\tconst observedSnapshotId =\n\t\t\t\t\t\tmatch.worker.transcriptCaches.get(activeSessionId)?.snapshotId ??\n\t\t\t\t\t\tmatch.worker.snapshotCache.get(activeSessionId)?.snapshotStream?.id;\n\t\t\t\t\tloading = (async () => {\n\t\t\t\t\t\tconst workerClient = this.requireAvailableWorkerClient(match.worker);\n\t\t\t\t\t\tconst response = await workerClient.request({\n\t\t\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tcapabilities: client.capabilities.has(\"chunked_snapshot\")\n\t\t\t\t\t\t\t\t? [\"attach_snapshot\", \"event_sequence\", \"slim_attach\", \"chunked_snapshot\"]\n\t\t\t\t\t\t\t\t: [\"attach_snapshot\", \"event_sequence\", \"slim_attach\"],\n\t\t\t\t\t\t\tsupportsExtensionUi: false,\n\t\t\t\t\t\t\tenv: command.env ?? collectDaemonClientEnv(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst loaded = attachResultFromResponse(response);\n\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) !== loading) {\n\t\t\t\t\t\t\tthrow new SnapshotLoadInvalidatedError(\"Session snapshot changed during attach\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this.cacheLoadedSnapshot(match.worker, activeSessionId, loaded, observedSnapshotId);\n\t\t\t\t\t})();\n\t\t\t\t\tmatch.worker.snapshotLoads.set(snapshotLoadKey, loading);\n\t\t\t\t\tvoid loading.then(\n\t\t\t\t\t\tasync (loaded) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst snapshotId = loaded.snapshotStream?.id;\n\t\t\t\t\t\t\t\tconst transcript = snapshotId\n\t\t\t\t\t\t\t\t\t? this.snapshotGeneration(match.worker, loaded.activeSessionId, snapshotId)?.transcript\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\tif (transcript && !transcript.complete) {\n\t\t\t\t\t\t\t\t\tlet chunkIndex = 0;\n\t\t\t\t\t\t\t\t\twhile (await transcript.waitForChunk(chunkIndex)) {\n\t\t\t\t\t\t\t\t\t\tchunkIndex++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// Failed transfers must allow a fresh snapshot request.\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) === loading) {\n\t\t\t\t\t\t\t\t\tmatch.worker.snapshotLoads.delete(snapshotLoadKey);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tif (match.worker.snapshotLoads.get(snapshotLoadKey) === loading) {\n\t\t\t\t\t\t\t\tmatch.worker.snapshotLoads.delete(snapshotLoadKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresult = await loading;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!(error instanceof SnapshotLoadInvalidatedError)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tif (!retryInvalidatedLoad) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tretryInvalidatedLoad = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.requireAvailableWorkerClient(match.worker);\n\t\tconst wasAttached = client.attachedActiveSessionIds.has(activeSessionId);\n\t\tlet transcript: SnapshotTranscriptCache | undefined;\n\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\twhile (true) {\n\t\t\t\tconst validation = this.currentSnapshotGeneration(match.worker, activeSessionId)?.validation;\n\t\t\t\tif (validation) {\n\t\t\t\t\tawait validation.promise;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tresult = match.worker.snapshotCache.get(activeSessionId) ?? result;\n\t\t\t\ttranscript = this.getOrCreateTranscriptCache(match.worker, result);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst releaseTranscript = transcript?.retain();\n\t\tclient.attachedActiveSessionIds.add(activeSessionId);\n\t\ttry {\n\t\t\tconst publicSummary = this.publicSummary(match.worker, result.snapshot.summary);\n\t\t\tif (publicSummary.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamReconstructor.seed(activeSessionId, publicSummary.streamingMessage);\n\t\t\t} else {\n\t\t\t\tfor (let index = result.snapshot.messages.length - 1; index >= 0; index--) {\n\t\t\t\t\tconst latestMessage = result.snapshot.messages[index];\n\t\t\t\t\tif (latestMessage?.role === \"assistant\") {\n\t\t\t\t\t\tthis.streamReconstructor.seed(activeSessionId, latestMessage);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst publicResult: DaemonAttachResult = {\n\t\t\t\t...result,\n\t\t\t\tstate: result.state ? publicSummary : undefined,\n\t\t\t\tsnapshot: { ...result.snapshot, summary: publicSummary },\n\t\t\t\tclient: { id: client.id, capabilities: [...client.capabilities] },\n\t\t\t};\n\t\t\tif (publicResult.state && publicResult.messages) {\n\t\t\t\tthis.write(client, {\n\t\t\t\t\ttype: \"session_attached\",\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tstate: publicResult.state,\n\t\t\t\t\tmessages: publicResult.messages,\n\t\t\t\t\tsnapshot: publicResult.snapshot,\n\t\t\t\t\treplay: publicResult.replay,\n\t\t\t\t\tlastEventSequence: publicResult.lastEventSequence,\n\t\t\t\t});\n\t\t\t}\n\t\t\tvoid this.syncWorkerExtensionUi(activeSessionId);\n\t\t\tconst detachingSessions = this.detachingInputPauseSessions?.get(client);\n\t\t\tdetachingSessions?.delete(command.activeSessionId);\n\t\t\tdetachingSessions?.delete(activeSessionId);\n\t\t\treturn { result: publicResult, worker: match.worker, transcript, releaseTranscript };\n\t\t} catch (error) {\n\t\t\treleaseTranscript?.();\n\t\t\tif (!wasAttached) {\n\t\t\t\tclient.attachedActiveSessionIds.delete(activeSessionId);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate cacheLoadedSnapshot(\n\t\tworker: ResidentWorker,\n\t\tactiveSessionId: string,\n\t\tloaded: DaemonAttachResult,\n\t\tobservedSnapshotId: string | undefined,\n\t): DaemonAttachResult {\n\t\tconst currentTranscript = worker.transcriptCaches.get(activeSessionId);\n\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\tconst currentResult = currentGeneration?.result ?? worker.snapshotCache.get(activeSessionId);\n\t\tconst currentSnapshotId = currentTranscript?.snapshotId ?? currentResult?.snapshotStream?.id;\n\t\tconst loadedSnapshotId = loaded.snapshotStream?.id;\n\t\tif (!loaded.snapshotStream) {\n\t\t\tif (currentSnapshotId && currentSnapshotId !== observedSnapshotId) {\n\t\t\t\treturn loaded;\n\t\t\t}\n\t\t\tworker.snapshotCache.set(activeSessionId, loaded);\n\t\t\treturn loaded;\n\t\t}\n\t\tif (\n\t\t\tcurrentSnapshotId &&\n\t\t\tcurrentSnapshotId !== loadedSnapshotId &&\n\t\t\t(currentSnapshotId !== observedSnapshotId ||\n\t\t\t\t(currentResult?.lastEventSequence ?? -1) > loaded.lastEventSequence)\n\t\t) {\n\t\t\treturn currentResult ?? loaded;\n\t\t}\n\t\tlet transcript = currentTranscript;\n\t\tif (transcript && transcript.snapshotId !== loaded.snapshotStream.id) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, transcript);\n\t\t\ttranscript = undefined;\n\t\t}\n\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\tlet generation = generations.get(loaded.snapshotStream.id);\n\t\tif (!transcript) {\n\t\t\ttranscript = generation?.transcript;\n\t\t}\n\t\tif (!transcript) {\n\t\t\ttranscript = new SnapshotTranscriptCache({\n\t\t\t\tactiveSessionId,\n\t\t\t\tsnapshotId: loaded.snapshotStream.id,\n\t\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\t\ttargetChunkBytes: loaded.snapshotStream.targetChunkBytes,\n\t\t\t});\n\t\t}\n\t\tif (!generation) {\n\t\t\tgeneration = {\n\t\t\t\ttranscript,\n\t\t\t\tresult: loaded,\n\t\t\t\tincoming: false,\n\t\t\t\tretired: false,\n\t\t\t};\n\t\t\tgenerations.set(loaded.snapshotStream.id, generation);\n\t\t} else {\n\t\t\tgeneration.result = loaded;\n\t\t\tgeneration.retired = false;\n\t\t}\n\t\tworker.transcriptCaches.set(activeSessionId, transcript);\n\t\tworker.snapshotCache.set(activeSessionId, loaded);\n\t\treturn loaded;\n\t}\n\n\tprivate getOrCreateTranscriptCache(worker: ResidentWorker, result: DaemonAttachResult): SnapshotTranscriptCache {\n\t\tconst activeSessionId = result.activeSessionId;\n\t\tconst existing = worker.transcriptCaches.get(activeSessionId);\n\t\tif (existing && (!result.snapshotStream || existing.snapshotId === result.snapshotStream.id)) {\n\t\t\treturn existing;\n\t\t}\n\t\tif (result.snapshot.messages.length < result.snapshot.summary.messageCount) {\n\t\t\tthrow new Error(\"Session snapshot generation changed before its transcript could be selected\");\n\t\t}\n\t\tif (existing) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, existing);\n\t\t}\n\t\tconst revision = createHash(\"sha256\")\n\t\t\t.update(\n\t\t\t\t`${activeSessionId}:${result.snapshot.summary.sessionId}:${result.lastEventSequence}:${result.snapshot.messages.length}`,\n\t\t\t)\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 16);\n\t\tconst transcript = new SnapshotTranscriptCache({\n\t\t\tactiveSessionId,\n\t\t\tsnapshotId: `${activeSessionId}-${revision}`,\n\t\t\tmessages: result.snapshot.messages,\n\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\ttargetChunkBytes: SNAPSHOT_TARGET_CHUNK_BYTES,\n\t\t});\n\t\tworker.transcriptCaches.set(activeSessionId, transcript);\n\t\tconst cachedResult = {\n\t\t\t...result,\n\t\t\tmessages: result.messages ? [] : undefined,\n\t\t\tsnapshot: { ...result.snapshot, messages: [] },\n\t\t};\n\t\tworker.snapshotCache.set(activeSessionId, cachedResult);\n\t\tthis.snapshotGenerationsFor(worker, activeSessionId).set(transcript.snapshotId, {\n\t\t\ttranscript,\n\t\t\tresult: cachedResult,\n\t\t\tincoming: false,\n\t\t\tretired: false,\n\t\t});\n\t\treturn transcript;\n\t}\n\n\tprivate createStreamedAttachResult(\n\t\tresult: DaemonAttachResult,\n\t\ttranscript: SnapshotTranscriptCache,\n\t): DaemonAttachResult {\n\t\treturn {\n\t\t\t...result,\n\t\t\tmessages: result.messages ? [] : undefined,\n\t\t\tsnapshot: { ...result.snapshot, messages: [] },\n\t\t\tsnapshotStream: {\n\t\t\t\tid: transcript.snapshotId,\n\t\t\t\tmessageCount: result.snapshot.summary.messageCount,\n\t\t\t\ttargetChunkBytes: transcript.targetChunkBytes,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async streamSnapshot(\n\t\tclient: DaemonSocketClient,\n\t\tworker: ResidentWorker,\n\t\tresult: DaemonAttachResult,\n\t\ttranscript: SnapshotTranscriptCache,\n\t\tpurpose: \"attach\" | \"replacement\" | \"resync\" = \"attach\",\n\t\tretainedTranscriptRelease?: () => void,\n\t\treleaseSnapshotReservation = this.reserveSnapshotStream(client, result.activeSessionId),\n\t): Promise<void> {\n\t\tconst stream = result.snapshotStream;\n\t\tconst releaseTranscript = retainedTranscriptRelease ?? transcript.retain();\n\t\tif (!stream || client.socket.destroyed) {\n\t\t\treleaseSnapshotReservation();\n\t\t\treleaseTranscript();\n\t\t\treturn;\n\t\t}\n\t\tconst { messages: _messages, ...snapshotHeader } = result.snapshot;\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!(await this.writeSnapshotRecord(client, {\n\t\t\t\t\ttype: \"session_snapshot_begin\",\n\t\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\t\tsnapshotId: stream.id,\n\t\t\t\t\tsnapshot: snapshotHeader,\n\t\t\t\t\tmessageCount: stream.messageCount,\n\t\t\t\t\ttargetChunkBytes: stream.targetChunkBytes,\n\t\t\t\t\tpurpose,\n\t\t\t\t}))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet chunkCount = 0;\n\t\t\twhile (true) {\n\t\t\t\tlet chunk: Buffer | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tchunk = await transcript.waitForChunk(chunkCount);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst streamError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\tthis.failWorkerSnapshotCache(worker, result.activeSessionId, streamError, false, stream.id);\n\t\t\t\t\tthrow streamError;\n\t\t\t\t}\n\t\t\t\tif (!chunk) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!(await this.writeSnapshotBuffer(client, chunk))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchunkCount++;\n\t\t\t}\n\t\t\tawait this.writeSnapshotRecord(client, {\n\t\t\t\ttype: \"session_snapshot_end\",\n\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\tsnapshotId: stream.id,\n\t\t\t\tchunkCount,\n\t\t\t\tlastEventSequence: result.lastEventSequence,\n\t\t\t\tlastEventCursor: result.lastEventCursor,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst streamError = error instanceof Error ? error : new Error(String(error));\n\t\t\tif (!client.socket.destroyed) {\n\t\t\t\ttry {\n\t\t\t\t\tconst delivered = await this.writeSnapshotRecord(client, {\n\t\t\t\t\t\ttype: \"session_snapshot_failed\",\n\t\t\t\t\t\tactiveSessionId: result.activeSessionId,\n\t\t\t\t\t\tsnapshotId: stream.id,\n\t\t\t\t\t\terror: streamError.message,\n\t\t\t\t\t});\n\t\t\t\t\tif (!delivered && !client.socket.destroyed) {\n\t\t\t\t\t\tclient.socket.destroy(streamError);\n\t\t\t\t\t}\n\t\t\t\t} catch (deliveryError) {\n\t\t\t\t\tclient.socket.destroy(deliveryError instanceof Error ? deliveryError : new Error(String(deliveryError)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow streamError;\n\t\t} finally {\n\t\t\treleaseSnapshotReservation();\n\t\t\treleaseTranscript();\n\t\t}\n\t}\n\n\tprivate reserveSnapshotStream(client: DaemonSocketClient, activeSessionId: string): () => void {\n\t\tclient.snapshotStreaming = true;\n\t\tclient.snapshotActiveSessionIds ??= new Set();\n\t\tclient.snapshotActiveSessionIds.add(activeSessionId);\n\t\tclient.snapshotActiveSessionCounts ??= new Map();\n\t\tclient.snapshotActiveSessionCounts.set(\n\t\t\tactiveSessionId,\n\t\t\t(client.snapshotActiveSessionCounts.get(activeSessionId) ?? 0) + 1,\n\t\t);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treleased = true;\n\t\t\tconst streamCount = client.snapshotActiveSessionCounts?.get(activeSessionId) ?? 1;\n\t\t\tif (streamCount > 1) {\n\t\t\t\tclient.snapshotActiveSessionCounts?.set(activeSessionId, streamCount - 1);\n\t\t\t} else {\n\t\t\t\tclient.snapshotActiveSessionCounts?.delete(activeSessionId);\n\t\t\t\tclient.snapshotActiveSessionIds?.delete(activeSessionId);\n\t\t\t}\n\t\t\tclient.snapshotStreaming = (client.snapshotActiveSessionIds?.size ?? 0) > 0;\n\t\t\tif (!client.snapshotStreaming) {\n\t\t\t\tclient.backpressured = false;\n\t\t\t}\n\t\t\tif (!client.snapshotStreaming && client.catchupActiveSessionIds?.size) {\n\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate writeSnapshotRecord(client: DaemonSocketClient, message: DaemonOutbound): Promise<boolean> {\n\t\treturn this.writeSnapshotBuffer(client, Buffer.from(serializeJsonLine(message)));\n\t}\n\n\tprivate async writeSnapshotBuffer(client: DaemonSocketClient, buffer: Uint8Array): Promise<boolean> {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.writeSerialized(client, buffer)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn new Promise<boolean>((resolveDrain) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: boolean) => {\n\t\t\t\tif (settled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsettled = true;\n\t\t\t\tclient.socket.off(\"drain\", onDrain);\n\t\t\t\tclient.socket.off(\"close\", onClose);\n\t\t\t\tclient.socket.off(\"error\", onClose);\n\t\t\t\tresolveDrain(value);\n\t\t\t};\n\t\t\tconst onDrain = () => finish(true);\n\t\t\tconst onClose = () => finish(false);\n\t\t\tclient.socket.once(\"drain\", onDrain);\n\t\t\tclient.socket.once(\"close\", onClose);\n\t\t\tclient.socket.once(\"error\", onClose);\n\t\t});\n\t}\n\n\tprivate detachClient(client: DaemonSocketClient, activeSessionId?: string): void {\n\t\tconst targets = activeSessionId ? [activeSessionId] : [...client.attachedActiveSessionIds];\n\t\tfor (const selector of targets) {\n\t\t\tconst match = this.matchWorkers(selector)[0];\n\t\t\tconst resolvedId = match ? (match.summary.activeSessionId ?? match.summary.id) : selector;\n\t\t\tif (!client.attachedActiveSessionIds.delete(resolvedId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclient.catchupActiveSessionIds?.delete(resolvedId);\n\t\t\tclient.catchupPurposes?.delete(resolvedId);\n\t\t\tthis.write(client, { type: \"session_detached\", activeSessionId: resolvedId });\n\t\t\tvoid this.syncWorkerExtensionUi(resolvedId);\n\t\t}\n\t}\n\n\tprivate async syncWorkerExtensionUi(activeSessionId: string): Promise<void> {\n\t\tconst match = this.matchWorkers(activeSessionId)[0];\n\t\tif (!match?.worker.client) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.subscribeWorker(match.worker, match.summary.activeSessionId ?? match.summary.id).catch(\n\t\t\t() => undefined,\n\t\t);\n\t}\n\n\tprivate handleWorkerFrame(worker: ResidentWorker, frame: PrivateFrame<DaemonWorkerFrameHeader>): void {\n\t\tif (frame.header.kind !== \"outbound\") {\n\t\t\treturn;\n\t\t}\n\t\tconst {\n\t\t\toutboundType,\n\t\t\tactiveSessionId,\n\t\t\tsnapshotId: frameSnapshotId,\n\t\t\tsessionEventType,\n\t\t\tpayloadEncoding,\n\t\t\tsnapshotPurpose,\n\t\t} = frame.header;\n\t\tif (outboundType === \"heartbeats_changed\") {\n\t\t\tworker.heartbeatSnapshotStale = true;\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_begin\" && activeSessionId) {\n\t\t\ttry {\n\t\t\t\tconst begin = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t{ type: \"session_snapshot_begin\" }\n\t\t\t\t>;\n\t\t\t\tif (\n\t\t\t\t\tbegin.type !== \"session_snapshot_begin\" ||\n\t\t\t\t\tbegin.activeSessionId !== activeSessionId ||\n\t\t\t\t\ttypeof begin.snapshotId !== \"string\" ||\n\t\t\t\t\t(frameSnapshotId !== undefined && frameSnapshotId !== begin.snapshotId) ||\n\t\t\t\t\ttypeof begin.targetChunkBytes !== \"number\" ||\n\t\t\t\t\t!begin.snapshot ||\n\t\t\t\t\t!isSessionSummary(begin.snapshot.summary)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid snapshot begin frame\");\n\t\t\t\t}\n\t\t\t\tconst publicSummary = this.publicSummary(worker, begin.snapshot.summary);\n\t\t\t\tconst snapshot = {\n\t\t\t\t\t...begin.snapshot,\n\t\t\t\t\tsummary: publicSummary,\n\t\t\t\t\tmessages: [],\n\t\t\t\t};\n\t\t\t\tconst result: DaemonAttachResult = {\n\t\t\t\t\tprotocol: DAEMON_PROTOCOL_INFO,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tsnapshot,\n\t\t\t\t\treplay: {\n\t\t\t\t\t\tstatus: \"complete\",\n\t\t\t\t\t\ttoSequence: snapshot.lastEventSequence,\n\t\t\t\t\t\t...(snapshot.lastEventCursor ? { toCursor: snapshot.lastEventCursor } : {}),\n\t\t\t\t\t},\n\t\t\t\t\tlastEventSequence: snapshot.lastEventSequence,\n\t\t\t\t\t...(snapshot.lastEventCursor ? { lastEventCursor: snapshot.lastEventCursor } : {}),\n\t\t\t\t\tsnapshotStream: {\n\t\t\t\t\t\tid: begin.snapshotId,\n\t\t\t\t\t\tmessageCount: begin.messageCount,\n\t\t\t\t\t\ttargetChunkBytes: begin.targetChunkBytes,\n\t\t\t\t\t},\n\t\t\t\t\tclient: { id: \"supervisor\", capabilities: [\"chunked_snapshot\"] },\n\t\t\t\t};\n\t\t\t\tconst generations = this.snapshotGenerationsFor(worker, activeSessionId);\n\t\t\t\tlet generation = generations.get(begin.snapshotId);\n\t\t\t\tif (generation?.incoming) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tnew Error(`Snapshot ${begin.snapshotId} restarted before completion`),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tbegin.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Snapshot summaries/state include live fields (for example activity and attached client\n\t\t\t\t// counts) that can change without advancing the transcript sequence. Treat the stable\n\t\t\t\t// transfer envelope as identity; duplicate chunks and end metadata are still byte-checked.\n\t\t\t\tconst duplicate =\n\t\t\t\t\tgeneration?.transcript.complete === true &&\n\t\t\t\t\tgeneration.end !== undefined &&\n\t\t\t\t\tgeneration.result.snapshotStream?.messageCount === begin.messageCount &&\n\t\t\t\t\tgeneration.result.snapshotStream?.targetChunkBytes === begin.targetChunkBytes &&\n\t\t\t\t\tgeneration.result.lastEventSequence === result.lastEventSequence &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventSequence === result.snapshot.lastEventSequence &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventCursor?.generation === result.snapshot.lastEventCursor?.generation &&\n\t\t\t\t\tgeneration.result.snapshot.lastEventCursor?.sequence === result.snapshot.lastEventCursor?.sequence;\n\t\t\t\tif (generation?.transcript.complete && !duplicate) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tnew Error(`Snapshot ${begin.snapshotId} did not match the cached transfer`),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tbegin.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\t\t\tconst currentResult = currentGeneration?.result ?? worker.snapshotCache.get(activeSessionId);\n\t\t\t\tconst isOlderThanCurrent =\n\t\t\t\t\tcurrentGeneration !== undefined &&\n\t\t\t\t\tcurrentGeneration.transcript.snapshotId !== begin.snapshotId &&\n\t\t\t\t\tcurrentResult !== undefined &&\n\t\t\t\t\tresult.lastEventSequence < currentResult.lastEventSequence;\n\t\t\t\tif (isOlderThanCurrent && !generation) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (duplicate && generation) {\n\t\t\t\t\tgeneration.incoming = true;\n\t\t\t\t\tgeneration.duplicateChunkIndex = 0;\n\t\t\t\t\tgeneration.duplicateResult = result;\n\t\t\t\t\tgeneration.validation = this.createSnapshotDuplicateValidation();\n\t\t\t\t\tif (currentGeneration === generation) {\n\t\t\t\t\t\tworker.snapshotCache.delete(activeSessionId);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcurrentGeneration &&\n\t\t\t\t\tcurrentGeneration.transcript.snapshotId !== begin.snapshotId &&\n\t\t\t\t\t!isOlderThanCurrent\n\t\t\t\t) {\n\t\t\t\t\tif (!currentGeneration.transcript.complete && !currentGeneration.incoming) {\n\t\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\t\tworker,\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tnew Error(`Snapshot ${currentGeneration.transcript.snapshotId} was superseded`),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tcurrentGeneration.transcript.snapshotId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, currentGeneration.transcript);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!generation) {\n\t\t\t\t\tconst transcript = new SnapshotTranscriptCache({\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\tsnapshotId: begin.snapshotId,\n\t\t\t\t\t\tcacheRoot: this.snapshotCacheRoot,\n\t\t\t\t\t\ttargetChunkBytes: begin.targetChunkBytes,\n\t\t\t\t\t});\n\t\t\t\t\tgeneration = {\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tincoming: false,\n\t\t\t\t\t\tretired: isOlderThanCurrent,\n\t\t\t\t\t};\n\t\t\t\t\tthis.snapshotGenerationsFor(worker, activeSessionId).set(begin.snapshotId, generation);\n\t\t\t\t}\n\t\t\t\tgeneration.result = result;\n\t\t\t\tgeneration.begin = Buffer.from(frame.payload);\n\t\t\t\tgeneration.end = undefined;\n\t\t\t\tgeneration.incoming = true;\n\t\t\t\tgeneration.duplicateChunkIndex = undefined;\n\t\t\t\tgeneration.duplicateResult = undefined;\n\t\t\t\tgeneration.validation = undefined;\n\t\t\t\tif (!isOlderThanCurrent) {\n\t\t\t\t\tgeneration.retired = false;\n\t\t\t\t\tworker.transcriptCaches.set(activeSessionId, generation.transcript);\n\t\t\t\t\tworker.snapshotCache.set(activeSessionId, result);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.log(`Invalid worker snapshot begin frame: ${String(error)}`);\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_chunk\" && activeSessionId) {\n\t\t\tconst snapshotId = frameSnapshotId ?? worker.transcriptCaches.get(activeSessionId)?.snapshotId;\n\t\t\tif (!snapshotId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, snapshotId);\n\t\t\tif (generation?.incoming) {\n\t\t\t\ttry {\n\t\t\t\t\tconst duplicateIndex = generation.duplicateChunkIndex;\n\t\t\t\t\tif (duplicateIndex === undefined) {\n\t\t\t\t\t\tgeneration.transcript.appendEncodedChunk(Buffer.from(frame.payload));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst chunk = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t\t\t{ type: \"session_snapshot_chunk\" }\n\t\t\t\t\t\t>;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tchunk.type !== \"session_snapshot_chunk\" ||\n\t\t\t\t\t\t\tchunk.activeSessionId !== activeSessionId ||\n\t\t\t\t\t\t\tchunk.snapshotId !== generation.transcript.snapshotId ||\n\t\t\t\t\t\t\tchunk.index !== duplicateIndex ||\n\t\t\t\t\t\t\t!generation.transcript.readChunk(duplicateIndex).equals(Buffer.from(frame.payload))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Duplicate snapshot ${generation.transcript.snapshotId} did not match cached bytes`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgeneration.duplicateChunkIndex = duplicateIndex + 1;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\t\tworker,\n\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tgeneration.transcript.snapshotId,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_end\" && activeSessionId) {\n\t\t\tconst snapshotId = frameSnapshotId ?? worker.transcriptCaches.get(activeSessionId)?.snapshotId;\n\t\t\tif (!snapshotId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst generation = this.snapshotGeneration(worker, activeSessionId, snapshotId);\n\t\t\tif (!generation?.incoming) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst transcript = generation.transcript;\n\t\t\ttry {\n\t\t\t\tconst duplicateChunkCount = generation.duplicateChunkIndex;\n\t\t\t\tif (duplicateChunkCount === undefined) {\n\t\t\t\t\ttranscript.markComplete();\n\t\t\t\t\tif (!generation.begin) {\n\t\t\t\t\t\tthrow new Error(`Snapshot ${transcript.snapshotId} has no begin frame`);\n\t\t\t\t\t}\n\t\t\t\t\tgeneration.end = Buffer.from(frame.payload);\n\t\t\t\t} else {\n\t\t\t\t\tconst end = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t\t{ type: \"session_snapshot_end\" }\n\t\t\t\t\t>;\n\t\t\t\t\tif (\n\t\t\t\t\t\tend.type !== \"session_snapshot_end\" ||\n\t\t\t\t\t\tend.activeSessionId !== activeSessionId ||\n\t\t\t\t\t\tend.snapshotId !== transcript.snapshotId ||\n\t\t\t\t\t\tend.chunkCount !== duplicateChunkCount ||\n\t\t\t\t\t\tend.chunkCount !== transcript.chunkCount ||\n\t\t\t\t\t\t!generation.end?.equals(frame.payload)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(`Duplicate snapshot ${transcript.snapshotId} ended with different metadata`);\n\t\t\t\t\t}\n\t\t\t\t\tif (!generation.duplicateResult) {\n\t\t\t\t\t\tthrow new Error(`Duplicate snapshot ${transcript.snapshotId} has no result`);\n\t\t\t\t\t}\n\t\t\t\t\tgeneration.result = generation.duplicateResult;\n\t\t\t\t\tif (worker.transcriptCaches.get(activeSessionId) === transcript) {\n\t\t\t\t\t\tworker.snapshotCache.set(activeSessionId, generation.duplicateResult);\n\t\t\t\t\t}\n\t\t\t\t\tthis.settleSnapshotDuplicateValidation(generation);\n\t\t\t\t}\n\t\t\t\tgeneration.incoming = false;\n\t\t\t\tgeneration.duplicateChunkIndex = undefined;\n\t\t\t\tgeneration.duplicateResult = undefined;\n\t\t\t} catch (error) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t\ttranscript.snapshotId,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst published = worker.transcriptCaches.get(activeSessionId) === transcript;\n\t\t\tif (generation.retired) {\n\t\t\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\t\t\ttranscript.dispose();\n\t\t\t}\n\t\t\tif (published && (snapshotPurpose === \"replacement\" || snapshotPurpose === \"catchup\")) {\n\t\t\t\tfor (const client of this.clients) {\n\t\t\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) continue;\n\t\t\t\t\tthis.queueCatchup(client, activeSessionId, snapshotPurpose === \"replacement\" ? \"replacement\" : \"resync\");\n\t\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (outboundType === \"session_snapshot_failed\" && activeSessionId) {\n\t\t\ttry {\n\t\t\t\tconst failed = JSON.parse(frame.payload.toString(\"utf8\")) as Extract<\n\t\t\t\t\tDaemonOutbound,\n\t\t\t\t\t{ type: \"session_snapshot_failed\" }\n\t\t\t\t>;\n\t\t\t\tif (\n\t\t\t\t\tfailed.type !== \"session_snapshot_failed\" ||\n\t\t\t\t\tfailed.activeSessionId !== activeSessionId ||\n\t\t\t\t\ttypeof failed.snapshotId !== \"string\" ||\n\t\t\t\t\ttypeof failed.error !== \"string\" ||\n\t\t\t\t\t(frameSnapshotId !== undefined && frameSnapshotId !== failed.snapshotId)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid snapshot failure frame\");\n\t\t\t\t}\n\t\t\t\tconst currentGeneration = this.currentSnapshotGeneration(worker, activeSessionId);\n\t\t\t\tconst generation =\n\t\t\t\t\tthis.snapshotGeneration(worker, activeSessionId, failed.snapshotId) ??\n\t\t\t\t\t(currentGeneration?.transcript.snapshotId === failed.snapshotId ? currentGeneration : undefined);\n\t\t\t\tif (!generation) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst published = worker.transcriptCaches.get(activeSessionId) === generation.transcript;\n\t\t\t\tthis.failWorkerSnapshotCache(worker, activeSessionId, new Error(failed.error), false, failed.snapshotId);\n\t\t\t\tif (published && (snapshotPurpose === \"replacement\" || snapshotPurpose === \"catchup\")) {\n\t\t\t\t\tfor (const client of this.clients) {\n\t\t\t\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) continue;\n\t\t\t\t\t\tthis.queueCatchup(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tsnapshotPurpose === \"replacement\" ? \"replacement\" : \"resync\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tvoid this.catchUpClient(client).catch((error) =>\n\t\t\t\t\t\t\tthis.log(`Failed to catch up client ${client.id}: ${String(error)}`),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.failWorkerSnapshotCache(\n\t\t\t\t\tworker,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\toutboundType === \"daemon_hello\" ||\n\t\t\toutboundType === \"response\" ||\n\t\t\toutboundType === \"session_list_progress\" ||\n\t\t\toutboundType === \"session_list_item\" ||\n\t\t\toutboundType === \"session_attached\" ||\n\t\t\toutboundType === \"session_detached\" ||\n\t\t\t!activeSessionId\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tlet publicPayload = frame.payload;\n\t\tlet decodedOutbound: DaemonOutbound | undefined;\n\t\tif (payloadEncoding === \"assistant-delta\") {\n\t\t\tlet compactValue: unknown;\n\t\t\ttry {\n\t\t\t\tcompactValue = JSON.parse(frame.payload.toString(\"utf8\"));\n\t\t\t} catch {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isCompactAssistantDelta(compactValue)) {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst reconstructed = this.streamReconstructor.reconstruct(compactValue);\n\t\t\tif (!reconstructed) {\n\t\t\t\tthis.scheduleCompactCatchup(worker, activeSessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpublicPayload = Buffer.from(serializeJsonLine(reconstructed));\n\t\t} else if (\n\t\t\tsessionEventType === \"message_start\" ||\n\t\t\tsessionEventType === \"message_end\" ||\n\t\t\toutboundType === \"session_replaced\" ||\n\t\t\toutboundType === \"session_resynced\" ||\n\t\t\toutboundType === \"session_closed\"\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdecodedOutbound = JSON.parse(frame.payload.toString(\"utf8\")) as DaemonOutbound;\n\t\t\t\tthis.streamReconstructor.observe(decodedOutbound);\n\t\t\t} catch {\n\t\t\t\t// A malformed worker event is still isolated to this worker connection.\n\t\t\t}\n\t\t}\n\t\tconst replacementSnapshotFollows =\n\t\t\tdecodedOutbound?.type === \"session_replaced\" && decodedOutbound.snapshotFollows === true;\n\t\tthis.invalidateWorkerSnapshot(\n\t\t\tworker,\n\t\t\tactiveSessionId,\n\t\t\toutboundType === \"session_replaced\" ||\n\t\t\t\toutboundType === \"session_closed\" ||\n\t\t\t\tisFinalizedTranscriptEvent(sessionEventType),\n\t\t);\n\t\tfor (const client of this.clients) {\n\t\t\tif (!client.attachedActiveSessionIds.has(activeSessionId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (replacementSnapshotFollows && !client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (outboundType === \"extension_ui_request\" && !client.supportsExtensionUi) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (client.snapshotActiveSessionIds?.has(activeSessionId)) {\n\t\t\t\tthis.queueCatchup(client, activeSessionId, outboundType === \"session_replaced\" ? \"replacement\" : \"resync\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (client.backpressured === true) {\n\t\t\t\tthis.queueCatchup(client, activeSessionId, outboundType === \"session_replaced\" ? \"replacement\" : \"resync\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.writeSerialized(client, publicPayload);\n\t\t}\n\t\tif (outboundType === \"session_replaced\" || outboundType === \"session_closed\") {\n\t\t\tvoid this.refreshWorkerSummaries(worker).catch(() => undefined);\n\t\t} else if (\n\t\t\tsessionEventType === \"turn_start\" ||\n\t\t\tsessionEventType === \"turn_end\" ||\n\t\t\tsessionEventType === \"rlm_child_update\"\n\t\t) {\n\t\t\tvoid this.refreshWorkerSummaries(worker).catch(() => undefined);\n\t\t}\n\t\tif (\n\t\t\tdecodedOutbound?.type === \"session_closed\" &&\n\t\t\tdecodedOutbound.reason === \"shutdown\" &&\n\t\t\tactiveSessionId === worker.descriptor.rootActiveSessionId &&\n\t\t\t!this.shuttingDown\n\t\t) {\n\t\t\tworker.intentionalStop = true;\n\t\t\t// An exact stop owns its registration and descriptor cleanup until its\n\t\t\t// tuple assertions complete. A synchronous root shutdown event can arrive\n\t\t\t// before its request resolves, so leave both intact while it is active.\n\t\t\tif ((this.workerStopCounts?.get(worker) ?? 0) === 0) {\n\t\t\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\t\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate invalidateWorkerSnapshot(worker: ResidentWorker, activeSessionId: string, transcriptChanged = true): void {\n\t\tworker.snapshotCache.delete(activeSessionId);\n\t\tif (!transcriptChanged) {\n\t\t\treturn;\n\t\t}\n\t\tworker.snapshotLoads.delete(`${activeSessionId}:chunked`);\n\t\tworker.snapshotLoads.delete(`${activeSessionId}:full`);\n\t\tconst transcript = worker.transcriptCaches.get(activeSessionId);\n\t\tif (transcript) {\n\t\t\tthis.retireWorkerSnapshotCache(worker, activeSessionId, transcript);\n\t\t}\n\t}\n\n\tprivate scheduleCompactCatchup(worker: ResidentWorker, activeSessionId: string): void {\n\t\tif (this.compactCatchupInProgress.has(activeSessionId)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.compactCatchupInProgress.add(activeSessionId);\n\t\tthis.invalidateWorkerSnapshot(worker, activeSessionId);\n\t\tconst clients = [...this.clients].filter((client) => client.attachedActiveSessionIds.has(activeSessionId));\n\t\tfor (const client of clients) {\n\t\t\tthis.queueCatchup(client, activeSessionId);\n\t\t}\n\t\tvoid Promise.all(clients.map((client) => this.catchUpClient(client)))\n\t\t\t.catch((error) => this.log(`Failed compact catch-up for ${activeSessionId}: ${String(error)}`))\n\t\t\t.finally(() => {\n\t\t\t\tthis.compactCatchupInProgress.delete(activeSessionId);\n\t\t\t});\n\t}\n\n\tprivate queueCatchup(\n\t\tclient: DaemonSocketClient,\n\t\tactiveSessionId: string,\n\t\tpurpose: \"replacement\" | \"resync\" = \"resync\",\n\t): void {\n\t\tif (!client.catchupActiveSessionIds) {\n\t\t\tclient.catchupActiveSessionIds = new Set();\n\t\t}\n\t\tclient.catchupActiveSessionIds.add(activeSessionId);\n\t\tclient.catchupPurposes ??= new Map();\n\t\tif (purpose === \"replacement\" || !client.catchupPurposes.has(activeSessionId)) {\n\t\t\tclient.catchupPurposes.set(activeSessionId, purpose);\n\t\t}\n\t}\n\n\tprivate catchUpClient(client: DaemonSocketClient): Promise<void> {\n\t\tif (client.catchupPromise) {\n\t\t\treturn client.catchupPromise;\n\t\t}\n\t\tif (client.snapshotStreaming || client.backpressured) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tconst catchup = this.drainClientCatchupQueue(client).finally(() => {\n\t\t\tif (client.catchupPromise === catchup) {\n\t\t\t\tclient.catchupPromise = undefined;\n\t\t\t}\n\t\t});\n\t\tclient.catchupPromise = catchup;\n\t\treturn catchup;\n\t}\n\n\tprivate async drainClientCatchupQueue(client: DaemonSocketClient): Promise<void> {\n\t\twhile (\n\t\t\t!client.socket.destroyed &&\n\t\t\t!client.snapshotStreaming &&\n\t\t\t!client.backpressured &&\n\t\t\tclient.catchupActiveSessionIds?.size\n\t\t) {\n\t\t\tawait this.drainClientCatchups(client);\n\t\t}\n\t}\n\n\tprivate async drainClientCatchups(client: DaemonSocketClient): Promise<void> {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = [...(client.catchupActiveSessionIds ?? [])].map((activeSessionId) => ({\n\t\t\tactiveSessionId,\n\t\t\tpurpose: client.catchupPurposes?.get(activeSessionId) ?? (\"resync\" as const),\n\t\t}));\n\t\tclient.catchupActiveSessionIds?.clear();\n\t\tclient.catchupPurposes?.clear();\n\t\tfor (let index = 0; index < pending.length; index++) {\n\t\t\tconst { activeSessionId, purpose } = pending[index]!;\n\t\t\tlet releaseTranscript: (() => void) | undefined;\n\t\t\ttry {\n\t\t\t\tconst attached = await this.attachClient(client, {\n\t\t\t\t\ttype: \"attach\",\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tcapabilities: [...client.capabilities],\n\t\t\t\t\tsupportsExtensionUi: client.supportsExtensionUi,\n\t\t\t\t});\n\t\t\t\treleaseTranscript = attached.releaseTranscript;\n\t\t\t\tif (client.capabilities.has(\"chunked_snapshot\")) {\n\t\t\t\t\tconst transcript = attached.transcript;\n\t\t\t\t\tif (!transcript) {\n\t\t\t\t\t\tthrow new Error(\"Session worker did not provide a snapshot transcript\");\n\t\t\t\t\t}\n\t\t\t\t\tif (purpose === \"replacement\") {\n\t\t\t\t\t\tthis.write(client, {\n\t\t\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\tstate: attached.result.snapshot.state,\n\t\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\t\tsnapshotFollows: true,\n\t\t\t\t\t\t\tmeta: createDaemonEventMeta(\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tattached.result.lastEventSequence,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tattached.result.lastEventCursor?.generation,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait this.streamSnapshot(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tattached.worker,\n\t\t\t\t\t\tthis.createStreamedAttachResult(attached.result, transcript),\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tpurpose,\n\t\t\t\t\t\treleaseTranscript,\n\t\t\t\t\t);\n\t\t\t\t\treleaseTranscript = undefined;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst meta = createDaemonEventMeta(\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t\tattached.result.lastEventSequence,\n\t\t\t\t\tundefined,\n\t\t\t\t\tattached.result.lastEventCursor?.generation,\n\t\t\t\t);\n\t\t\t\tconst catchup: DaemonOutbound =\n\t\t\t\t\tpurpose === \"replacement\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: \"session_replaced\",\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tstate: attached.result.snapshot.state,\n\t\t\t\t\t\t\t\tmessages: attached.result.snapshot.messages,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttype: \"session_resynced\",\n\t\t\t\t\t\t\t\tactiveSessionId,\n\t\t\t\t\t\t\t\tsnapshot: attached.result.snapshot,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t};\n\t\t\t\tif (!this.write(client, catchup)) {\n\t\t\t\t\tfor (const remaining of pending.slice(index + 1)) {\n\t\t\t\t\t\tthis.queueCatchup(client, remaining.activeSessionId, remaining.purpose);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treleaseTranscript?.();\n\t\t\t\tthis.log(`Failed to catch up client ${client.id} for ${activeSessionId}: ${String(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async prepareUpdateRestart(): Promise<DaemonUpdateRestartManifest> {\n\t\tif (this.updateRestartPhase !== undefined) throw new Error(\"Daemon is already preparing an update restart\");\n\t\tthis.updateRestartPhase = \"draining\";\n\t\ttry {\n\t\t\tconst deadline = Date.now() + UPDATE_RESTART_PREPARE_DEADLINE_MS;\n\t\t\tconst abort = AbortSignal.timeout(Math.min(UPDATE_RESTART_MUTATION_DRAIN_TIMEOUT_MS, deadline - Date.now()));\n\t\t\tawait this.mutationDrain.waitForDrain(1, abort, \"Timed out draining daemon mutations for update restart\");\n\t\t\tthis.updateRestartPhase = \"fencing\";\n\t\t\tawait this.mutationDrain.waitForDrain(1, abort, \"Timed out draining daemon mutations for update restart\");\n\t\t\tconst manifest = await this.prepareUpdateRestartFenced(deadline);\n\t\t\tthis.updateRestartPhase = \"prepared\";\n\t\t\treturn manifest;\n\t\t} catch (error) {\n\t\t\tthis.updateRestartPhase = undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async prepareUpdateRestartFenced(deadline: number): Promise<DaemonUpdateRestartManifest> {\n\t\tconst residents = [...this.workers.values()];\n\t\tconst unavailable = residents.find(\n\t\t\t(worker) =>\n\t\t\t\tthis.isWorkerStopping(worker) || worker.descriptor.lifecycle !== \"ready\" || worker.client === undefined,\n\t\t);\n\t\tif (unavailable) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot prepare update restart while resident worker ${unavailable.descriptor.workerId} is ${this.effectiveWorkerState(unavailable)}${unavailable.client ? \"\" : \" and disconnected\"}`,\n\t\t\t);\n\t\t}\n\t\tconst workers = residents as Array<ResidentWorker & { client: DaemonWorkerClient }>;\n\t\tconst acknowledged: ResidentWorker[] = [];\n\t\tconst preparationResults = await Promise.allSettled(\n\t\t\tworkers.map(async (worker) => {\n\t\t\t\tconst client = worker.client;\n\t\t\t\tconst response = await client.requestWorker(\n\t\t\t\t\t{ type: \"worker_prepare_update\" },\n\t\t\t\t\tMath.max(1, Math.min(UPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS, deadline - Date.now())),\n\t\t\t\t);\n\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\tworker.updateRestartPrepareClient = client;\n\t\t\t\tacknowledged.push(worker);\n\t\t\t\tif (!response.data || typeof response.data !== \"object\") {\n\t\t\t\t\tthrow new Error(\"Worker returned an invalid update manifest\");\n\t\t\t\t}\n\t\t\t\tif (worker.client !== client || worker.descriptor.lifecycle !== \"ready\") {\n\t\t\t\t\tthrow new Error(`Worker ${worker.descriptor.workerId} disconnected during update preparation`);\n\t\t\t\t}\n\t\t\t\tconst manifest = response.data as DaemonUpdateRestartManifest;\n\t\t\t\tif (manifest.formatVersion !== DAEMON_UPDATE_RESTART_FORMAT_VERSION) {\n\t\t\t\t\tthrow new Error(`Worker returned unsupported update manifest version ${manifest.formatVersion}`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!manifest.sessions.some(\n\t\t\t\t\t\t(session) => session.activeSessionId === worker.descriptor.rootActiveSessionId,\n\t\t\t\t\t) &&\n\t\t\t\t\t!manifest.discardedActiveSessionIds?.includes(worker.descriptor.rootActiveSessionId)\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Worker ${worker.descriptor.workerId} omitted its root disposition from the update manifest`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn { worker, manifest };\n\t\t\t}),\n\t\t);\n\t\tconst cancelAcknowledged = async () => {\n\t\t\tawait Promise.all(\n\t\t\t\tacknowledged.map(async (worker) => {\n\t\t\t\t\tconst prepareClient = worker.updateRestartPrepareClient;\n\t\t\t\t\tworker.updateRestartPrepareClient = undefined;\n\t\t\t\t\tif (!prepareClient) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await prepareClient.requestWorker({ type: \"worker_cancel_update\" }, 5000);\n\t\t\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t`Could not cancel prepared worker ${worker.descriptor.workerId}; reconnecting it: ${String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprepareClient.close();\n\t\t\t\t\t\tif (worker.client && worker.client !== prepareClient) worker.client.close();\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t};\n\t\tconst preparationFailure = preparationResults.find(\n\t\t\t(result): result is PromiseRejectedResult => result.status === \"rejected\",\n\t\t);\n\t\tif (preparationFailure) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow preparationFailure.reason;\n\t\t}\n\t\tconst prepared = preparationResults.flatMap((result) =>\n\t\t\tresult.status === \"fulfilled\" ? [result.value.worker] : [],\n\t\t);\n\t\tconst responses = preparationResults.flatMap((result) =>\n\t\t\tresult.status === \"fulfilled\" ? [result.value.manifest] : [],\n\t\t);\n\t\tconst discardedActiveSessionIds = responses.flatMap((manifest) => manifest.discardedActiveSessionIds ?? []);\n\t\tconst manifest: DaemonUpdateRestartManifest = {\n\t\t\tformatVersion: DAEMON_UPDATE_RESTART_FORMAT_VERSION,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\tsessions: responses.flatMap((manifest) => manifest.sessions),\n\t\t\t...(discardedActiveSessionIds.length > 0 ? { discardedActiveSessionIds } : {}),\n\t\t};\n\t\t// A worker that disconnected after preparing cancelled its checkpoint with\n\t\t// the old client; a recovered replacement may have admitted inputs past the\n\t\t// captured manifest. Abort before the manifest is persisted so the caller's\n\t\t// fallback cannot restore from the stale checkpoint.\n\t\tconst staleWorker = prepared.find((worker) => worker.client !== worker.updateRestartPrepareClient);\n\t\tif (staleWorker) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow new Error(\n\t\t\t\t`Worker ${staleWorker.descriptor.workerId} reconnected during update preparation; its checkpoint is stale`,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tthis.validateAndPersistUpdateManifest(manifest);\n\t\t} catch (error) {\n\t\t\tawait cancelAcknowledged();\n\t\t\tthrow error;\n\t\t}\n\t\t// Commit through the connection that owns the prepared transaction; a client\n\t\t// swapped in after the check above must fail the commit rather than reach a\n\t\t// worker that no longer holds the checkpoint.\n\t\tconst commitClients = new Map(prepared.map((worker) => [worker, worker.updateRestartPrepareClient]));\n\t\tfor (const worker of prepared) worker.updateRestartPrepareClient = undefined;\n\t\tconst commitResults = await Promise.allSettled(\n\t\t\tprepared.map(async (worker) => {\n\t\t\t\tconst client = commitClients.get(worker);\n\t\t\t\tif (!client) throw new Error(`Worker ${worker.descriptor.workerId} disconnected before update commit`);\n\t\t\t\tconst response = await client.requestWorker(\n\t\t\t\t\t{ type: \"worker_commit_update\" },\n\t\t\t\t\tUPDATE_RESTART_WORKER_REQUEST_TIMEOUT_MS,\n\t\t\t\t);\n\t\t\t\tif (!response.success) throw new Error(response.error);\n\t\t\t}),\n\t\t);\n\t\tconst commitFailure = commitResults.find(\n\t\t\t(result): result is PromiseRejectedResult => result.status === \"rejected\",\n\t\t);\n\t\tif (commitFailure) {\n\t\t\tthis.log(`Update restart commit response failed; forcing restart completion: ${String(commitFailure.reason)}`);\n\t\t\tawait Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false, true)));\n\t\t\treturn manifest;\n\t\t}\n\t\tconst stopResults = await Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false)));\n\t\tif (stopResults.some((result) => result.status === \"rejected\")) {\n\t\t\tthis.log(\"A committed update worker did not stop gracefully; forcing restart completion\");\n\t\t\tawait Promise.allSettled(prepared.map((worker) => this.stopWorker(worker, false, true)));\n\t\t}\n\t\treturn manifest;\n\t}\n\n\tprivate validateAndPersistUpdateManifest(manifest: DaemonUpdateRestartManifest): void {\n\t\tif (manifest.formatVersion !== DAEMON_UPDATE_RESTART_FORMAT_VERSION) {\n\t\t\tthrow new Error(`Unsupported update manifest version ${manifest.formatVersion}`);\n\t\t}\n\t\tconst activeSessionIds = new Set<string>();\n\t\tconst sessionFiles = new Set<string>();\n\t\tfor (const discardedActiveSessionId of manifest.discardedActiveSessionIds ?? []) {\n\t\t\tif (!discardedActiveSessionId || activeSessionIds.has(discardedActiveSessionId)) {\n\t\t\t\tthrow new Error(\"Update manifest contains an invalid discarded session disposition\");\n\t\t\t}\n\t\t\tactiveSessionIds.add(discardedActiveSessionId);\n\t\t}\n\t\tfor (const session of manifest.sessions) {\n\t\t\tif (!session.activeSessionId || !session.sessionFile) {\n\t\t\t\tthrow new Error(\"Update manifest contains an incomplete session checkpoint\");\n\t\t\t}\n\t\t\tif (activeSessionIds.has(session.activeSessionId)) {\n\t\t\t\tthrow new Error(`Update manifest contains duplicate active session ${session.activeSessionId}`);\n\t\t\t}\n\t\t\tconst sessionFile = canonicalSessionPath(session.sessionFile);\n\t\t\tif (sessionFiles.has(sessionFile)) {\n\t\t\t\tthrow new Error(`Update manifest contains duplicate session file ${sessionFile}`);\n\t\t\t}\n\t\t\tactiveSessionIds.add(session.activeSessionId);\n\t\t\tsessionFiles.add(sessionFile);\n\t\t}\n\t\tconst agentDir = this.defaultSessionConfig.agentDir;\n\t\tif (!agentDir) {\n\t\t\tthrow new Error(\"Daemon supervisor config is missing agentDir\");\n\t\t}\n\t\tconst path = getDaemonUpdateRestartManifestPath(this.socketPath, agentDir);\n\t\tmkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n\t\tconst tempPath = `${path}.${process.pid}.tmp`;\n\t\twriteFileSync(tempPath, `${JSON.stringify(manifest)}\\n`, { mode: 0o600 });\n\t\tchmodSync(tempPath, 0o600);\n\t\tconst validated = JSON.parse(readFileSync(tempPath, \"utf8\")) as DaemonUpdateRestartManifest;\n\t\tif (!Array.isArray(validated.sessions) || validated.sessions.length !== manifest.sessions.length) {\n\t\t\tthrow new Error(\"Could not validate aggregate update manifest\");\n\t\t}\n\t\trenameSync(tempPath, path);\n\t}\n\n\t/**\n\t * Verdict on whether a pid is still the process we launched. Callers must\n\t * be conservative in both directions: signal a pid only on \"current\"\n\t * (never SIGKILL a recycled pid), and clean up a registration only on\n\t * \"gone\"/\"replaced\" (never orphan a live worker because a transient\n\t * identity lookup failed).\n\t */\n\tprivate processIdentity(\n\t\tpid: number,\n\t\tprocessStartId: string | undefined,\n\t): \"current\" | \"replaced\" | \"gone\" | \"unknown\" {\n\t\tif (!isProcessAlive(pid)) {\n\t\t\treturn \"gone\";\n\t\t}\n\t\tif (processStartId === undefined) {\n\t\t\treturn \"unknown\";\n\t\t}\n\t\tconst observed = getProcessStartId(pid);\n\t\tif (observed === undefined) {\n\t\t\treturn \"unknown\";\n\t\t}\n\t\treturn observed === processStartId ? \"current\" : \"replaced\";\n\t}\n\n\t/**\n\t * Keep an exact stop's registration and descriptor authoritative while any\n\t * part of its cleanup is in flight. Root kills acquire this before forwarding\n\t * because a synchronous shutdown event may arrive before the worker replies.\n\t */\n\tprivate acquireWorkerStopOwnership(worker: ResidentWorker): () => void {\n\t\tif (!this.workerStopCounts) this.workerStopCounts = new Map();\n\t\tconst stopCounts = this.workerStopCounts;\n\t\tstopCounts.set(worker, (stopCounts.get(worker) ?? 0) + 1);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst remaining = (stopCounts.get(worker) ?? 1) - 1;\n\t\t\tif (remaining === 0) stopCounts.delete(worker);\n\t\t\telse stopCounts.set(worker, remaining);\n\t\t};\n\t}\n\n\tprivate async stopWorker(\n\t\tworker: ResidentWorker,\n\t\tremoveDescriptor: boolean,\n\t\tforce = false,\n\t\tarchiveSession = false,\n\t\trecoveryCleanup = false,\n\t\tdirectChild?: { child: ChildProcess; closed: Promise<void> },\n\t): Promise<void> {\n\t\tconst releaseStopOwnership = this.acquireWorkerStopOwnership(worker);\n\t\ttry {\n\t\t\tawait this.stopWorkerUntracked(worker, removeDescriptor, force, archiveSession, recoveryCleanup, directChild);\n\t\t} finally {\n\t\t\treleaseStopOwnership();\n\t\t}\n\t}\n\n\tprivate async stopWorkerUntracked(\n\t\tworker: ResidentWorker,\n\t\tremoveDescriptor: boolean,\n\t\tforce = false,\n\t\tarchiveSession = false,\n\t\trecoveryCleanup = false,\n\t\tdirectChild?: { child: ChildProcess; closed: Promise<void> },\n\t): Promise<void> {\n\t\tif (worker.ownerCleanupTimer) {\n\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t}\n\t\tif (!recoveryCleanup) {\n\t\t\tworker.stopRevision++;\n\t\t}\n\t\t// A retry can rescind this stop and relaunch the worker while we await\n\t\t// below. Bind every liveness check and signal to the process this stop\n\t\t// entered with, and abort cleanup once the stop no longer applies: the\n\t\t// pid changed (relaunched) or a removeDescriptor stop lost its tombstone\n\t\t// (rescinded, even before the successor pid lands).\n\t\tconst entryPid = worker.descriptor.pid;\n\t\tconst entryStartId = worker.descriptor.processStartId;\n\t\tconst assertStopStillApplies = () => {\n\t\t\tif (directChild) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tworker.descriptor.pid !== entryPid ||\n\t\t\t\t(removeDescriptor && worker.descriptor.stopRequestedAt === undefined)\n\t\t\t) {\n\t\t\t\tthrow new Error(`Session worker ${worker.descriptor.workerId} was relaunched during stop`);\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tif (removeDescriptor) {\n\t\t\t\tthis.persistWorkerStopTombstone(worker, archiveSession);\n\t\t\t} else {\n\t\t\t\tworker.intentionalStop = true;\n\t\t\t\tworker.descriptor.lifecycle = \"recovering\";\n\t\t\t\tthis.persistWorker(worker);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!directChild) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.reportCleanupFailure(`worker rollback state ${worker.descriptor.workerId}`, error);\n\t\t}\n\t\tconst transferError = new Error(\"Session worker stopped during snapshot transfer\");\n\t\tconst generationTranscripts = new Set<SnapshotTranscriptCache>();\n\t\tfor (const [activeSessionId, generations] of [...(worker.snapshotGenerations ?? new Map())]) {\n\t\t\tfor (const generation of [...generations.values()]) {\n\t\t\t\tgenerationTranscripts.add(generation.transcript);\n\t\t\t\tif (generation.incoming || !generation.transcript.complete || generation.validation) {\n\t\t\t\t\tthis.failSnapshotGeneration(worker, activeSessionId, generation, transferError);\n\t\t\t\t} else {\n\t\t\t\t\tgeneration.transcript.dispose();\n\t\t\t\t\tthis.deleteSnapshotGeneration(worker, activeSessionId, generation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const transcript of worker.transcriptCaches.values()) {\n\t\t\tif (!generationTranscripts.has(transcript) && !transcript.complete) {\n\t\t\t\ttranscript.markFailed(transferError);\n\t\t\t}\n\t\t\ttranscript.dispose();\n\t\t}\n\t\tworker.transcriptCaches.clear();\n\t\tworker.snapshotCache.clear();\n\t\tworker.snapshotGenerations?.clear();\n\t\tif (worker.client) {\n\t\t\tif (archiveSession) {\n\t\t\t\tawait worker.client\n\t\t\t\t\t.requestWorker({ type: \"worker_archive_and_shutdown\" }, force ? 1000 : 5000)\n\t\t\t\t\t.catch(() => undefined);\n\t\t\t} else {\n\t\t\t\tawait worker.client.request({ type: \"shutdown\" }, force ? 1000 : 5000).catch(() => undefined);\n\t\t\t}\n\t\t\tworker.client.close();\n\t\t\tworker.client = undefined;\n\t\t} else if (directChild) {\n\t\t\tdirectChild.child.kill(\"SIGTERM\");\n\t\t} else if (this.processIdentity(entryPid, entryStartId) === \"current\") {\n\t\t\tsignalProcessGroupOrProcess(entryPid, \"SIGTERM\");\n\t\t}\n\t\t// Identity-aware in both directions: a replaced pid counts as gone (never\n\t\t// signal a recycled pid) while an unknown identity counts as alive (never\n\t\t// clean up a possibly-live worker on a transient lookup failure). kill(0)\n\t\t// runs on every poll; the expensive identity check is throttled.\n\t\tlet identityVerdict: \"current\" | \"replaced\" | \"gone\" | \"unknown\" = \"current\";\n\t\tlet identityCheckedAt = 0;\n\t\tconst isWorkerProcessAlive = () => {\n\t\t\tif (directChild) {\n\t\t\t\treturn directChild.child.exitCode === null && directChild.child.signalCode === null;\n\t\t\t}\n\t\t\tif (!processIdExists(entryPid)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (now - identityCheckedAt >= LIVENESS_IDENTITY_RECHECK_MS) {\n\t\t\t\tidentityCheckedAt = now;\n\t\t\t\tidentityVerdict = this.processIdentity(entryPid, entryStartId);\n\t\t\t}\n\t\t\treturn identityVerdict !== \"replaced\" && identityVerdict !== \"gone\";\n\t\t};\n\t\tconst gracefulDeadline = Date.now() + (force ? 500 : 2000);\n\t\twhile (isWorkerProcessAlive() && Date.now() < gracefulDeadline) {\n\t\t\tawait delay(25);\n\t\t}\n\t\tlet sigkillSent = false;\n\t\tif (force && isWorkerProcessAlive()) {\n\t\t\tif (directChild) {\n\t\t\t\tsigkillSent = directChild.child.kill(\"SIGKILL\");\n\t\t\t} else if (this.processIdentity(entryPid, entryStartId) === \"current\") {\n\t\t\t\t// Fresh, unthrottled check: the cached verdict may be up to 500ms\n\t\t\t\t// old, long enough for the pid to be recycled.\n\t\t\t\tsignalProcessGroupOrProcess(entryPid, \"SIGKILL\");\n\t\t\t\tsigkillSent = true;\n\t\t\t}\n\t\t\tconst forceDeadline = Date.now() + 1000;\n\t\t\twhile (isWorkerProcessAlive() && Date.now() < forceDeadline) {\n\t\t\t\tawait delay(25);\n\t\t\t}\n\t\t}\n\t\tif (isWorkerProcessAlive()) {\n\t\t\tworker.intentionalStop = worker.descriptor.stopRequestedAt !== undefined;\n\t\t\tif (removeDescriptor) {\n\t\t\t\tthis.scheduleWorkerStopFinalization(worker);\n\t\t\t}\n\t\t\tthrow new WorkerStopTimeoutError(\n\t\t\t\t`Session worker ${worker.descriptor.workerId} did not stop${sigkillSent ? \" after SIGKILL\" : \"\"}`,\n\t\t\t);\n\t\t}\n\t\tif (directChild) {\n\t\t\tawait directChild.closed;\n\t\t}\n\t\tassertStopStillApplies();\n\t\tif (removeDescriptor && worker.descriptor.archiveOnStop) {\n\t\t\tif (force) {\n\t\t\t\tthis.reclaimStoppedWorkerCronLock(worker);\n\t\t\t}\n\t\t\tawait this.finalizeArchivedWorkerStop(worker);\n\t\t\tassertStopStillApplies();\n\t\t}\n\t\tthis.invalidateWorkerSessionInputPauses(worker, \"Session worker stopped while input was paused\");\n\t\tthis.workers.delete(worker.descriptor.workerId);\n\t\tif (removeDescriptor) {\n\t\t\tthis.deleteWorkerDescriptor(worker);\n\t\t}\n\t\tif (!this.shuttingDown) {\n\t\t\tthis.broadcastHeartbeatsChanged();\n\t\t}\n\t}\n\n\t/**\n\t * A stop that timed out leaves a tombstoned registration behind. Keep\n\t * escalating in the background until the process is gone, then finish the\n\t * interrupted cleanup instead of leaving a dead worker registered forever.\n\t */\n\tprivate scheduleWorkerStopFinalization(worker: ResidentWorker): void {\n\t\tif (worker.stopFinalization) {\n\t\t\treturn;\n\t\t}\n\t\tworker.stopFinalization = this.finalizeTimedOutWorkerStop(worker).finally(() => {\n\t\t\tworker.stopFinalization = undefined;\n\t\t});\n\t}\n\n\tprivate async finalizeTimedOutWorkerStop(worker: ResidentWorker): Promise<void> {\n\t\t// Bind to the exact process generation being stopped: a retry can rescind\n\t\t// the stop and relaunch with a new pid, and the OS can recycle the old\n\t\t// pid. The finalizer must never follow either successor.\n\t\tconst pid = worker.descriptor.pid;\n\t\tconst processStartId = worker.descriptor.processStartId;\n\t\tconst stopRevision = worker.stopRevision;\n\t\tconst isStopGenerationCurrent = () =>\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.stopRevision === stopRevision &&\n\t\t\tworker.descriptor.stopRequestedAt !== undefined &&\n\t\t\tworker.descriptor.pid === pid;\n\t\t// A replaced pid counts as gone (never SIGKILL a recycled pid); an\n\t\t// unobservable identity counts as alive (never clean up a possibly-live\n\t\t// worker). kill(0) probes every poll; ps-backed checks are throttled.\n\t\tlet stoppedVerdict = true;\n\t\tlet stoppedCanSignal = processStartId !== undefined;\n\t\tlet stoppedCheckedAt = 0;\n\t\tconst isStoppedProcessAlive = () => {\n\t\t\tif (!processIdExists(pid)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (now - stoppedCheckedAt < LIVENESS_IDENTITY_RECHECK_MS) {\n\t\t\t\treturn stoppedVerdict;\n\t\t\t}\n\t\t\tstoppedCheckedAt = now;\n\t\t\tif (!isProcessAlive(pid)) {\n\t\t\t\tstoppedVerdict = false;\n\t\t\t} else if (processStartId === undefined) {\n\t\t\t\tstoppedVerdict = true;\n\t\t\t\t// Without an identity captured while the original worker was known\n\t\t\t\t// alive, this pid may now belong to an unrelated process. Keep\n\t\t\t\t// waiting for it to disappear, but never escalate by pid alone.\n\t\t\t\tstoppedCanSignal = false;\n\t\t\t} else {\n\t\t\t\tconst observed = getProcessStartId(pid);\n\t\t\t\tstoppedVerdict = observed !== processStartId ? observed === undefined : true;\n\t\t\t\tstoppedCanSignal = observed === processStartId;\n\t\t\t}\n\t\t\treturn stoppedVerdict;\n\t\t};\n\t\tconst sigkillDeadline = Date.now() + STOP_FINALIZATION_SIGKILL_GRACE_MS;\n\t\tlet killed = false;\n\t\twhile (!this.shuttingDown) {\n\t\t\tif (!isStopGenerationCurrent()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isStoppedProcessAlive()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!killed && stoppedCanSignal && Date.now() >= sigkillDeadline) {\n\t\t\t\t// Fresh, unthrottled identity check right before signalling: the\n\t\t\t\t// cached verdict may be up to 500ms old, long enough for the pid\n\t\t\t\t// to be recycled by an unrelated process. A transiently\n\t\t\t\t// unobservable identity skips this attempt but keeps escalation\n\t\t\t\t// armed so a wedged worker is still killed on a later pass.\n\t\t\t\tconst observedNow = processStartId === undefined ? undefined : getProcessStartId(pid);\n\t\t\t\tif (processStartId === undefined || observedNow === processStartId) {\n\t\t\t\t\tsignalProcessGroupOrProcess(pid, \"SIGKILL\");\n\t\t\t\t\tkilled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait unrefDelay(STOP_FINALIZATION_RECHECK_MS);\n\t\t}\n\t\t// Retry transient cleanup failures (for example catalog archival) so a\n\t\t// dead worker's registration is never stranded permanently. Each attempt\n\t\t// bumps the worker's stopRevision, so rescission is detected through the\n\t\t// registration and tombstone instead of the waiting-phase snapshot.\n\t\tconst isCleanupStillWanted = () =>\n\t\t\tthis.workers.get(worker.descriptor.workerId) === worker &&\n\t\t\tworker.descriptor.stopRequestedAt !== undefined &&\n\t\t\tworker.descriptor.pid === pid;\n\t\twhile (!this.shuttingDown && isCleanupStillWanted()) {\n\t\t\ttry {\n\t\t\t\tawait this.stopWorker(worker, true, true, worker.descriptor.archiveOnStop === true);\n\t\t\t\tthis.log(`Finalized timed-out stop for worker ${worker.descriptor.workerId}`);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportCleanupFailure(`timed-out worker stop ${worker.descriptor.workerId}`, error);\n\t\t\t\tawait unrefDelay(STOP_FINALIZATION_RETRY_MS);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finalizeArchivedWorkerStop(worker: ResidentWorker): Promise<void> {\n\t\tconst context = this.workerSessionArtifactContext(worker);\n\t\tif (!context) {\n\t\t\treturn;\n\t\t}\n\t\tif (worker.descriptor.rootSessionId) {\n\t\t\tconst cronStore = AgentCronJobStore.forSessionArtifacts();\n\t\t\tcronStore.registerSessionArtifact(worker.descriptor.rootSessionId, context.artifactDir);\n\t\t\tcronStore.cancelJobsForSession({\n\t\t\t\tsessionId: worker.descriptor.rootSessionId,\n\t\t\t\tsessionFile: context.sessionFile,\n\t\t\t});\n\t\t\tawait this.catalog.archive(context.sessionFile, worker.descriptor.rootSessionId);\n\t\t}\n\t}\n\n\tprivate reclaimStoppedWorkerCronLock(worker: ResidentWorker): void {\n\t\tconst context = this.workerSessionArtifactContext(worker);\n\t\tif (!context) {\n\t\t\treturn;\n\t\t}\n\t\trmSync(join(context.artifactDir, `${SESSION_SCHEDULED_JOBS_FILENAME}.lock`), { recursive: true, force: true });\n\t}\n\n\tprivate workerSessionArtifactContext(\n\t\tworker: ResidentWorker,\n\t): { sessionFile: string; artifactDir: string } | undefined {\n\t\tconst sessionFile = worker.descriptor.sessionFile ?? worker.descriptor.createCommand.sessionPath;\n\t\tif (!sessionFile || !worker.descriptor.rootSessionId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tsessionFile,\n\t\t\tartifactDir: getSessionArtifactPathForFile(sessionFile, worker.descriptor.rootSessionId),\n\t\t};\n\t}\n\n\tprivate persistWorkerStopTombstone(worker: ResidentWorker, archiveSession = false): void {\n\t\tworker.intentionalStop = true;\n\t\tworker.descriptor.stopRequestedAt ??= new Date().toISOString();\n\t\tworker.descriptor.archiveOnStop ||= archiveSession;\n\t\tthis.persistWorker(worker);\n\t}\n\n\tprivate write(client: DaemonSocketClient, message: DaemonOutbound): boolean {\n\t\treturn this.writeSerialized(client, serializeJsonLine(message));\n\t}\n\n\tprivate broadcastHeartbeatsChanged(): void {\n\t\tfor (const client of this.clients) {\n\t\t\tthis.write(client, { type: \"heartbeats_changed\" });\n\t\t}\n\t}\n\n\tprivate writeSerialized(client: DaemonSocketClient, line: string | Uint8Array): boolean {\n\t\tif (client.socket.destroyed) {\n\t\t\treturn false;\n\t\t}\n\t\tconst accepted = client.socket.write(line);\n\t\tif (!accepted) {\n\t\t\tclient.backpressured = true;\n\t\t}\n\t\treturn accepted;\n\t}\n\n\tprivate registerSignalHandlers(): void {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGINT\", \"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => void this.shutdown(signal === \"SIGINT\" ? 130 : signal === \"SIGHUP\" ? 129 : 143, false);\n\t\t\tprocess.on(signal, handler);\n\t\t\tthis.signalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t\tconst exitHandler = () => this.cleanupSocket();\n\t\tprocess.on(\"exit\", exitHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.off(\"exit\", exitHandler));\n\t}\n\n\tprivate cleanupSocket(): void {\n\t\tif (!this.ownsSocketPath) {\n\t\t\treturn;\n\t\t}\n\t\tthis.ownsSocketPath = false;\n\t\tconst identity = this.socketIdentity;\n\t\tthis.socketIdentity = undefined;\n\t\tcleanupDaemonSocketPath(this.socketPath, identity, this.socketLease);\n\t}\n\n\tprivate async cleanupSupervisorResources(): Promise<void> {\n\t\tif (this.cleanupPromise) {\n\t\t\treturn this.cleanupPromise;\n\t\t}\n\t\tthis.cleanupPromise = this.cleanupSupervisorResourcesOnce();\n\t\treturn this.cleanupPromise;\n\t}\n\n\tprivate async cleanupSupervisorResourcesOnce(): Promise<void> {\n\t\tthis.shuttingDown = true;\n\t\tthis.clearIdleEvictionTimer();\n\t\tawait this.idleEvictionSweep?.catch(() => undefined);\n\t\tfor (const cleanup of this.signalCleanupHandlers.splice(0)) {\n\t\t\tawait this.runCleanupStep(\"signal handler\", cleanup);\n\t\t}\n\t\tconst server = this.server;\n\t\tthis.server = undefined;\n\t\tconst serverClosed = new Promise<void>((resolveClose) => {\n\t\t\tif (!server?.listening) {\n\t\t\t\tresolveClose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tserver.close(() => resolveClose());\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportCleanupFailure(\"daemon server\", error);\n\t\t\t\tresolveClose();\n\t\t\t}\n\t\t});\n\t\tfor (const client of this.clients) {\n\t\t\tclient.attachedActiveSessionIds.clear();\n\t\t\tawait this.runCleanupStep(`daemon client input ${client.id}`, () => client.detachInput());\n\t\t\tawait this.runCleanupStep(`daemon client socket ${client.id}`, () => {\n\t\t\t\tclient.socket.destroy();\n\t\t\t});\n\t\t}\n\t\tthis.clients.clear();\n\t\tfor (const worker of this.workers.values()) {\n\t\t\tif (worker.ownerCleanupTimer) {\n\t\t\t\tclearTimeout(worker.ownerCleanupTimer);\n\t\t\t\tworker.ownerCleanupTimer = undefined;\n\t\t\t}\n\t\t\tawait this.runCleanupStep(`worker client ${worker.descriptor.workerId}`, () => worker.client?.close());\n\t\t\tworker.client = undefined;\n\t\t\tconst transcripts = new Set(worker.transcriptCaches.values());\n\t\t\tfor (const generations of worker.snapshotGenerations?.values() ?? []) {\n\t\t\t\tfor (const generation of generations.values()) {\n\t\t\t\t\ttranscripts.add(generation.transcript);\n\t\t\t\t\tthis.settleSnapshotDuplicateValidation(\n\t\t\t\t\t\tgeneration,\n\t\t\t\t\t\tnew Error(\"Daemon supervisor stopped during snapshot transfer\"),\n\t\t\t\t\t);\n\t\t\t\t\tif (!generation.transcript.complete) {\n\t\t\t\t\t\tgeneration.transcript.markFailed(new Error(\"Daemon supervisor stopped during snapshot transfer\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const transcript of transcripts) {\n\t\t\t\tawait this.runCleanupStep(`worker transcript ${worker.descriptor.workerId}`, () => transcript.dispose());\n\t\t\t}\n\t\t\tworker.transcriptCaches.clear();\n\t\t\tworker.snapshotGenerations?.clear();\n\t\t\tworker.snapshotCache.clear();\n\t\t\tworker.snapshotLoads.clear();\n\t\t}\n\t\tthis.workers.clear();\n\t\tthis.openingWorkers.clear();\n\t\tawait this.runCleanupStep(\"daemon catalog\", () => this.catalog.stop());\n\t\tawait this.runCleanupStep(\"daemon server\", () => serverClosed);\n\t\tawait this.runCleanupStep(\"daemon socket\", () => this.cleanupSocket());\n\t\tawait this.runCleanupStep(\"supervisor cache\", () => {\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t});\n\t\tconst lease = this.socketLease;\n\t\tthis.socketLease = undefined;\n\t\tawait this.runCleanupStep(\"daemon socket lock\", async () => lease?.release());\n\t\tconst ownership = this.ownership;\n\t\tthis.ownership = undefined;\n\t\tawait this.runCleanupStep(\"daemon ownership\", async () => ownership?.release());\n\t}\n\n\tprivate async runCleanupStep(label: string, action: () => void | Promise<void>): Promise<void> {\n\t\ttry {\n\t\t\tawait action();\n\t\t} catch (error) {\n\t\t\tthis.reportCleanupFailure(label, error);\n\t\t}\n\t}\n\n\tprivate reportCleanupFailure(label: string, error: unknown): void {\n\t\tconst message = `Failed to clean up ${label}: ${String(error)}`;\n\t\ttry {\n\t\t\tthis.log(message);\n\t\t} catch {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\tprivate async shutdown(\n\t\texitCode: number,\n\t\tstopWorkers: boolean,\n\t\trelaunch = false,\n\t\tforceWorkers = false,\n\t\tclosingReason?: DaemonClosingReason,\n\t): Promise<never> {\n\t\tif (this.shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tthis.shuttingDown = true;\n\t\tthis.clearIdleEvictionTimer();\n\t\tawait this.idleEvictionSweep?.catch(() => undefined);\n\t\tif (closingReason) {\n\t\t\tfor (const client of this.clients) {\n\t\t\t\tthis.write(client, { type: \"daemon_closing\", reason: closingReason });\n\t\t\t}\n\t\t}\n\t\tfor (const cleanup of this.signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tif (stopWorkers) {\n\t\t\tawait Promise.all(\n\t\t\t\t[...this.workers.values()].map(async (worker) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.stopWorker(worker, true, forceWorkers, true);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!(error instanceof WorkerStopTimeoutError)) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.log(\n\t\t\t\t\t\t\t`Worker ${worker.descriptor.workerId} remains tombstoned for recovery after shutdown: ${error.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (!this.hasPersistedWorkerDescriptors()) {\n\t\t\t\trmSync(this.supervisorConfigPath, { force: true });\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const worker of this.workers.values()) {\n\t\t\t\tworker.intentionalStop = true;\n\t\t\t\tworker.client?.close();\n\t\t\t\tworker.client = undefined;\n\t\t\t}\n\t\t}\n\t\tawait this.catalog.stop();\n\t\tfor (const client of this.clients) {\n\t\t\tclient.detachInput();\n\t\t\tclient.socket.end();\n\t\t}\n\t\tawait new Promise<void>((resolveClose) => this.server?.close(() => resolveClose()) ?? resolveClose());\n\t\tawait this.runCleanupStep(\"daemon socket\", () => this.cleanupSocket());\n\t\tawait this.runCleanupStep(\"supervisor cache\", () => {\n\t\t\trmSync(this.snapshotCacheRoot, { recursive: true, force: true });\n\t\t});\n\t\tconst lease = this.socketLease;\n\t\tthis.socketLease = undefined;\n\t\tawait this.runCleanupStep(\"daemon socket lock\", async () => lease?.release());\n\t\tconst ownership = this.ownership;\n\t\tthis.ownership = undefined;\n\t\tawait this.runCleanupStep(\"daemon ownership\", async () => ownership?.release());\n\t\tif (relaunch) {\n\t\t\tconst launch = createCliSubprocessLaunchSpec([\"--mode\", \"daemon\", \"--daemon-socket\", this.socketPath]);\n\t\t\tconst environment = createCliSubprocessEnv();\n\t\t\tdelete environment[DAEMON_CATALOG_ROLE_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_ROLE_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_TOKEN_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_ACTIVE_SESSION_ID_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_SUPERVISOR_SOCKET_ENV];\n\t\t\tdelete environment[DAEMON_WORKER_RECOVERY_JOURNAL_ENV];\n\t\t\tdelete environment[ORPHAN_PROCESS_JOURNAL_ENV];\n\t\t\tdelete environment[SESSION_LEASES_ENABLED_ENV];\n\t\t\tdelete environment[SESSION_LEASE_OWNER_ID_ENV];\n\t\t\tconst replacement = spawn(launch.command, launch.args, {\n\t\t\t\tcwd: this.defaultSessionConfig.cwd ?? process.cwd(),\n\t\t\t\tdetached: true,\n\t\t\t\tenv: environment,\n\t\t\t\tstdio: \"ignore\",\n\t\t\t});\n\t\t\treplacement.unref();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n}\n"]}
|