import * as plugins from './plugins.js'; import type { IControllerTrackedConversation, IControllerConversationSearchResult, TControllerSessionHarnessId, TControllerSessionId, } from './interfaces.js'; /** * Every conversation AGL tracks, across every registered project. Active entries carry live * harness state; entries archived in AGL are served from their durable title cache, so the * archive view never starts a harness read. */ export interface IReq_ControllerConversationList extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerConversationList > { method: 'controller.conversation.list'; request: Record; response: { conversations: IControllerTrackedConversation[]; /** More projects held tracked conversations than the cross-project read bound allows. */ truncated?: true; }; } /** * Search harness conversations that are not necessarily tracked yet, across registered projects * and the immediate subdirectories of the configured standard project directories. */ export interface IReq_ControllerConversationSearch extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerConversationSearch > { method: 'controller.conversation.search'; request: { query: string; /** Absent searches every registered project and every standard-directory candidate. */ projectIds?: string[]; /** Absent searches every session harness. */ harnessIds?: TControllerSessionHarnessId[]; }; response: { results: IControllerConversationSearchResult[]; /** More matches or more candidate directories existed than the bounds allow. */ truncated?: true; }; } /** * Track an existing harness conversation. The directory is registered as a project when it is * not one yet, so opening a conversation under a standard directory needs no separate step. */ export interface IReq_ControllerConversationOpen extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerConversationOpen > { method: 'controller.conversation.open'; request: { /** Absolute existing directory of the conversation's project. */ projectDirectory: string; sessionId: TControllerSessionId; }; response: { conversation: IControllerTrackedConversation; }; } /** Archive a tracked conversation in AGL. The harness conversation is untouched. */ export interface IReq_ControllerConversationArchive extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerConversationArchive > { method: 'controller.conversation.archive'; request: { projectId: string; sessionId: TControllerSessionId; }; response: { conversation: IControllerTrackedConversation; }; } /** Return an AGL-archived conversation to the active list. */ export interface IReq_ControllerConversationReopen extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerConversationReopen > { method: 'controller.conversation.reopen'; request: { projectId: string; sessionId: TControllerSessionId; }; response: { conversation: IControllerTrackedConversation; }; }