Files
oh-my-opencode/src/features/claude-code-session-state/state.ts
T

87 lines
2.6 KiB
TypeScript

import { getAgentConfigKey } from "../../shared/agent-display-names"
export const subagentSessions = new Set<string>()
export const syncSubagentSessions = new Set<string>()
let _mainSessionID: string | undefined
export function setMainSession(id: string | undefined) {
_mainSessionID = id
}
export function getMainSessionID(): string | undefined {
return _mainSessionID
}
const registeredAgentNames = new Set<string>()
const registeredAgentAliases = new Map<string, string>()
const ZERO_WIDTH_CHARACTERS_REGEX = /[\u200B\u200C\u200D\uFEFF]/g
function normalizeRegisteredAgentName(name: string): string {
return name.replace(ZERO_WIDTH_CHARACTERS_REGEX, "").toLowerCase()
}
function normalizeStoredAgentName(name: string): string {
return name.replace(ZERO_WIDTH_CHARACTERS_REGEX, "")
}
export function registerAgentName(name: string): void {
const normalizedName = normalizeRegisteredAgentName(name)
registeredAgentNames.add(normalizedName)
if (!registeredAgentAliases.has(normalizedName)) {
registeredAgentAliases.set(normalizedName, name)
}
const configKey = normalizeRegisteredAgentName(getAgentConfigKey(name))
if (configKey !== normalizedName) {
registeredAgentNames.add(configKey)
if (!registeredAgentAliases.has(configKey)) {
registeredAgentAliases.set(configKey, name)
}
}
}
export function isAgentRegistered(name: string): boolean {
return registeredAgentNames.has(normalizeRegisteredAgentName(name))
}
export function resolveRegisteredAgentName(name: string | undefined): string | undefined {
if (typeof name !== "string") {
return undefined
}
const normalizedName = normalizeRegisteredAgentName(name)
return registeredAgentAliases.get(normalizedName) ?? normalizeStoredAgentName(name)
}
/** @internal For testing only */
export function _resetForTesting(): void {
_mainSessionID = undefined
subagentSessions.clear()
syncSubagentSessions.clear()
sessionAgentMap.clear()
registeredAgentNames.clear()
registeredAgentAliases.clear()
}
const sessionAgentMap = new Map<string, string>()
export function setSessionAgent(sessionID: string, agent: string): void {
if (!sessionAgentMap.has(sessionID)) {
sessionAgentMap.set(sessionID, normalizeStoredAgentName(agent))
}
}
export function updateSessionAgent(sessionID: string, agent: string): void {
sessionAgentMap.set(sessionID, normalizeStoredAgentName(agent))
}
export function getSessionAgent(sessionID: string): string | undefined {
return sessionAgentMap.get(sessionID)
}
export function clearSessionAgent(sessionID: string): void {
sessionAgentMap.delete(sessionID)
}