Files
tutti/packages/agent/gui/agentConversationRailController.ts
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

84 lines
3.0 KiB
TypeScript

import type { AgentSessionEngine } from "@tutti-os/agent-activity-core";
import { AgentGUIConversationRailQueryController as InternalAgentGUIConversationRailQueryController } from "./agent-gui/agentGuiNode/controller/AgentGUIConversationRailQueryController.ts";
import type { CachedConversationRailQuery } from "./agent-gui/agentGuiNode/controller/agentGuiConversationRailQueryCache.ts";
import type { AgentGUIConversationRailQuerySnapshot } from "./agent-gui/agentGuiNode/controller/agentConversationRailQuerySnapshot.ts";
import type { ConversationRailQueryScope } from "./agent-gui/agentGuiNode/controller/agentGuiConversationRailQueryTypes.ts";
import type { AgentConversationRailRuntimePort } from "./agentConversationRailContracts.ts";
import type { AgentGUIConversationActivityController } from "./agent-gui/agentGuiNode/controller/agentGUIConversationActivityController.ts";
import {
createWorkspaceQueryCache,
type WorkspaceQueryCache
} from "./shared/query/workspaceQueryCache.ts";
export type {
AgentGUIConversationRailQuerySnapshot,
ConversationRailQueryScope
};
export type ConversationRailQueryRuntime = Pick<
AgentConversationRailRuntimePort,
| "listPinnedSessionsPage"
| "listSessionSectionPage"
| "listSessionSections"
| "listSessionsPage"
| "reportDiagnostic"
>;
export interface AgentGUIConversationRailQueryControllerInput {
engine: AgentSessionEngine;
getActiveConversationId(): string | null;
runtime: ConversationRailQueryRuntime;
scheduler?: {
schedule(
delayMs: number,
task: () => void
): {
cancel(): void;
};
};
sectionPageSize?: number;
sectionRefreshLimitMax?: number;
workspaceId: string;
}
export interface AgentGUIConversationRailQueryController {
activityController: AgentGUIConversationActivityController;
attach(): () => void;
configure(scope: ConversationRailQueryScope): void;
getSnapshot(): AgentGUIConversationRailQuerySnapshot;
isInteractionLocked(): boolean;
loadMoreSearchResults(): void;
loadMoreSectionConversations(section: { id: string }): void;
refresh(): Promise<void>;
retrySearchResults(): void;
setSearchQuery(value: string): void;
subscribe(
listener: (snapshot: AgentGUIConversationRailQuerySnapshot) => void
): () => void;
}
const conversationRailQueryCachesByEngine = new WeakMap<
AgentSessionEngine,
WorkspaceQueryCache<CachedConversationRailQuery>
>();
export function createAgentGUIConversationRailQueryController(
input: AgentGUIConversationRailQueryControllerInput
): AgentGUIConversationRailQueryController {
let sessionSectionsQueryCache = conversationRailQueryCachesByEngine.get(
input.engine
);
if (!sessionSectionsQueryCache) {
sessionSectionsQueryCache =
createWorkspaceQueryCache<CachedConversationRailQuery>();
conversationRailQueryCachesByEngine.set(
input.engine,
sessionSectionsQueryCache
);
}
return new InternalAgentGUIConversationRailQueryController({
...input,
sessionSectionsQueryCache
});
}