feat(web): acp api client (agent_kinds)

This commit is contained in:
2026-05-07 11:45:33 +08:00
parent e97541030a
commit 7307ad0054
+65
View File
@@ -0,0 +1,65 @@
import { request } from './client'
// Admin DTO from `internal/acp/dto.go: AgentKindAdminDTO`.
export interface AgentKindAdmin {
id: string
name: string
display_name: string
description: string
binary_path: string
args: string[]
env_keys: string[]
enabled: boolean
created_by: string
created_at: string
updated_at: string
}
// Public DTO (non-admin view) from `internal/acp/dto.go: AgentKindPublicDTO`.
export interface AgentKindPublic {
id: string
name: string
display_name: string
enabled: boolean
}
// Type guard distinguishing admin vs public DTO based on presence of admin-only fields.
export function isAgentKindAdmin(k: AgentKindAdmin | AgentKindPublic): k is AgentKindAdmin {
return 'binary_path' in k
}
export interface CreateAgentKindReq {
name: string
display_name: string
description?: string
binary_path: string
args?: string[]
env?: Record<string, string>
enabled?: boolean
}
export interface UpdateAgentKindReq {
display_name?: string
description?: string
binary_path?: string
args?: string[]
env?: Record<string, string>
enabled?: boolean
}
const enc = (v: string) => encodeURIComponent(v)
export const acpApi = {
agentKinds: {
list: () =>
request<(AgentKindAdmin | AgentKindPublic)[]>('/api/v1/acp/agent-kinds'),
get: (id: string) =>
request<AgentKindAdmin>(`/api/v1/acp/agent-kinds/${enc(id)}`),
create: (req: CreateAgentKindReq) =>
request<AgentKindAdmin>('/api/v1/acp/agent-kinds', { method: 'POST', body: req }),
update: (id: string, req: UpdateAgentKindReq) =>
request<AgentKindAdmin>(`/api/v1/acp/agent-kinds/${enc(id)}`, { method: 'PATCH', body: req }),
remove: (id: string) =>
request<void>(`/api/v1/acp/agent-kinds/${enc(id)}`, { method: 'DELETE' }),
},
}