@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.
Files changed (99) hide show
  1. package/README.md +23 -27
  2. package/{src → client}/index.ts +0 -1
  3. package/{src → client}/store/reducers/route.ts +1 -1
  4. package/{src → client}/store/reducers/script.ts +1 -1
  5. package/{src → client}/store/reducers/ui.ts +1 -1
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +0 -1
  9. package/dist/index.js.map +1 -0
  10. package/dist/router/index.d.ts +25 -0
  11. package/dist/router/index.d.ts.map +1 -0
  12. package/dist/router/index.js +49 -0
  13. package/dist/router/index.js.map +1 -0
  14. package/dist/store/index.d.ts +19 -0
  15. package/dist/store/index.d.ts.map +1 -0
  16. package/dist/store/index.js +67 -0
  17. package/dist/store/index.js.map +1 -0
  18. package/dist/store/reducers/config.d.ts +54 -0
  19. package/dist/store/reducers/config.d.ts.map +1 -0
  20. package/dist/store/reducers/config.js +78 -0
  21. package/dist/store/reducers/config.js.map +1 -0
  22. package/dist/store/reducers/index.d.ts +13 -0
  23. package/dist/store/reducers/index.d.ts.map +1 -0
  24. package/dist/store/reducers/index.js +11 -0
  25. package/dist/store/reducers/index.js.map +1 -0
  26. package/dist/store/reducers/route.d.ts +26 -0
  27. package/dist/store/reducers/route.d.ts.map +1 -0
  28. package/dist/store/reducers/route.js +85 -0
  29. package/dist/store/reducers/route.js.map +1 -0
  30. package/dist/store/reducers/script.d.ts +11 -0
  31. package/dist/store/reducers/script.d.ts.map +1 -0
  32. package/dist/store/reducers/script.js +74 -0
  33. package/dist/store/reducers/script.js.map +1 -0
  34. package/dist/store/reducers/ui.d.ts +8 -0
  35. package/dist/store/reducers/ui.d.ts.map +1 -0
  36. package/dist/store/reducers/ui.js +23 -0
  37. package/dist/store/reducers/ui.js.map +1 -0
  38. package/dist/types.d.ts +7 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/websocket/hooks.d.ts +55 -0
  43. package/dist/websocket/hooks.d.ts.map +1 -0
  44. package/dist/websocket/hooks.js +225 -0
  45. package/dist/websocket/hooks.js.map +1 -0
  46. package/dist/websocket/index.d.ts +13 -0
  47. package/dist/websocket/index.d.ts.map +1 -0
  48. package/dist/websocket/index.js +31 -0
  49. package/dist/websocket/index.js.map +1 -0
  50. package/dist/websocket/instance.d.ts +18 -0
  51. package/dist/websocket/instance.d.ts.map +1 -0
  52. package/dist/websocket/instance.js +39 -0
  53. package/dist/websocket/instance.js.map +1 -0
  54. package/dist/websocket/manager.d.ts +110 -0
  55. package/dist/websocket/manager.d.ts.map +1 -0
  56. package/dist/websocket/manager.js +341 -0
  57. package/dist/websocket/manager.js.map +1 -0
  58. package/dist/websocket/messageHandler.d.ts +48 -0
  59. package/dist/websocket/messageHandler.d.ts.map +1 -0
  60. package/dist/websocket/messageHandler.js +140 -0
  61. package/dist/websocket/messageHandler.js.map +1 -0
  62. package/dist/websocket/types.d.ts +125 -0
  63. package/dist/websocket/types.d.ts.map +1 -0
  64. package/dist/websocket/types.js +43 -0
  65. package/dist/websocket/types.js.map +1 -0
  66. package/package.json +12 -18
  67. package/app/index.html +0 -13
  68. package/app/postcss.config.js +0 -5
  69. package/app/src/components/PluginConfigForm/BasicFieldRenderers.tsx +0 -253
  70. package/app/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +0 -261
  71. package/app/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +0 -105
  72. package/app/src/components/PluginConfigForm/FieldRenderer.tsx +0 -110
  73. package/app/src/components/PluginConfigForm/NestedFieldRenderer.tsx +0 -95
  74. package/app/src/components/PluginConfigForm/index.tsx +0 -237
  75. package/app/src/components/PluginConfigForm/types.ts +0 -46
  76. package/app/src/components/ThemeToggle.tsx +0 -21
  77. package/app/src/hooks/useTheme.ts +0 -17
  78. package/app/src/layouts/dashboard.tsx +0 -259
  79. package/app/src/main.tsx +0 -121
  80. package/app/src/pages/dashboard-bots.tsx +0 -198
  81. package/app/src/pages/dashboard-home.tsx +0 -301
  82. package/app/src/pages/dashboard-logs.tsx +0 -298
  83. package/app/src/pages/dashboard-plugin-detail.tsx +0 -360
  84. package/app/src/pages/dashboard-plugins.tsx +0 -166
  85. package/app/src/style.css +0 -1105
  86. package/app/src/theme/index.ts +0 -92
  87. package/app/tailwind.config.js +0 -70
  88. package/app/tsconfig.json +0 -16
  89. /package/{src → client}/router/index.tsx +0 -0
  90. /package/{src → client}/store/index.ts +0 -0
  91. /package/{src → client}/store/reducers/config.ts +0 -0
  92. /package/{src → client}/store/reducers/index.ts +0 -0
  93. /package/{src → client}/types.ts +0 -0
  94. /package/{src → client}/websocket/hooks.ts +0 -0
  95. /package/{src → client}/websocket/index.ts +0 -0
  96. /package/{src → client}/websocket/instance.ts +0 -0
  97. /package/{src → client}/websocket/manager.ts +0 -0
  98. /package/{src → client}/websocket/messageHandler.ts +0 -0
  99. /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
- }