/** * Per-Claude-session lens registry. * * Claude Code assigns each session (each tab / instance) a stable * `CLAUDE_CODE_SESSION_ID` — present BOTH in the bash env of the agent's * commands AND in the JSON the statusline receives on stdin. That shared id * lets us bind a per-session "lens" (which workspace / project / focus session * this session is working through) without any backend change: the pod stays * agnostic, the CLI layers session-scoped state on top. * * This is what makes concurrent Claude Code sessions independent — tab A on * workspace Builder + session X, tab B on workspace Marketing + session Y — * instead of all sharing one global `~/.synap/config.json` workspace. * * Registry: ~/.synap/lenses/.json * Resolution precedence (highest first): explicit flag > session lens > * env SYNAP_WORKSPACE_ID > global config activeWorkspaceId. */ export interface SessionLens { workspaceId?: string; projectId?: string; focusSessionId?: string; updatedAt?: number; } /** The current Claude Code session id, if we're running inside one. */ export declare function getClaudeSessionId(): string | undefined; export declare function readLens(sessionId: string): SessionLens | null; /** Merge-write the lens for a session (creates the registry dir on demand). */ export declare function writeLens(sessionId: string, patch: Partial): SessionLens; /** Clear one field (or the whole lens) for a session. */ export declare function clearLensField(sessionId: string, field?: keyof SessionLens): void; /** The active session's lens, or null if not in a Claude session / none set. */ export declare function resolveActiveLens(): SessionLens | null;