export interface ConsoleRpcExtendedCtx { /** full scope 才允许写操作;demo scope 只放行只读 RPC。 */ fullScope: boolean; projectRoot: string; /** Plugin Runtime ScheduleHost(basic/cli schedule-host-installer 提供)。 */ scheduleHost?: unknown; /** 在固定 generation lease 内执行一次 Endpoint 管理操作。 */ withEndpointManagement?: (adapter: string, endpointKey: string, run: (management: EndpointManagementPort) => T | Promise) => Promise; /** Plugin Runtime DatabaseHost 的 models 视图。 */ databaseHost?: { models: { get(name: string): unknown; }; }; /** Narrow generation-bound persistent-job port; null when Assistant is disabled. */ resolveScheduleEngine?: () => ConsoleScheduleEngine | null | undefined; /** LoginAssist list/submit/cancel(刷新后仍可消费扫码/滑块待办)。 */ loginAssist?: { listPending(): readonly { id: string; adapter: string; endpointKey: string; type: string; payload: Record; createdAt: number; expiresAt?: number; }[]; submit(id: string, value: string | Record): boolean; cancel(id: string, reason?: string): boolean; }; /** Authenticated Root adapter; mutation DTOs deliberately contain no principal/decision fields. */ workroomProfileControl?: ConsoleWorkroomProfileControlPort; /** Authenticated HTTP principal; never accepted from the RPC body. */ authenticatedPrincipal?: Readonly<{ principalId: string; }>; workroomKnowledgeControl?: ConsoleWorkroomKnowledgeControlPort; } export interface ConsoleWorkroomProfileControlPort { getPlanningStatus(projectId: string, authenticatedPrincipal?: Readonly<{ principalId: string; }>): Promise; bootstrapPlanning(command: Readonly<{ operationId: string; projectId: string; expectedRegistryRevision: number; includeTools?: readonly string[]; includeSkills?: readonly string[]; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; publishPack(command: Readonly<{ operationId: string; pack: unknown; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; publishProfile(command: Readonly<{ operationId: string; projectId: string; expectedRegistryRevision: number; overlay: unknown; activate: boolean; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; publishRollback(command: Readonly<{ operationId: string; projectId: string; expectedRegistryRevision: number; restoredFromRevisionId: string; overlay: unknown; activate: boolean; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; publishPlanningPolicy(command: Readonly<{ operationId: string; projectId: string; profileRevisionId: string; revision: number; expectedPreviousDigest?: string; policy: unknown; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; } export interface ConsoleWorkroomKnowledgeControlPort { read(projectId: string): Promise; publish(command: Readonly<{ operationId: string; projectId: string; expectedRevision: number; entries: readonly unknown[]; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; rollback(command: Readonly<{ operationId: string; projectId: string; expectedRevision: number; restoreRevision: number; }>, authenticatedPrincipal: Readonly<{ principalId: string; }>): Promise; } export interface ConsoleScheduleEngine { addJob(job: Record): Promise>; removeJob(id: string): Promise; pauseJob(id: string): Promise; resumeJob(id: string): Promise; listJobs(): Promise[]>; } export type ExtendedRpcResult = { data: unknown; } | { error: string; }; export interface ScheduleJobRow { id: string; cron: string; description?: string; } export interface InboxSelection { where(query: Record): InboxSelection; /** 可选:DB 侧排序下推(wrapModel 链具备该能力,轻量 fake 可缺失)。 */ orderBy?(field: string, direction?: 'ASC' | 'DESC'): InboxSelection; /** 可选:DB 侧 limit 下推。 */ limit?(count: number): InboxSelection; /** 可选:DB 侧 offset 下推。 */ offset?(count: number): InboxSelection; then[], TResult2 = never>(onfulfilled?: ((value: Record[]) => TResult1 | PromiseLike) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | null): Promise; } export interface InboxModel { select(): InboxSelection; update?(patch: Record): { where(query: Record): Promise | unknown; }; } export interface EndpointManagementPort { listFriends?(): Promise; listGroups?(): Promise; listChannels?(): Promise; listGroupMembers?(groupId: string): Promise; listRequests?(): Promise; approveRequest?(requestId: string, remark?: string): Promise; rejectRequest?(requestId: string, reason?: string): Promise; kickGroupMember?(groupId: string, userId: string): Promise; muteGroupMember?(groupId: string, userId: string, durationSeconds: number): Promise; setGroupAdmin?(groupId: string, userId: string, enabled: boolean): Promise; deleteFriend?(userId: string): Promise; }