π File detail
utils/swarm/backends/teammateModeSnapshot.ts
π― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes TeammateMode, setCliTeammateModeOverride, getCliTeammateModeOverride, clearCliTeammateModeOverride, and captureTeammateModeSnapshot (and more) β mainly functions, hooks, or classes. It composes internal code from utils (relative imports). What the file header says: Teammate mode snapshot module. Captures the teammate mode at session startup, following the same pattern as hooksConfigSnapshot.ts. This ensures that runtime config changes don't affect the teammate mode for the current session.
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
Teammate mode snapshot module. Captures the teammate mode at session startup, following the same pattern as hooksConfigSnapshot.ts. This ensures that runtime config changes don't affect the teammate mode for the current session.
π€ Exports (heuristic)
TeammateModesetCliTeammateModeOverridegetCliTeammateModeOverrideclearCliTeammateModeOverridecaptureTeammateModeSnapshotgetTeammateModeFromSnapshot
π₯οΈ Source preview
/**
* Teammate mode snapshot module.
*
* Captures the teammate mode at session startup, following the same pattern
* as hooksConfigSnapshot.ts. This ensures that runtime config changes don't
* affect the teammate mode for the current session.
*/
import { getGlobalConfig } from '../../../utils/config.js'
import { logForDebugging } from '../../../utils/debug.js'
import { logError } from '../../../utils/log.js'
export type TeammateMode = 'auto' | 'tmux' | 'in-process'
// Module-level variable to hold the captured mode at startup
let initialTeammateMode: TeammateMode | null = null
// CLI override (set before capture if --teammate-mode is provided)
let cliTeammateModeOverride: TeammateMode | null = null
/**
* Set the CLI override for teammate mode.
* Must be called before captureTeammateModeSnapshot().
*/
export function setCliTeammateModeOverride(mode: TeammateMode): void {
cliTeammateModeOverride = mode
}
/**
* Get the current CLI override, if any.
* Returns null if no CLI override was set.
*/
export function getCliTeammateModeOverride(): TeammateMode | null {
return cliTeammateModeOverride
}
/**
* Clear the CLI override and update the snapshot to the new mode.
* Called when user changes the setting in the UI, allowing their change to take effect.
*
* @param newMode - The new mode the user selected (passed directly to avoid race condition)
*/
export function clearCliTeammateModeOverride(newMode: TeammateMode): void {
cliTeammateModeOverride = null
initialTeammateMode = newMode
logForDebugging(
`[TeammateModeSnapshot] CLI override cleared, new mode: ${newMode}`,
)
}
/**
* Capture the teammate mode at session startup.
* Called early in main.tsx, after CLI args are parsed.
* CLI override takes precedence over config.
*/
export function captureTeammateModeSnapshot(): void {
if (cliTeammateModeOverride) {
initialTeammateMode = cliTeammateModeOverride
logForDebugging(
`[TeammateModeSnapshot] Captured from CLI override: ${initialTeammateMode}`,
)
} else {
const config = getGlobalConfig()
initialTeammateMode = config.teammateMode ?? 'auto'
logForDebugging(
`[TeammateModeSnapshot] Captured from config: ${initialTeammateMode}`,
)
}
}
/**
* Get the teammate mode for this session.
* Returns the snapshot captured at startup, ignoring any runtime config changes.
*/
export function getTeammateModeFromSnapshot(): TeammateMode {
if (initialTeammateMode === null) {
// This indicates an initialization bug - capture should happen in setup()
logError(
new Error(
'getTeammateModeFromSnapshot called before capture - this indicates an initialization bug',
),
)
captureTeammateModeSnapshot()
}
// Fallback to 'auto' if somehow still null (shouldn't happen, but safe)
return initialTeammateMode ?? 'auto'
}