File size: 1,864 Bytes
94e1b2f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 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
}
}
|