Aegis Bridge API - v0.6.7
    Preparing search index...

    Class SessionManager

    Coordinates session lifecycle, persistence, transcript discovery, and interactive approval/question flows for all managed Claude Code sessions.

    Index

    Constructors

    Properties

    DEFAULT_STALL_THRESHOLD_MS: number = ...

    Default stall threshold: 2 min (Issue #392: 1.5x CC's 90s default, configurable via CLAUDE_STREAM_IDLE_TIMEOUT_MS).

    DEFAULT_PERMISSION_STALL_MS: number = ...
    DEFAULT_PROMPT_TIMEOUT_MS: 60000 = 60_000

    Default timeout for waiting CC to become ready (60s for cold starts).

    DEFAULT_PROMPT_MAX_RETRIES: 2

    Max retries if CC doesn't become ready in time.

    Methods

    • Load state from disk or the configured store (Issue #1937).

      Returns Promise<void>

    • Save state to disk atomically (write to temp, then rename). #218: Uses a write queue to serialize concurrent saves and prevent corruption.

      Returns Promise<void>

    • #357: Debounced save — skips immediate save for offset-only changes. Coalesces rapid successive reads into a single disk write.

      Returns void

    • Issue #3143: Wire ACP event store into transcript reader.

      Parameters

      • store: AcpEventStore

      Returns void

    • Parameters

      • masterToken: string

      Returns void

    • Wait for CC idle prompt, then send. Single attempt.

      Parameters

      • opts: {
            id?: string;
            workDir: string;
            name?: string;
            prd?: string;
            resumeSessionId?: string;
            claudeCommand?: string;
            env?: Record<string, string>;
            stallThresholdMs?: number;
            permissionStallMs?: number;
            permissionMode?: string;
            autoApprove?: boolean;
            parentId?: string;
            ownerKeyId?: string | null;
            tenantId?: string;
            initialStatus?: UIState;
            model?: string;
        }
        • Optionalid?: string
        • workDir: string
        • Optionalname?: string
        • Optionalprd?: string
        • OptionalresumeSessionId?: string
        • OptionalclaudeCommand?: string
        • Optionalenv?: Record<string, string>
        • OptionalstallThresholdMs?: number
        • OptionalpermissionStallMs?: number
        • OptionalpermissionMode?: string
        • OptionalautoApprove?: boolean

          Use permissionMode instead. Maps true→bypassPermissions, false→default.

        • OptionalparentId?: string

          Issue #702: Parent session ID for sub-agent hierarchy

        • OptionalownerKeyId?: string | null

          Issue #1429: API key ID that owns this session

        • OptionaltenantId?: string

          Issue #1944: Tenant ID inherited from the creating API key.

        • OptionalinitialStatus?: UIState

          Issue #3135: Override initial status when creating from ACP result.

        • Optionalmodel?: string

      Returns Promise<SessionInfo>

    • Issue #169 Phase 3: Update session status from a hook event. Returns the previous status for change detection. Issue #87: Also records hook latency timestamps.

      Parameters

      • id: string
      • hookEvent: string
      • OptionalhookTimestamp: number

      Returns UIState | null

    • Send initial prompt (ACP stub — prompts sent via JSON-RPC).

      Parameters

      • _id: string
      • _prompt: string

      Returns Promise<{ delivered: boolean; attempts: number }>

    • Find an idle session by workDir (ACP mode: state-based lookup with acquisition). Atomically acquires the session under a mutex to prevent TOCTOU race (Issue #840/#880). Supports fault injection for testing (Issue #901).

      Parameters

      • workDir: string

      Returns Promise<SessionInfo | null>

    • Get health info (ACP stub — basic status without window checks).

      Parameters

      • id: string

      Returns Promise<
          {
              alive: boolean;
              claudeRunning: boolean;
              status: UIState;
              hasTranscript: boolean;
              lastActivity: number;
              lastActivityAgo: number;
              sessionAge: number;
              details: string;
              actionHints?: Record<
                  string,
                  { method: string; url: string; description: string },
              >;
          },
      >

    • Send message (ACP stub — use JSON-RPC).

      Parameters

      • _id: string
      • _text: string

      Returns Promise<{ delivered: boolean; attempts: number; error?: string }>

    • Approve permission (ACP stub — handled by hooks).

      Parameters

      • id: string

      Returns Promise<void>

    • Reject permission (ACP stub — handled by hooks).

      Parameters

      • id: string

      Returns Promise<void>

    • Escape session (ACP stub).

      Parameters

      • _id: string

      Returns Promise<void>

    • Interrupt session (ACP stub — use JSON-RPC cancel).

      Parameters

      • _id: string

      Returns Promise<void>

    • Window alive check (ACP stub — always true).

      Parameters

      • _id: string

      Returns Promise<boolean>

    • Parameters

      • id: string

      Returns Promise<boolean>

    • Issue #88: Add an active subagent to a session.

      Parameters

      • id: string
      • name: string

      Returns void

    • Issue #88: Remove an active subagent from a session.

      Parameters

      • id: string
      • name: string

      Returns void

    • Issue #2518: Record a StopFailure hook event for circuit breaker tracking.

      Parameters

      • id: string

      Returns void

    • Issue #2518: Record a Stop (success) event — resets circuit breaker state.

      Parameters

      • id: string

      Returns void

    • Issue #2518: Check whether the circuit breaker should trip. Prunes stale timestamps outside the sliding window, then trips if the failure count meets or exceeds maxFailures. Once tripped, always returns true.

      Parameters

      • id: string
      • maxFailures: number
      • windowMs: number

      Returns boolean

    • Issue #89 L25: Update the model field on a session from hook payload.

      Parameters

      • id: string
      • model: string

      Returns void

    • Issue #87: Get latency metrics for a session.

      Parameters

      • id: string

      Returns
          | {
              hook_latency_ms: number
              | null;
              state_change_detection_ms: number | null;
              permission_response_ms: number | null;
          }
          | null

    • Release a session claim after the reuse path completes (success or failure).

      Parameters

      • id: string

      Returns void

    • Record that a permission prompt was detected for this session.

      Parameters

      • id: string

      Returns void

    • Issue #284: Store a pending permission request and return a promise that resolves when the client approves/rejects via the API.

      Parameters

      • sessionId: string

        Aegis session ID

      • timeoutMs: number = 10_000

        Timeout before auto-rejecting (default 10_000ms, matching CC's hook timeout)

      • OptionaltoolName: string

        Optional tool name from the hook payload

      • Optionalprompt: string

        Optional permission prompt text

      Returns Promise<PermissionDecision>

      Promise that resolves with the client's decision

    • Check if a session has a pending permission request.

      Parameters

      • sessionId: string

      Returns boolean

    • Get info about a pending permission (for API responses).

      Parameters

      • sessionId: string

      Returns PendingPermissionInfo | null

    • Clean up any pending permission for a session (e.g. on session delete).

      Parameters

      • sessionId: string

      Returns void

    • Issue #336: Store a pending AskUserQuestion and return a promise that resolves when the external client provides an answer via POST /answer.

      Parameters

      • sessionId: string
      • toolUseId: string
      • question: string
      • timeoutMs: number = 30_000

      Returns Promise<string | null>

    • Issue #336: Submit an answer to a pending question. Returns true if resolved.

      Parameters

      • sessionId: string
      • questionId: string
      • answer: string

      Returns boolean

    • Issue #336: Check if a session has a pending question.

      Parameters

      • sessionId: string

      Returns boolean

    • Issue #336: Get info about a pending question.

      Parameters

      • sessionId: string

      Returns { toolUseId: string; question: string; timestamp: number } | null

    • Issue #336: Clean up any pending question for a session.

      Parameters

      • sessionId: string

      Returns void

    • Read new messages from a session.

      Parameters

      • id: string

      Returns Promise<
          {
              messages: ParsedEntry[];
              status: UIState;
              statusText: string
              | null;
              interactiveContent: string | null;
          },
      >

    • Issue #2539: Read new messages from an already-resolved SessionInfo. Avoids the double lookup that readMessages(id) performs, eliminating the TOCTOU race between ownership check and transcript read.

      Parameters

      Returns Promise<
          {
              messages: ParsedEntry[];
              status: UIState;
              statusText: string
              | null;
              interactiveContent: string | null;
          },
      >

    • Read new messages for the monitor (separate offset from API reads).

      Parameters

      • id: string

      Returns Promise<
          {
              messages: ParsedEntry[];
              status: UIState;
              statusText: string
              | null;
              interactiveContent: string | null;
          },
      >

    • Issue #35: Get a condensed summary of a session's transcript.

      Parameters

      • id: string
      • maxMessages: number = 20

      Returns Promise<
          {
              sessionId: string;
              displayName: string;
              status: UIState;
              totalMessages: number;
              messages: { role: string; contentType: string; text: string }[];
              createdAt: number;
              lastActivity: number;
              permissionMode: string;
              prd?: string;
          },
      >

    • Paginated transcript read — does NOT advance the session's byteOffset.

      Parameters

      • id: string
      • page: number = 1
      • limit: number = 50
      • OptionalroleFilter: "assistant" | "system" | "user"

      Returns Promise<
          {
              messages: ParsedEntry[];
              total: number;
              page: number;
              limit: number;
              hasMore: boolean;
          },
      >

    • Cursor-based transcript read — stable under concurrent appends.

      Parameters

      • id: string
      • OptionalbeforeId: number
      • limit: number = 50
      • OptionalroleFilter: "assistant" | "system" | "user"

      Returns Promise<
          {
              messages: (ParsedEntry & { _cursor_id: number })[];
              has_more: boolean;
              oldest_id: number | null;
              newest_id: number | null;
          },
      >

    • Kill a session.

      Parameters

      • id: string

      Returns Promise<void>