@zhin.js/client 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -27
- package/{src → client}/index.ts +0 -1
- package/{src → client}/store/reducers/route.ts +1 -1
- package/{src → client}/store/reducers/script.ts +1 -1
- package/{src → client}/store/reducers/ui.ts +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -0
- package/dist/router/index.d.ts +25 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +49 -0
- package/dist/router/index.js.map +1 -0
- package/dist/store/index.d.ts +19 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +67 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/reducers/config.d.ts +54 -0
- package/dist/store/reducers/config.d.ts.map +1 -0
- package/dist/store/reducers/config.js +78 -0
- package/dist/store/reducers/config.js.map +1 -0
- package/dist/store/reducers/index.d.ts +13 -0
- package/dist/store/reducers/index.d.ts.map +1 -0
- package/dist/store/reducers/index.js +11 -0
- package/dist/store/reducers/index.js.map +1 -0
- package/dist/store/reducers/route.d.ts +26 -0
- package/dist/store/reducers/route.d.ts.map +1 -0
- package/dist/store/reducers/route.js +85 -0
- package/dist/store/reducers/route.js.map +1 -0
- package/dist/store/reducers/script.d.ts +11 -0
- package/dist/store/reducers/script.d.ts.map +1 -0
- package/dist/store/reducers/script.js +74 -0
- package/dist/store/reducers/script.js.map +1 -0
- package/dist/store/reducers/ui.d.ts +8 -0
- package/dist/store/reducers/ui.d.ts.map +1 -0
- package/dist/store/reducers/ui.js +23 -0
- package/dist/store/reducers/ui.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket/hooks.d.ts +55 -0
- package/dist/websocket/hooks.d.ts.map +1 -0
- package/dist/websocket/hooks.js +225 -0
- package/dist/websocket/hooks.js.map +1 -0
- package/dist/websocket/index.d.ts +13 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +31 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/instance.d.ts +18 -0
- package/dist/websocket/instance.d.ts.map +1 -0
- package/dist/websocket/instance.js +39 -0
- package/dist/websocket/instance.js.map +1 -0
- package/dist/websocket/manager.d.ts +110 -0
- package/dist/websocket/manager.d.ts.map +1 -0
- package/dist/websocket/manager.js +341 -0
- package/dist/websocket/manager.js.map +1 -0
- package/dist/websocket/messageHandler.d.ts +48 -0
- package/dist/websocket/messageHandler.d.ts.map +1 -0
- package/dist/websocket/messageHandler.js +140 -0
- package/dist/websocket/messageHandler.js.map +1 -0
- package/dist/websocket/types.d.ts +125 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/dist/websocket/types.js +43 -0
- package/dist/websocket/types.js.map +1 -0
- package/package.json +12 -18
- package/app/index.html +0 -13
- package/app/postcss.config.js +0 -5
- package/app/src/components/PluginConfigForm/BasicFieldRenderers.tsx +0 -253
- package/app/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +0 -261
- package/app/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +0 -105
- package/app/src/components/PluginConfigForm/FieldRenderer.tsx +0 -110
- package/app/src/components/PluginConfigForm/NestedFieldRenderer.tsx +0 -95
- package/app/src/components/PluginConfigForm/index.tsx +0 -237
- package/app/src/components/PluginConfigForm/types.ts +0 -46
- package/app/src/components/ThemeToggle.tsx +0 -21
- package/app/src/hooks/useTheme.ts +0 -17
- package/app/src/layouts/dashboard.tsx +0 -259
- package/app/src/main.tsx +0 -121
- package/app/src/pages/dashboard-bots.tsx +0 -198
- package/app/src/pages/dashboard-home.tsx +0 -301
- package/app/src/pages/dashboard-logs.tsx +0 -298
- package/app/src/pages/dashboard-plugin-detail.tsx +0 -360
- package/app/src/pages/dashboard-plugins.tsx +0 -166
- package/app/src/style.css +0 -1105
- package/app/src/theme/index.ts +0 -92
- package/app/tailwind.config.js +0 -70
- package/app/tsconfig.json +0 -16
- /package/{src → client}/router/index.tsx +0 -0
- /package/{src → client}/store/index.ts +0 -0
- /package/{src → client}/store/reducers/config.ts +0 -0
- /package/{src → client}/store/reducers/index.ts +0 -0
- /package/{src → client}/types.ts +0 -0
- /package/{src → client}/websocket/hooks.ts +0 -0
- /package/{src → client}/websocket/index.ts +0 -0
- /package/{src → client}/websocket/instance.ts +0 -0
- /package/{src → client}/websocket/manager.ts +0 -0
- /package/{src → client}/websocket/messageHandler.ts +0 -0
- /package/{src → client}/websocket/types.ts +0 -0
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react'
|
|
2
|
-
import { useNavigate } from 'react-router'
|
|
3
|
-
import * as Themes from '@radix-ui/themes'
|
|
4
|
-
import { Icons } from '@zhin.js/client'
|
|
5
|
-
|
|
6
|
-
const { Flex, Box, Spinner, Text, Callout, Heading, Badge, Grid, Card, Separator } = Themes
|
|
7
|
-
|
|
8
|
-
interface Plugin {
|
|
9
|
-
name: string
|
|
10
|
-
status: 'active' | 'inactive'
|
|
11
|
-
commandCount: number
|
|
12
|
-
componentCount: number
|
|
13
|
-
middlewareCount: number
|
|
14
|
-
contextCount: number
|
|
15
|
-
description: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default function DashboardPlugins() {
|
|
19
|
-
const navigate = useNavigate()
|
|
20
|
-
const [plugins, setPlugins] = useState<Plugin[]>([])
|
|
21
|
-
const [loading, setLoading] = useState(true)
|
|
22
|
-
const [error, setError] = useState<string | null>(null)
|
|
23
|
-
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
fetchPlugins()
|
|
26
|
-
const interval = setInterval(fetchPlugins, 10000)
|
|
27
|
-
return () => clearInterval(interval)
|
|
28
|
-
}, [])
|
|
29
|
-
|
|
30
|
-
const fetchPlugins = async () => {
|
|
31
|
-
try {
|
|
32
|
-
const res = await fetch('/api/plugins', { credentials: 'include' })
|
|
33
|
-
if (!res.ok) throw new Error('API 请求失败')
|
|
34
|
-
|
|
35
|
-
const data = await res.json()
|
|
36
|
-
if (data.success) {
|
|
37
|
-
setPlugins(data.data)
|
|
38
|
-
setError(null)
|
|
39
|
-
} else {
|
|
40
|
-
throw new Error('数据格式错误')
|
|
41
|
-
}
|
|
42
|
-
} catch (err) {
|
|
43
|
-
setError((err as Error).message)
|
|
44
|
-
} finally {
|
|
45
|
-
setLoading(false)
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (loading) {
|
|
50
|
-
return (
|
|
51
|
-
<Flex align="center" justify="center" className="h-full">
|
|
52
|
-
<Flex direction="column" align="center" gap="3">
|
|
53
|
-
<Spinner size="3" />
|
|
54
|
-
<Text size="2" color="gray">加载中...</Text>
|
|
55
|
-
</Flex>
|
|
56
|
-
</Flex>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (error) {
|
|
61
|
-
return (
|
|
62
|
-
<Flex align="center" justify="center" className="h-full">
|
|
63
|
-
<Callout.Root color="red">
|
|
64
|
-
<Callout.Icon>
|
|
65
|
-
<Icons.AlertCircle />
|
|
66
|
-
</Callout.Icon>
|
|
67
|
-
<Callout.Text>
|
|
68
|
-
加载失败: {error}
|
|
69
|
-
</Callout.Text>
|
|
70
|
-
</Callout.Root>
|
|
71
|
-
</Flex>
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return (
|
|
76
|
-
<Box>
|
|
77
|
-
{/* 页面标题 */}
|
|
78
|
-
<Flex direction="column" gap="2" mb="4">
|
|
79
|
-
<Heading size="6">插件管理</Heading>
|
|
80
|
-
<Flex align="center" gap="2">
|
|
81
|
-
<Text size="2" color="gray">共 {plugins.length} 个插件</Text>
|
|
82
|
-
<Badge color="green" size="1">{plugins.filter(p => p.status === 'active').length}</Badge>
|
|
83
|
-
<Text size="2" color="gray">个运行中</Text>
|
|
84
|
-
</Flex>
|
|
85
|
-
</Flex>
|
|
86
|
-
|
|
87
|
-
{/* 插件列表 - 紧凑网格 */}
|
|
88
|
-
<Grid columns={{ initial: '1', sm: '2', lg: '3' }} gap="3">
|
|
89
|
-
{plugins.map((plugin, index) => (
|
|
90
|
-
<Card
|
|
91
|
-
key={`${plugin.name}-${index}`}
|
|
92
|
-
className="cursor-pointer hover-lift transition-smooth"
|
|
93
|
-
onClick={() => navigate(`/plugins/${encodeURIComponent(plugin.name)}`)}
|
|
94
|
-
>
|
|
95
|
-
<Flex direction="column" gap="2" p="2">
|
|
96
|
-
{/* 头部 - 紧凑布局 */}
|
|
97
|
-
<Flex justify="between" align="center">
|
|
98
|
-
<Flex align="center" gap="2">
|
|
99
|
-
<Flex align="center" justify="center" className="w-8 h-8 rounded-lg bg-blue-500/10 dark:bg-blue-400/10">
|
|
100
|
-
<Icons.Package className="w-4 h-4 text-blue-600 dark:text-blue-400" />
|
|
101
|
-
</Flex>
|
|
102
|
-
<Heading size="3">{plugin.name}</Heading>
|
|
103
|
-
</Flex>
|
|
104
|
-
<Badge
|
|
105
|
-
color={plugin.status === 'active' ? 'green' : 'gray'}
|
|
106
|
-
size="1"
|
|
107
|
-
>
|
|
108
|
-
{plugin.status === 'active' ? '运行中' : '已停止'}
|
|
109
|
-
</Badge>
|
|
110
|
-
</Flex>
|
|
111
|
-
|
|
112
|
-
{/* 描述 - 限制两行 */}
|
|
113
|
-
<Text size="1" color="gray" className="line-clamp-2">
|
|
114
|
-
{plugin.description || '暂无描述'}
|
|
115
|
-
</Text>
|
|
116
|
-
|
|
117
|
-
<Separator size="4" my="1" />
|
|
118
|
-
|
|
119
|
-
{/* 统计信息 - 紧凑网格 */}
|
|
120
|
-
<Grid columns={{ initial: '1', sm: '2', lg: '4' }} gap="1">
|
|
121
|
-
<Flex gap="2" justify="center" align="center" className="rounded-md bg-blue-500/5 dark:bg-blue-400/5 p-1.5">
|
|
122
|
-
<Icons.Terminal className="w-3 h-3 text-blue-600 dark:text-blue-400" />
|
|
123
|
-
<Text size="2" weight="bold" className="mt-0.5">{plugin.commandCount}</Text>
|
|
124
|
-
<Text size="1" color="gray">命令</Text>
|
|
125
|
-
</Flex>
|
|
126
|
-
|
|
127
|
-
<Flex gap="2" justify="center" align="center" className="rounded-md bg-green-500/5 dark:bg-green-400/5 p-1.5">
|
|
128
|
-
<Icons.Box className="w-3 h-3 text-green-600 dark:text-green-400" />
|
|
129
|
-
<Text size="2" weight="bold" className="mt-0.5">{plugin.componentCount}</Text>
|
|
130
|
-
<Text size="1" color="gray">组件</Text>
|
|
131
|
-
</Flex>
|
|
132
|
-
|
|
133
|
-
<Flex gap="2" justify="center" align="center" className="rounded-md bg-purple-500/5 dark:bg-purple-400/5 p-1.5">
|
|
134
|
-
<Icons.Layers className="w-3 h-3 text-purple-600 dark:text-purple-400" />
|
|
135
|
-
<Text size="2" weight="bold" className="mt-0.5">{plugin.middlewareCount}</Text>
|
|
136
|
-
<Text size="1" color="gray">中间件</Text>
|
|
137
|
-
</Flex>
|
|
138
|
-
|
|
139
|
-
<Flex gap="2" justify="center" align="center" className="rounded-md bg-orange-500/5 dark:bg-orange-400/5 p-1.5">
|
|
140
|
-
<Icons.Database className="w-3 h-3 text-orange-600 dark:text-orange-400" />
|
|
141
|
-
<Text size="2" weight="bold" className="mt-0.5">{plugin.contextCount}</Text>
|
|
142
|
-
<Text size="1" color="gray">上下文</Text>
|
|
143
|
-
</Flex>
|
|
144
|
-
</Grid>
|
|
145
|
-
</Flex>
|
|
146
|
-
</Card>
|
|
147
|
-
))}
|
|
148
|
-
</Grid>
|
|
149
|
-
|
|
150
|
-
{/* 空状态 */}
|
|
151
|
-
{plugins.length === 0 && (
|
|
152
|
-
<Card className="mt-6">
|
|
153
|
-
<Flex direction="column" align="center" gap="3" py="8">
|
|
154
|
-
<Flex align="center" justify="center" className="w-16 h-16 rounded-full bg-gray-100 dark:bg-gray-800">
|
|
155
|
-
<Icons.Package className="w-8 h-8 text-gray-400" />
|
|
156
|
-
</Flex>
|
|
157
|
-
<Flex direction="column" align="center" gap="1">
|
|
158
|
-
<Heading size="4">暂无插件</Heading>
|
|
159
|
-
<Text size="2" color="gray">请先安装并启用插件</Text>
|
|
160
|
-
</Flex>
|
|
161
|
-
</Flex>
|
|
162
|
-
</Card>
|
|
163
|
-
)}
|
|
164
|
-
</Box>
|
|
165
|
-
)
|
|
166
|
-
}
|