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
  }
}