feat: add permission decision options, tool allowlisting, and refactored chat UI components

This commit is contained in:
weishu
2025-12-17 07:57:37 +08:00
parent c2b886896b
commit 0fa05dc205
17 changed files with 2689 additions and 86 deletions
+21 -4
View File
@@ -99,17 +99,34 @@ export class ApiClient {
})
}
async approvePermission(sessionId: string, requestId: string, mode?: 'default' | 'acceptEdits' | 'bypassPermissions'): Promise<void> {
async approvePermission(
sessionId: string,
requestId: string,
modeOrOptions?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | {
mode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'
allowTools?: string[]
decision?: 'approved' | 'approved_for_session' | 'denied' | 'abort'
}
): Promise<void> {
const body = typeof modeOrOptions === 'string' || modeOrOptions === undefined
? { mode: modeOrOptions }
: modeOrOptions
await this.request(`/api/sessions/${encodeURIComponent(sessionId)}/permissions/${encodeURIComponent(requestId)}/approve`, {
method: 'POST',
body: JSON.stringify({ mode })
body: JSON.stringify(body)
})
}
async denyPermission(sessionId: string, requestId: string): Promise<void> {
async denyPermission(
sessionId: string,
requestId: string,
options?: {
decision?: 'approved' | 'approved_for_session' | 'denied' | 'abort'
}
): Promise<void> {
await this.request(`/api/sessions/${encodeURIComponent(sessionId)}/permissions/${encodeURIComponent(requestId)}/deny`, {
method: 'POST',
body: JSON.stringify({})
body: JSON.stringify(options ?? {})
})
}