import type pino from "pino"; import type { AgentSnapshotPayload, SessionInboundMessage, SessionOutboundMessage, WorkspaceDescriptorPayload } from "./messages.js"; import type { PersistedProjectRecord, PersistedWorkspaceRecord } from "./workspace-registry.js"; import { type TerminalActivity } from "@bytetrue/protocol/terminal-activity"; type FetchWorkspacesRequestMessage = Extract; type FetchWorkspacesRequestFilter = NonNullable; type FetchWorkspacesResponsePayload = Extract["payload"]; type FetchWorkspacesResponseEntry = FetchWorkspacesResponsePayload["entries"][number]; type FetchWorkspacesResponsePageInfo = FetchWorkspacesResponsePayload["pageInfo"]; type WorkspaceProjectDescriptor = FetchWorkspacesResponsePayload["emptyProjects"][number]; export type WorkspaceUpdatesFilter = FetchWorkspacesRequestFilter; export interface WorkspaceDirectoryDeps { logger: pino.Logger; projectRegistry: { list(): Promise; }; workspaceRegistry: { list(): Promise; }; listAgentPayloads(): Promise; listTerminalActivityContributions(): Promise>; isProviderVisibleToClient(provider: string): boolean; buildWorkspaceDescriptor(input: { workspace: PersistedWorkspaceRecord; projectRecord?: PersistedProjectRecord | null; includeGitData: boolean; }): Promise; } export declare function summarizeFetchWorkspacesEntries(entries: Iterable): { count: number; projectIds: string[]; statusCounts: Record; workspaces: Array<{ id: string; projectId: string; projectDisplayName: string; name: string; status: FetchWorkspacesResponseEntry["status"]; workspaceKind: FetchWorkspacesResponseEntry["workspaceKind"]; activityAt: string | null; }>; }; /** * Git facts (branch, diff, dirty, PR) belong to a checkout on disk, not to a * workspace identity. Every workspace whose own cwd is that checkout re-derives * its git facts from the same folder. This returns the ids of those workspaces * so a git change can fan out to all of them. This is git-fact display, NOT * ownership: do not use it to decide which workspace owns an arbitrary path. */ export declare function workspaceIdsOnCheckout(workspaces: Iterable, cwd: string): string[]; export declare class WorkspaceDirectory { private readonly deps; private readonly archivingByWorkspaceId; /** * Per-workspace last-seen winning bucket + entered-at. Persists across * `buildDescriptorMap` calls inside the daemon process; reset on cold start. * Server-internal; never crosses the wire. */ private readonly bucketHistoryByWorkspaceId; private readonly pager; constructor(deps: WorkspaceDirectoryDeps); markArchiving(workspaceIds: Iterable, archivingAt: string): void; clearArchiving(workspaceIds: Iterable): void; buildDescriptorMap(options: { includeGitData: boolean; workspaceIds?: Iterable; }): Promise>; private applyAgentBucketContributions; private applyTerminalContributions; private resolveStatusEnteredAt; private findNewestTimestampInBucket; listEmptyProjects(): Promise; listDescriptors(): Promise; matchesFilter(input: { workspace: WorkspaceDescriptorPayload; filter: FetchWorkspacesRequestFilter | undefined; }): boolean; listFetchEntries(request: FetchWorkspacesRequestMessage): Promise<{ entries: FetchWorkspacesResponseEntry[]; emptyProjects: WorkspaceProjectDescriptor[]; pageInfo: FetchWorkspacesResponsePageInfo; }>; } export {}; //# sourceMappingURL=workspace-directory.d.ts.map