You've already forked agentic-coding-workflow
feat(web): AgentKindAdminListView (admin list)
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { NButton, NSpin } from 'naive-ui'
|
||||
import AppShell from '@/layouts/AppShell.vue'
|
||||
import { useAcpStore } from '@/stores/acp'
|
||||
|
||||
const router = useRouter()
|
||||
const store = useAcpStore()
|
||||
|
||||
onMounted(() => store.listAgentKinds(true))
|
||||
|
||||
async function toggleEnabled(id: string, enabled: boolean) {
|
||||
await store.updateAgentKind(id, { enabled })
|
||||
}
|
||||
|
||||
async function remove(id: string, name: string) {
|
||||
if (!confirm(`Delete agent kind "${name}"?`)) return
|
||||
try {
|
||||
await store.deleteAgentKind(id)
|
||||
} catch (e) {
|
||||
alert(`Delete failed: ${e instanceof Error ? e.message : 'unknown'}`)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AppShell>
|
||||
<NSpin :show="store.loading">
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<h1 class="text-2xl font-semibold">
|
||||
ACP Agent Kinds
|
||||
</h1>
|
||||
<NButton
|
||||
type="primary"
|
||||
@click="router.push('/admin/acp/agent-kinds/new')"
|
||||
>
|
||||
+ New
|
||||
</NButton>
|
||||
</div>
|
||||
<div
|
||||
v-if="store.error"
|
||||
class="text-red-600"
|
||||
>
|
||||
{{ store.error }}
|
||||
</div>
|
||||
<table
|
||||
v-else
|
||||
class="w-full text-sm"
|
||||
>
|
||||
<thead class="text-left">
|
||||
<tr>
|
||||
<th class="px-3 py-2">
|
||||
Name
|
||||
</th>
|
||||
<th class="px-3 py-2">
|
||||
Display
|
||||
</th>
|
||||
<th class="px-3 py-2">
|
||||
Binary
|
||||
</th>
|
||||
<th class="px-3 py-2">
|
||||
Enabled
|
||||
</th>
|
||||
<th class="px-3 py-2 text-right">
|
||||
Actions
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr
|
||||
v-for="k in store.agentKinds"
|
||||
:key="k.id"
|
||||
class="border-t"
|
||||
>
|
||||
<td class="px-3 py-2 font-mono">
|
||||
{{ k.name }}
|
||||
</td>
|
||||
<td class="px-3 py-2">
|
||||
{{ k.display_name }}
|
||||
</td>
|
||||
<td class="px-3 py-2 font-mono text-xs">
|
||||
{{ k.binary_path }}
|
||||
</td>
|
||||
<td class="px-3 py-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
:checked="k.enabled"
|
||||
@change="toggleEnabled(k.id, !k.enabled)"
|
||||
>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-right space-x-2">
|
||||
<NButton
|
||||
text
|
||||
type="primary"
|
||||
@click="router.push(`/admin/acp/agent-kinds/${k.id}`)"
|
||||
>
|
||||
Edit
|
||||
</NButton>
|
||||
<NButton
|
||||
text
|
||||
type="error"
|
||||
@click="remove(k.id, k.name)"
|
||||
>
|
||||
Delete
|
||||
</NButton>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</NSpin>
|
||||
</AppShell>
|
||||
</template>
|
||||
Reference in New Issue
Block a user