export interface WorkspaceAppSummary { id: string; name: string; description?: string; path: string; url?: string | null; isDispatch?: boolean; audience?: "internal" | "public"; visibility?: "private" | "org"; publicPaths?: string[]; protectedPaths?: string[]; status?: "ready" | "pending"; statusLabel?: string; builderUrl?: string | null; branchName?: string | null; createdAt?: string | null; createdBy?: string | null; owner?: string | null; teams?: string[]; agentCardUrl?: string | null; agentCardReachable?: boolean; a2aEndpointUrl?: string | null; agentName?: string | null; agentSkillsCount?: number | null; archived?: boolean; workspaceSso?: boolean; } interface WorkspaceAppHrefSource { path?: string | null; url?: string | null; workspaceSso?: boolean; } export declare function isDispatchWorkspaceAppId(appId: string): boolean; /** * The workspace SSO action only accepts an exact registered app identity and * origin. The catalog's boolean is a server-derived projection for custom * registrations; the URL check keeps malformed metadata out of the action. */ export declare function isWorkspaceSsoApp(app: WorkspaceAppHrefSource & { id: string; }): boolean; /** * A mounted app URL leaves Dispatch's `/apps/:id` host route. Canonical * first-party origins can stay inline even at `/`, while external published * apps must open at their own origin regardless of their path. */ export declare function isPathMountedWorkspaceApp(app: WorkspaceAppHrefSource): boolean; export declare function isDefaultWorkspaceAppHiddenId(appId: string): boolean; export declare function isWorkspaceAppVisibleInDefaultLaunchers(app: Pick): boolean; export declare function workspaceAppRoute(appId: string): string; /** * Convert a child app route into Dispatch's shareable workspace-app route. * Mounted workspace apps may report their full mount path, while hosted apps * normally report only the app-local path, so accept both forms here. */ export declare function workspaceAppRouteForChildPath(app: Pick, childPath: string): string | null; export declare function workspaceAppInitialPathFromSplat(routeSplat: string | undefined, search: string, hash: string): string | undefined; export declare function workspaceAppIdFromRoute(pathname: string): string | null; export declare function workspaceAppHref(app: WorkspaceAppSummary): string | null; export declare function workspaceAppEmbedTarget(app: Pick): { path?: string; url?: string; }; /** * Resolve an app route without an embed ticket so the target can render its * own error document when session setup fails. */ export declare function workspaceAppDirectHref(app: WorkspaceAppHrefSource, targetPath: string): string | null; export declare function isPendingBuilderHref(app: WorkspaceAppSummary): boolean; export declare function shouldOpenWorkspaceAppInTopWindow(): boolean; export declare function navigateToWorkspaceApp(href: string): boolean; /** * Keep the chat-first rail useful before a workspace manifest is populated. * Mounted workspace rows still win, so custom names and routes remain the * source of truth once an app exists in the workspace. */ export declare function mergeChatFirstWorkspaceApps(apps: readonly WorkspaceAppSummary[] | undefined): WorkspaceAppSummary[]; export {}; //# sourceMappingURL=workspace-apps.d.ts.map