import type { PluginInput } from '@opencode-ai/plugin'; import type { InterviewConfig } from '../config'; import type { InterviewAnswer, InterviewFileItem, InterviewListItem, InterviewRecord, InterviewState } from './types'; /** * Cap on retained abandoned interview records. Abandoned interviews are kept * briefly so a still-open browser tab can render their final state, but * without a bound the `interviewsById` and `browserOpened` collections grow * for the life of a long-running session/dashboard process. */ export declare const MAX_RETAINED_ABANDONED = 50; export declare function createInterviewService(ctx: PluginInput, config?: InterviewConfig, deps?: { openBrowser?: (url: string) => void; env?: NodeJS.ProcessEnv; }): { setBaseUrlResolver: (resolver: () => Promise) => void; setStatePushCallback: (callback: (interviewId: string, state: InterviewState) => void) => void; setOnInterviewCreated: (callback: (interview: InterviewRecord) => void) => void; getActiveInterviewId: (sessionID: string) => string | null; registerCommand: (config: Record) => void; handleCommandExecuteBefore: (input: { command: string; sessionID: string; arguments: string; }, output: { parts: Array<{ type: string; text?: string; synthetic?: boolean; metadata?: Record; }>; }) => Promise; handleEvent: (input: { event: { type: string; properties?: Record; }; }) => Promise; getInterviewState: (interviewId: string) => Promise; listInterviewFiles: () => Promise; listInterviews: () => InterviewListItem[]; submitAnswers: (interviewId: string, answers: InterviewAnswer[]) => Promise; submitBlockComment: (interviewId: string, section: string, comment: string) => Promise; submitChat: (interviewId: string, message: string) => Promise; handleNudgeAction: (interviewId: string, action: 'more-questions' | 'confirm-complete') => Promise; };