ManimCat / src /studio-agent /runtime /tool-runtime-context.ts
Bin29's picture
Sync from main: c1ef036 chore: document docker persistence volumes
94e1b2f
import type {
StudioPermissionDecision,
StudioPermissionRequest,
StudioSession,
StudioSessionStore,
StudioToolChoice,
StudioToolContext
} from '../domain/types'
import type { CustomApiConfig } from '../../types'
export interface StudioSubagentRunRequest {
projectId: string
parentSession: StudioSession
childSession: StudioSession
description: string
inputText: string
subagentType: 'reviewer' | 'designer'
skillName?: string
files?: string[]
customApiConfig?: CustomApiConfig
toolChoice?: StudioToolChoice
}
export interface StudioSubagentRunResult {
text: string
}
export interface StudioResolvedSkill {
name: string
description: string
directory: string
entryFile: string
content: string
manifestPath?: string
manifest?: Record<string, unknown>
preferredAgent?: 'builder' | 'reviewer' | 'designer'
allowedTools?: string[]
files: string[]
}
export interface StudioToolPermissionRequest {
permission: string
patterns: string[]
metadata?: Record<string, unknown>
always?: string[]
}
export interface StudioRuntimeBackedToolContext extends StudioToolContext {
sessionStore?: StudioSessionStore
ask?: (request: StudioToolPermissionRequest) => Promise<StudioPermissionDecision>
runSubagent?: (input: StudioSubagentRunRequest) => Promise<StudioSubagentRunResult>
resolveSkill?: (name: string, session: StudioSession) => Promise<StudioResolvedSkill>
}
export function toPermissionRequest(
request: StudioToolPermissionRequest,
base: Pick<StudioPermissionRequest, 'id' | 'sessionID'>,
tool: NonNullable<StudioPermissionRequest['tool']>
): StudioPermissionRequest {
return {
id: base.id,
sessionID: base.sessionID,
permission: request.permission,
patterns: request.patterns,
metadata: request.metadata,
always: request.always ?? request.patterns,
tool
}
}