@jsbot-tellus/core 2.7.0 → 2.9.0
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/dist/core/web/routes/plugins.d.ts.map +1 -1
- package/dist/core/web/routes/plugins.js +51 -4
- package/dist/core/web/routes/plugins.js.map +1 -1
- package/dist/webui/assets/ActionsView-CdRiwzyc.css +1 -0
- package/dist/webui/assets/ActionsView-DpOwcpkP.js +1 -0
- package/dist/webui/assets/ConfigView-BwDaxNs6.css +1 -0
- package/dist/webui/assets/ConfigView-C8W7Taes.js +1 -0
- package/dist/webui/assets/DashboardView-FAQEqfkT.css +1 -0
- package/dist/webui/assets/DashboardView-XR4MljXP.js +1 -0
- package/dist/webui/assets/EventsView-D6uxp8iJ.css +1 -0
- package/dist/webui/assets/EventsView-dsacXF6v.js +1 -0
- package/dist/webui/assets/KvView-ClHfDapd.css +1 -0
- package/dist/webui/assets/KvView-CleDcxJm.js +1 -0
- package/dist/webui/assets/LoginView-auw7iDds.js +1 -0
- package/dist/webui/assets/LoginView-rwItauSQ.css +1 -0
- package/dist/webui/assets/LogsView-Crns4wd2.css +1 -0
- package/dist/webui/assets/LogsView-D94DH0eL.js +1 -0
- package/dist/webui/assets/MainLayout-BLJl7wIh.css +1 -0
- package/dist/webui/assets/MainLayout-BSmZGVVc.js +1 -0
- package/dist/webui/assets/PluginsView-BrrSON7o.js +1 -0
- package/dist/webui/assets/PluginsView-BwP5MkvC.css +1 -0
- package/dist/webui/assets/SessionsView-CboU4cCN.js +1 -0
- package/dist/webui/assets/SessionsView-DOUCUUrw.css +1 -0
- package/dist/webui/assets/api-Bm2KUKXH.js +3 -0
- package/dist/webui/assets/index-BX3-wbu2.css +1 -0
- package/dist/webui/assets/index-BjnuYVEl.js +50 -0
- package/dist/webui/assets/use-ui-scale-DvdJkOwB.js +1 -0
- package/dist/webui/index.html +9 -8
- package/package.json +2 -2
- package/src/core/web/routes/plugins.ts +75 -6
- package/dist/webui/assets/ActionsView-BDuXBWG1.js +0 -1
- package/dist/webui/assets/ActionsView-Ciib5lC6.css +0 -1
- package/dist/webui/assets/ConfigView-B3Gv2uRG.js +0 -1
- package/dist/webui/assets/ConfigView-CrEpss2y.css +0 -1
- package/dist/webui/assets/DashboardView-DR6yCaqs.css +0 -1
- package/dist/webui/assets/DashboardView-n9LGPmQL.js +0 -1
- package/dist/webui/assets/EventsView-DhO8twWb.js +0 -1
- package/dist/webui/assets/EventsView-PMkYKxZ-.css +0 -1
- package/dist/webui/assets/KvView-BCz_dOVC.js +0 -1
- package/dist/webui/assets/KvView-CaMvbxUz.css +0 -1
- package/dist/webui/assets/LoginView-BVnFkwSW.css +0 -1
- package/dist/webui/assets/LoginView-Br3_AC5z.js +0 -1
- package/dist/webui/assets/LogsView-Ba_12frI.js +0 -1
- package/dist/webui/assets/LogsView-NR4L1-XY.css +0 -1
- package/dist/webui/assets/MainLayout-D2LTc57u.js +0 -1
- package/dist/webui/assets/MainLayout-glfVNbMz.css +0 -1
- package/dist/webui/assets/PluginsView-DL9OxGph.css +0 -1
- package/dist/webui/assets/PluginsView-vQKBSCU8.js +0 -1
- package/dist/webui/assets/SessionsView-DSl37qpo.js +0 -1
- package/dist/webui/assets/SessionsView-p-u3JGTV.css +0 -1
- package/dist/webui/assets/api-CNzxhTWe.js +0 -3
- package/dist/webui/assets/index-CUvpnClx.js +0 -50
- package/dist/webui/assets/index-CePlRZX6.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{qi as e}from"./api-Bm2KUKXH.js";import{i as t,s as n}from"./index-BjnuYVEl.js";var r=e(t().uiScale??1);n(()=>{r.value=t().uiScale??1});function i(e){return Math.round(e*r.value)}export{i as t};
|
package/dist/webui/index.html
CHANGED
|
@@ -87,22 +87,23 @@
|
|
|
87
87
|
) {
|
|
88
88
|
root.style.setProperty('--app-radius', a.radius + 'rem')
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
var uiScale =
|
|
91
|
+
a.v === 2 &&
|
|
91
92
|
typeof a.uiScale === 'number' &&
|
|
92
93
|
a.uiScale >= 0.5 &&
|
|
93
94
|
a.uiScale <= 2
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
? a.uiScale
|
|
96
|
+
: 1
|
|
97
|
+
root.style.fontSize =
|
|
98
|
+
Math.round(16 * uiScale * 100) / 100 + 'px'
|
|
98
99
|
} catch (e) {
|
|
99
100
|
/* ignore — fall back to the default theme */
|
|
100
101
|
}
|
|
101
102
|
})()
|
|
102
103
|
</script>
|
|
103
|
-
<script type="module" crossorigin src="/assets/index-
|
|
104
|
-
<link rel="modulepreload" crossorigin href="/assets/api-
|
|
105
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
104
|
+
<script type="module" crossorigin src="/assets/index-BjnuYVEl.js"></script>
|
|
105
|
+
<link rel="modulepreload" crossorigin href="/assets/api-Bm2KUKXH.js">
|
|
106
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BX3-wbu2.css">
|
|
106
107
|
</head>
|
|
107
108
|
<body>
|
|
108
109
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1,9 +1,45 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { formatConfigIssues } from '../../config/schema.js'
|
|
1
3
|
import { stripPluginEnvelope } from '../../plugin/host.js'
|
|
4
|
+
import type { AnyPluginDefinition } from '../../plugin/types.js'
|
|
2
5
|
import { HttpError, isRecord, readJsonBody, sendData } from '../http.js'
|
|
3
6
|
import { asRecord, requireRuntime, type ApiContext } from './shared.js'
|
|
4
7
|
|
|
5
8
|
const ENVELOPE_KEYS = new Set(['enabled', 'private', 'groups'])
|
|
6
9
|
|
|
10
|
+
/**
|
|
11
|
+
* JSON Schema for a plugin's options, derived from its Zod input schema once
|
|
12
|
+
* per definition. `null` means the schema cannot be represented and the WebUI
|
|
13
|
+
* falls back to raw JSON editing.
|
|
14
|
+
*/
|
|
15
|
+
const jsonSchemaCache = new WeakMap<
|
|
16
|
+
AnyPluginDefinition,
|
|
17
|
+
Record<string, unknown> | null
|
|
18
|
+
>()
|
|
19
|
+
|
|
20
|
+
function pluginJsonSchema(
|
|
21
|
+
definition: AnyPluginDefinition
|
|
22
|
+
): Record<string, unknown> | null {
|
|
23
|
+
if (jsonSchemaCache.has(definition)) {
|
|
24
|
+
return jsonSchemaCache.get(definition) ?? null
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let result: Record<string, unknown> | null = null
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
result = z.toJSONSchema(definition.manifest.configSchema, {
|
|
31
|
+
io: 'input',
|
|
32
|
+
unrepresentable: 'any',
|
|
33
|
+
}) as Record<string, unknown>
|
|
34
|
+
} catch {
|
|
35
|
+
result = null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
jsonSchemaCache.set(definition, result)
|
|
39
|
+
|
|
40
|
+
return result
|
|
41
|
+
}
|
|
42
|
+
|
|
7
43
|
export async function handlePluginsList(ctx: ApiContext): Promise<void> {
|
|
8
44
|
const runtime = requireRuntime(ctx.deps)
|
|
9
45
|
const statuses = new Map(
|
|
@@ -16,6 +52,11 @@ export async function handlePluginsList(ctx: ApiContext): Promise<void> {
|
|
|
16
52
|
string,
|
|
17
53
|
unknown
|
|
18
54
|
>
|
|
55
|
+
// `safeStringify` treats shared references as circular; cloning keeps
|
|
56
|
+
// `config` and `options` from aliasing the same nested objects.
|
|
57
|
+
const options = structuredClone(
|
|
58
|
+
stripPluginEnvelope(envelope as never)
|
|
59
|
+
) as Record<string, unknown>
|
|
19
60
|
|
|
20
61
|
return {
|
|
21
62
|
id,
|
|
@@ -26,10 +67,8 @@ export async function handlePluginsList(ctx: ApiContext): Promise<void> {
|
|
|
26
67
|
enabled: status?.enabled ?? false,
|
|
27
68
|
loaded: status?.loaded ?? false,
|
|
28
69
|
config: envelope,
|
|
29
|
-
options
|
|
30
|
-
|
|
31
|
-
unknown
|
|
32
|
-
>,
|
|
70
|
+
options,
|
|
71
|
+
configSchema: pluginJsonSchema(definition),
|
|
33
72
|
}
|
|
34
73
|
})
|
|
35
74
|
const installed = runtime.installer.enabled
|
|
@@ -76,12 +115,42 @@ export async function handlePluginConfigPut(ctx: ApiContext): Promise<void> {
|
|
|
76
115
|
throw new HttpError(400, 'options must be an object')
|
|
77
116
|
}
|
|
78
117
|
|
|
118
|
+
const runtime = ctx.deps.getRuntime()
|
|
119
|
+
const definition = runtime?.plugins.find(
|
|
120
|
+
(plugin) => plugin.manifest.id === id
|
|
121
|
+
)
|
|
122
|
+
const options: Record<string, unknown> = {}
|
|
123
|
+
|
|
124
|
+
for (const [key, value] of Object.entries(body['options'])) {
|
|
125
|
+
if (!ENVELOPE_KEYS.has(key)) options[key] = value
|
|
126
|
+
}
|
|
127
|
+
|
|
79
128
|
for (const key of Object.keys(next)) {
|
|
80
129
|
if (!ENVELOPE_KEYS.has(key)) delete next[key]
|
|
81
130
|
}
|
|
82
131
|
|
|
83
|
-
|
|
84
|
-
|
|
132
|
+
if (definition === undefined) {
|
|
133
|
+
// Without a live runtime there is no schema to enforce; the config
|
|
134
|
+
// store still owns envelope validation.
|
|
135
|
+
Object.assign(next, options)
|
|
136
|
+
} else {
|
|
137
|
+
const parsed = definition.manifest.configSchema.safeParse(options)
|
|
138
|
+
|
|
139
|
+
if (!parsed.success) {
|
|
140
|
+
throw new HttpError(
|
|
141
|
+
400,
|
|
142
|
+
formatConfigIssues(parsed.error, `plugins.${id}`)
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (!isRecord(parsed.data)) {
|
|
147
|
+
throw new HttpError(
|
|
148
|
+
400,
|
|
149
|
+
`plugins.${id}: config schema must produce an object`
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
Object.assign(next, parsed.data)
|
|
85
154
|
}
|
|
86
155
|
}
|
|
87
156
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ki as e,Ri as t,Si as n,Ti as r,c as i,ci as a,d as o,f as s,ga as c,ii as l,ki as u,li as d,p as f,r as p,si as m,ti as h}from"./api-CNzxhTWe.js";var g={class:`result`},_=s(d({__name:`ActionsView`,setup(s){let d=e(`get_login_info`),_=e(`{}`),v=e(``),y=e(!1),b=e(!0),x=async()=>{let e={};if(_.value.trim().length>0&&_.value.trim()!==`{}`)try{e=JSON.parse(_.value)}catch{f.error(`params 必须是合法 JSON`);return}y.value=!0;try{let t=await p(`/api/actions`,{action:d.value,params:e});v.value=JSON.stringify(t.result,void 0,2)}catch(e){o(e)}finally{y.value=!1}};return n(()=>{i().then(e=>{b.value=e.runtime===null}).catch(()=>{b.value=!0})}),(e,n)=>{let i=u(`el-alert`),o=u(`el-input`),s=u(`el-form-item`),f=u(`el-button`),p=u(`el-form`),S=u(`el-divider`),C=u(`el-card`);return r(),l(`div`,null,[a(i,{title:`直接向 OneBot 调用任意 action。此功能等同完全特权接口,请谨慎使用。`,type:`warning`,closable:!1,class:`block`}),a(C,{class:`block`},{default:t(()=>[a(p,{"label-width":`100px`,size:`small`},{default:t(()=>[a(s,{label:`action`},{default:t(()=>[a(o,{modelValue:d.value,"onUpdate:modelValue":n[0]||=e=>d.value=e,placeholder:`如 get_login_info / send_private_msg`,style:{width:`320px`}},null,8,[`modelValue`])]),_:1}),a(s,{label:`params (JSON)`},{default:t(()=>[a(o,{modelValue:_.value,"onUpdate:modelValue":n[1]||=e=>_.value=e,type:`textarea`,rows:5,spellcheck:`false`,placeholder:`{}`},null,8,[`modelValue`])]),_:1}),a(s,null,{default:t(()=>[a(f,{type:`primary`,loading:y.value,disabled:b.value,onClick:x},{default:t(()=>[...n[2]||=[m(` 调用 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1}),a(S,null,{default:t(()=>[...n[3]||=[m(`结果`,-1)]]),_:1}),h(`pre`,g,c(v.value),1)]),_:1})])}}}),[[`__scopeId`,`data-v-ceeaf662`]]);export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.block[data-v-ceeaf662]{margin-bottom:16px}.result[data-v-ceeaf662]{background:var(--app-bg);border:1px solid var(--app-border);color:var(--app-text);white-space:pre-wrap;border-radius:10px;min-height:80px;margin:0;padding:12px;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:12px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Di as e,Ki as t,Ri as n,Si as r,Ti as i,Xr as a,ci as o,d as s,f as c,ga as l,i as u,ii as d,ki as f,li as p,n as m,ni as h,p as g,r as _,ri as v,si as y,ti as b}from"./api-CNzxhTWe.js";var x={class:`block`},S={class:`issues`},C=c(p({__name:`ConfigView`,setup(c){let p=t(`form`),C=t({url:``,accessToken:``,roles:{superadmin:[],admin:[]},message:{charThreshold:50,lineThreshold:3},webui:{enabled:!1,host:`127.0.0.1`,port:8787,username:``,password:``,sessionTtlHours:12,trustProxy:!1},installer:{enabled:!1,registry:`https://registry.npmjs.org/`,allowedPackages:[],allowScripts:!1,timeoutMs:12e4}}),w=t(``),T=t({path:``,hash:``,accessTokenSet:!1,webuiPasswordSet:!1}),E=t(``),D=t([]),O=t(!1),k=()=>{let e=JSON.parse(JSON.stringify(C.value)),t=e.webui;return w.value===``?delete t.password:t.password=w.value,e.accessToken===``&&delete e.accessToken,e},A=()=>{E.value=JSON.stringify(k(),null,4)},j=()=>{try{let e=JSON.parse(E.value),t=e.webui??{};typeof t.password==`string`&&(w.value=t.password===``?``:`00000000`),typeof e.accessToken==`string`&&e.accessToken===``?e.accessToken=``:typeof e.accessToken==`string`&&(e.accessToken=`00000000`),C.value=e,g.success(`已应用到表单`)}catch(e){g.error(`JSON 格式错误`),console.warn(e)}},M=async e=>{let t=await _(`/api/config/validate`,{config:e});return D.value=t.issues,t.ok},N=async()=>{O.value=!0;try{await M(k())&&g.success(`校验通过`)}catch(e){s(e)}finally{O.value=!1}},P=async()=>{let e;try{e=JSON.parse(E.value)}catch{g.error(`JSON 格式错误`);return}await I(e,w.value)},F=async()=>{let e=k();w.value=e.webui.password,await I(e,w.value),D.value=[]},I=async(e,t)=>{O.value=!0;try{if(!await M(e)&&D.value.length>0){g.error(`校验失败`);return}let t=await u(`/api/config`,{config:e,baseHash:T.value.hash});if(!t.ok){g.error(t.error??`保存失败`);return}g.success(`已保存并重启运行时`),await L()}catch(e){s(e)}finally{O.value=!1}},L=async()=>{try{let e=await m(`/api/config`);C.value=e.config,T.value=e.meta,w.value=(e.meta.webuiPasswordSet&&e.config.webui.password,``),E.value=JSON.stringify(e.config,null,4)}catch(e){s(e)}},R=e=>e.join(`, `);function z(e,t,n,r){let i=n.split(/[,,]/).map(e=>e.trim()).filter(e=>e.length>0);e[t]=r?i.map(r):i}return r(()=>void L()),(t,r)=>{let s=f(`el-divider`),c=f(`el-input`),u=f(`el-form-item`),m=f(`el-switch`),g=f(`el-input-number`),_=f(`el-space`),k=f(`el-button`),M=f(`el-form`),I=f(`el-tab-pane`),L=f(`el-tabs`),B=f(`el-alert`);return i(),d(`div`,null,[o(L,{modelValue:p.value,"onUpdate:modelValue":r[19]||=e=>p.value=e},{default:n(()=>[o(I,{label:`常用设置`,name:`form`},{default:n(()=>[o(M,{"label-width":`140px`,size:`small`,class:`form`},{default:n(()=>[o(s,{"content-position":`left`},{default:n(()=>[...r[20]||=[y(`连接`,-1)]]),_:1}),o(u,{label:`ws url`},{default:n(()=>[o(c,{modelValue:C.value.url,"onUpdate:modelValue":r[0]||=e=>C.value.url=e},null,8,[`modelValue`])]),_:1}),o(u,{label:`accessToken`},{default:n(()=>[o(c,{modelValue:C.value.accessToken,"onUpdate:modelValue":r[1]||=e=>C.value.accessToken=e,placeholder:T.value.accessTokenSet?`留空保持不变`:`未设置`},null,8,[`modelValue`,`placeholder`])]),_:1}),o(s,{"content-position":`left`},{default:n(()=>[...r[21]||=[y(`WebUI`,-1)]]),_:1}),o(u,{label:`enabled`},{default:n(()=>[o(m,{modelValue:C.value.webui.enabled,"onUpdate:modelValue":r[2]||=e=>C.value.webui.enabled=e},null,8,[`modelValue`])]),_:1}),o(u,{label:`host / port`},{default:n(()=>[o(_,null,{default:n(()=>[o(c,{modelValue:C.value.webui.host,"onUpdate:modelValue":r[3]||=e=>C.value.webui.host=e,style:{width:`160px`}},null,8,[`modelValue`]),o(g,{modelValue:C.value.webui.port,"onUpdate:modelValue":r[4]||=e=>C.value.webui.port=e,min:1,max:65535},null,8,[`modelValue`])]),_:1})]),_:1}),o(u,{label:`username`},{default:n(()=>[o(c,{modelValue:C.value.webui.username,"onUpdate:modelValue":r[5]||=e=>C.value.webui.username=e,style:{width:`200px`}},null,8,[`modelValue`])]),_:1}),o(u,{label:`password`},{default:n(()=>[o(c,{modelValue:w.value,"onUpdate:modelValue":r[6]||=e=>w.value=e,"show-password":``,placeholder:T.value.webuiPasswordSet?`留空保持不变`:`未设置`,style:{width:`240px`}},null,8,[`modelValue`,`placeholder`])]),_:1}),o(u,{label:`sessionTtlHours`},{default:n(()=>[o(g,{modelValue:C.value.webui.sessionTtlHours,"onUpdate:modelValue":r[7]||=e=>C.value.webui.sessionTtlHours=e,min:1,max:720},null,8,[`modelValue`])]),_:1}),o(u,{label:`trustProxy`},{default:n(()=>[o(m,{modelValue:C.value.webui.trustProxy,"onUpdate:modelValue":r[8]||=e=>C.value.webui.trustProxy=e},null,8,[`modelValue`])]),_:1}),o(s,{"content-position":`left`},{default:n(()=>[...r[22]||=[y(`消息聚合`,-1)]]),_:1}),o(u,{label:`charThreshold`},{default:n(()=>[o(g,{modelValue:C.value.message.charThreshold,"onUpdate:modelValue":r[9]||=e=>C.value.message.charThreshold=e,min:1},null,8,[`modelValue`])]),_:1}),o(u,{label:`lineThreshold`},{default:n(()=>[o(g,{modelValue:C.value.message.lineThreshold,"onUpdate:modelValue":r[10]||=e=>C.value.message.lineThreshold=e,min:1},null,8,[`modelValue`])]),_:1}),o(s,{"content-position":`left`},{default:n(()=>[...r[23]||=[y(`安装器`,-1)]]),_:1}),o(u,{label:`enabled`},{default:n(()=>[o(m,{modelValue:C.value.installer.enabled,"onUpdate:modelValue":r[11]||=e=>C.value.installer.enabled=e},null,8,[`modelValue`])]),_:1}),o(u,{label:`registry`},{default:n(()=>[o(c,{modelValue:C.value.installer.registry,"onUpdate:modelValue":r[12]||=e=>C.value.installer.registry=e},null,8,[`modelValue`])]),_:1}),o(u,{label:`allowedPackages`},{default:n(()=>[o(c,{"model-value":R(C.value.installer.allowedPackages),"onUpdate:modelValue":r[13]||=e=>z(C.value.installer,`allowedPackages`,e)},null,8,[`model-value`])]),_:1}),o(u,{label:`allowScripts`},{default:n(()=>[o(m,{modelValue:C.value.installer.allowScripts,"onUpdate:modelValue":r[14]||=e=>C.value.installer.allowScripts=e},null,8,[`modelValue`])]),_:1}),o(u,{label:`timeoutMs`},{default:n(()=>[o(g,{modelValue:C.value.installer.timeoutMs,"onUpdate:modelValue":r[15]||=e=>C.value.installer.timeoutMs=e,min:1e3,max:6e5},null,8,[`modelValue`])]),_:1}),o(s,{"content-position":`left`},{default:n(()=>[...r[24]||=[y(`角色`,-1)]]),_:1}),o(u,{label:`superadmin`},{default:n(()=>[o(c,{"model-value":R(C.value.roles.superadmin),placeholder:`逗号分隔的 QQ 号`,"onUpdate:modelValue":r[16]||=e=>z(C.value.roles,`superadmin`,e,Number)},null,8,[`model-value`])]),_:1}),o(u,{label:`admin`},{default:n(()=>[o(c,{"model-value":R(C.value.roles.admin),placeholder:`逗号分隔的 QQ 号`,"onUpdate:modelValue":r[17]||=e=>z(C.value.roles,`admin`,e,Number)},null,8,[`model-value`])]),_:1}),o(u,null,{default:n(()=>[o(_,null,{default:n(()=>[o(k,{type:`primary`,loading:O.value,onClick:F},{default:n(()=>[...r[25]||=[y(` 校验并保存 `,-1)]]),_:1},8,[`loading`]),o(k,{onClick:N},{default:n(()=>[...r[26]||=[y(` 仅校验 `,-1)]]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),o(I,{label:`JSON 编辑器`,name:`json`},{default:n(()=>[o(c,{modelValue:E.value,"onUpdate:modelValue":r[18]||=e=>E.value=e,type:`textarea`,rows:24,spellcheck:`false`,class:`json-editor`},null,8,[`modelValue`]),b(`div`,x,[o(_,null,{default:n(()=>[o(k,{onClick:A},{default:n(()=>[...r[27]||=[y(`从表单生成`,-1)]]),_:1}),o(k,{onClick:j},{default:n(()=>[...r[28]||=[y(`应用到表单`,-1)]]),_:1}),o(k,{type:`primary`,loading:O.value,onClick:P},{default:n(()=>[...r[29]||=[y(` 校验并保存 `,-1)]]),_:1},8,[`loading`])]),_:1})])]),_:1})]),_:1},8,[`modelValue`]),D.value.length>0?(i(),h(B,{key:0,type:`error`,closable:!1,class:`block`},{default:n(()=>[b(`ul`,S,[(i(!0),d(a,null,e(D.value,(e,t)=>(i(),d(`li`,{key:t},l(e.path?e.path+`: `:``)+l(e.message),1))),128))])]),_:1})):v(``,!0)])}}}),[[`__scopeId`,`data-v-3e321bed`]]);export{C as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.form[data-v-3e321bed]{max-width:640px}.block[data-v-3e321bed]{margin-top:12px}.json-editor[data-v-3e321bed]{font-family:monospace}.issues[data-v-3e321bed]{margin:0;padding-left:18px;font-size:12px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.block[data-v-5b803405]{margin-bottom:16px}.stat[data-v-5b803405]{align-items:flex-start;gap:14px;display:flex}.chip[data-v-5b803405]{border-radius:11px;flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.chip.sky[data-v-5b803405]{color:color-mix(in oklab, var(--app-accent) 85%, black);background:color-mix(in oklab, var(--app-accent) 12%, transparent)}.chip.emerald[data-v-5b803405]{color:var(--app-ok);background:color-mix(in oklab, var(--app-ok) 12%, transparent)}.chip.violet[data-v-5b803405]{color:var(--app-violet);background:color-mix(in oklab, var(--app-violet) 12%, transparent)}.chip.amber[data-v-5b803405]{color:var(--app-warn);background:color-mix(in oklab, var(--app-warn) 12%, transparent)}.label[data-v-5b803405]{color:var(--app-muted);margin:0;font-size:12.5px}.value[data-v-5b803405]{color:var(--app-text);margin:6px 0 0;font-size:21px;font-weight:700;line-height:1.25}.value.small[data-v-5b803405]{font-size:16px}.unit[data-v-5b803405]{color:var(--app-muted);font-size:12px;font-weight:500}.sub[data-v-5b803405]{color:var(--app-muted);word-break:break-all;margin:4px 0 0;font-size:11.5px}.warn-text[data-v-5b803405]{color:var(--app-warn)}.error-text[data-v-5b803405]{white-space:pre-wrap;margin:8px 0 0;font-size:12px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ci as e,I as t,Ki as n,M as r,Q as i,Ri as a,Si as o,Ti as s,a as c,bt as l,c as u,ci as d,d as f,ea as p,ei as m,f as h,ga as g,ii as _,ki as v,l as y,li as b,ni as x,r as S,ri as C,s as w,si as T,ti as E,u as D}from"./api-CNzxhTWe.js";var O={class:`error-text`},k={class:`stat`},ee={class:`chip sky`},te={class:`value small`},A={class:`sub`},j={class:`stat`},M={class:`chip emerald`},N={class:`value`},P={class:`sub`},F={class:`stat`},I={class:`chip violet`},L={class:`value`},R={class:`unit`},z={class:`sub`},B={class:`stat`},V={class:`chip amber`},H={class:`value`},U={class:`unit`},W={class:`sub`},G={key:0,class:`sub warn-text`},K=h(b({__name:`DashboardView`,setup(h){let b=n(null),K=n([]),q=n([]),J=n(!1),Y=m(()=>b.value?.runtime??null),X=m(()=>Y.value?D(Y.value.uptimeMs):`-`),Z=async()=>{try{b.value=await u()}catch(e){f(e)}},ne=async()=>{J.value=!0;try{await S(`/api/runtime/restart`),await Z()}catch(e){f(e)}finally{J.value=!1}},re=async()=>{try{await S(`/api/runtime/pause`),await Z()}catch(e){f(e)}},ie=async()=>{try{await S(`/api/runtime/resume`),await Z()}catch(e){f(e)}},Q=null,$=null;return o(async()=>{await Z(),K.value=await w().catch(()=>[]),Q=c(`/api/events/stream?limit=20`,e=>{q.value.unshift(e),q.value.length>30&&q.value.pop()});let e=setInterval(()=>void Z(),1e4);$=()=>clearInterval(e)}),e(()=>{Q?.(),$?.()}),(e,n)=>{let o=v(`el-alert`),c=v(`el-icon`),u=v(`el-card`),f=v(`el-col`),m=v(`el-row`),h=v(`el-button`),S=v(`el-space`),w=v(`el-table-column`),D=v(`el-table`);return s(),_(`div`,null,[b.value?.startupError?(s(),x(o,{key:0,title:`运行时启动失败`,type:`error`,closable:!1,class:`block`},{default:a(()=>[E(`pre`,O,g(b.value.startupError),1)]),_:1})):b.value?.restarting?(s(),x(o,{key:1,title:`运行时正在重启…`,type:`warning`,closable:!1,class:`block`})):C(``,!0),d(m,{gutter:16,class:`block`},{default:a(()=>[d(f,{span:6},{default:a(()=>[d(u,{class:`stat-card`},{default:a(()=>[E(`div`,k,[E(`div`,ee,[d(c,{size:18},{default:a(()=>[d(p(i))]),_:1})]),E(`div`,null,[n[0]||=E(`p`,{class:`label`},`连接状态`,-1),E(`p`,te,g(Y.value?.connected?`已连接`:`未连接`),1),E(`p`,A,g(Y.value?.login?`${Y.value.login.nickname} · ${Y.value.login.userId}`:`—`),1)])])]),_:1})]),_:1}),d(f,{span:6},{default:a(()=>[d(u,{class:`stat-card`},{default:a(()=>[E(`div`,j,[E(`div`,M,[d(c,{size:18},{default:a(()=>[d(p(l))]),_:1})]),E(`div`,null,[n[1]||=E(`p`,{class:`label`},`运行时长`,-1),E(`p`,N,g(X.value),1),E(`p`,P,` state: `+g(Y.value?.state??`—`)+` · gen `+g(Y.value?.generation??`—`),1)])])]),_:1})]),_:1}),d(f,{span:6},{default:a(()=>[d(u,{class:`stat-card`},{default:a(()=>[E(`div`,F,[E(`div`,I,[d(c,{size:18},{default:a(()=>[d(p(r))]),_:1})]),E(`div`,null,[n[2]||=E(`p`,{class:`label`},`插件`,-1),E(`p`,L,[T(g(Y.value?.counts.loadedPlugins??`—`),1),E(`span`,R,` / `+g(Y.value?.counts.plugins??`—`)+` 已加载`,1)]),E(`p`,z,` 启用 `+g(Y.value?.counts.enabledPlugins??`—`),1)])])]),_:1})]),_:1}),d(f,{span:6},{default:a(()=>[d(u,{class:`stat-card`},{default:a(()=>[E(`div`,B,[E(`div`,V,[d(c,{size:18},{default:a(()=>[d(p(t))]),_:1})]),E(`div`,null,[n[3]||=E(`p`,{class:`label`},`会话`,-1),E(`p`,H,[T(g(Y.value?.counts.sessions??`—`),1),E(`span`,U,` · `+g(Y.value?.counts.kvPlugins??`—`)+` KV 插件`,1)]),n[4]||=E(`p`,{class:`sub`},`session 记录数`,-1)])])]),_:1})]),_:1})]),_:1}),d(u,{class:`block`},{header:a(()=>[...n[5]||=[T(`运行时控制`,-1)]]),default:a(()=>[d(S,null,{default:a(()=>[d(h,{type:`danger`,loading:J.value,onClick:ne},{default:a(()=>[...n[6]||=[T(` 重启运行时 `,-1)]]),_:1},8,[`loading`]),d(h,{onClick:re},{default:a(()=>[...n[7]||=[T(`暂停`,-1)]]),_:1}),d(h,{onClick:ie},{default:a(()=>[...n[8]||=[T(`恢复`,-1)]]),_:1})]),_:1}),E(`p`,W,` version: `+g(b.value?.version??`-`)+` · paths: `+g(b.value?.paths.config),1),b.value?.webui.requiresProcessRestart?(s(),_(`p`,G,` webui 绑定配置已修改,需要重启进程生效。 `)):C(``,!0)]),_:1}),d(u,{class:`block`},{header:a(()=>[...n[9]||=[T(`命令列表`,-1)]]),default:a(()=>[d(D,{data:K.value,size:`small`,"max-height":`320`},{default:a(()=>[d(w,{prop:`id`,label:`命令`,width:`220`}),d(w,{prop:`pluginId`,label:`插件`,width:`180`}),d(w,{prop:`description`,label:`说明`})]),_:1},8,[`data`])]),_:1}),d(u,{class:`block`},{header:a(()=>[...n[10]||=[T(`最近事件`,-1)]]),default:a(()=>[d(D,{data:q.value,size:`small`,"max-height":`320`},{default:a(()=>[d(w,{label:`时间`,width:`170`},{default:a(({row:e})=>[T(g(p(y)(e.time)),1)]),_:1}),d(w,{prop:`type`,label:`类型`,width:`100`}),d(w,{prop:`summary`,label:`摘要`})]),_:1},8,[`data`])]),_:1})])}}}),[[`__scopeId`,`data-v-5b803405`]]);export{K as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ci as e,Ii as t,Ki as n,Ri as r,Si as i,Ti as a,a as o,ci as s,d as c,ea as l,f as u,ga as d,ii as f,ki as p,l as m,li as h,n as g,si as _,ti as v}from"./api-CNzxhTWe.js";var y={class:`json`},b=u(h({__name:`EventsView`,setup(u){let h=n(``),b=n(`on`),x=n([]),S=n(!1),C=n(``),w=async()=>{try{let e=new URLSearchParams({limit:`300`});h.value&&e.set(`type`,h.value),x.value=await g(`/api/events?${e.toString()}`)}catch(e){c(e)}},T=null,E=()=>{T?.(),T=null,b.value===`on`&&(T=o(`/api/events/stream`,e=>{let t=e;h.value&&t.type!==h.value||(x.value.unshift(t),x.value.length>500&&(x.value.length=500))}))};t(b,E),t(h,async()=>{await w(),E()});let D=e=>{C.value=JSON.stringify(e.event,void 0,2),S.value=!0};return i(async()=>{await w(),E()}),e(()=>{T?.()}),(e,t)=>{let n=p(`el-option`),i=p(`el-select`),o=p(`el-button`),c=p(`el-space`),u=p(`el-card`),g=p(`el-table-column`),T=p(`el-table`),E=p(`el-drawer`);return a(),f(`div`,null,[s(u,{class:`block`},{default:r(()=>[s(c,null,{default:r(()=>[s(i,{modelValue:h.value,"onUpdate:modelValue":t[0]||=e=>h.value=e,placeholder:`全部类型`,style:{width:`140px`},clearable:``},{default:r(()=>[s(n,{label:`message`,value:`message`}),s(n,{label:`notice`,value:`notice`}),s(n,{label:`request`,value:`request`}),s(n,{label:`meta`,value:`meta`}),s(n,{label:`other`,value:`other`})]),_:1},8,[`modelValue`]),s(i,{modelValue:b.value,"onUpdate:modelValue":t[1]||=e=>b.value=e,style:{width:`90px`}},{default:r(()=>[s(n,{label:`实时`,value:`on`}),s(n,{label:`暂停`,value:`off`})]),_:1},8,[`modelValue`]),s(o,{type:`primary`,onClick:w},{default:r(()=>[...t[3]||=[_(`刷新`,-1)]]),_:1})]),_:1})]),_:1}),s(u,null,{default:r(()=>[s(T,{data:x.value,size:`small`,"max-height":`640`},{default:r(()=>[s(g,{label:`时间`,width:`170`},{default:r(({row:e})=>[_(d(l(m)(e.time)),1)]),_:1}),s(g,{prop:`type`,label:`类型`,width:`100`}),s(g,{prop:`summary`,label:`摘要`,"show-overflow-tooltip":``}),s(g,{label:`详情`,width:`90`},{default:r(({row:e})=>[s(o,{size:`small`,onClick:t=>D(e)},{default:r(()=>[...t[4]||=[_(` 查看 `,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1}),s(E,{modelValue:S.value,"onUpdate:modelValue":t[2]||=e=>S.value=e,title:`事件详情`,size:`50%`},{default:r(()=>[v(`pre`,y,d(C.value),1)]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-ffa9bb28`]]);export{b as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.block[data-v-ffa9bb28]{margin-bottom:16px}.json[data-v-ffa9bb28]{white-space:pre-wrap;font-size:12px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ai as e,Di as t,Ki as n,Ri as r,Si as i,Ti as a,Xr as o,ci as s,d as c,ea as l,f as u,ga as d,i as f,ii as p,ki as m,l as h,li as g,n as _,ni as v,p as y,qr as b,ri as x,si as S,t as C,zi as w}from"./api-CNzxhTWe.js";var T=50,E=u(g({__name:`KvView`,setup(u){let g=n([]),E=n(``),D=n(``),O=n([]),k=n(0),A=n(1),j=n(!1),M=n(!1),N=n(``),P=n(``),F=n(`create`),I=async()=>{if(E.value){j.value=!0;try{let e=(A.value-1)*T,t=new URLSearchParams({pluginId:E.value,limit:String(T),offset:String(e)});D.value&&t.set(`prefix`,D.value);let n=await _(`/api/kv?${t.toString()}`);O.value=n.items,k.value=n.total}catch(e){c(e)}finally{j.value=!1}}},L=e=>{A.value=e,I()},R=()=>{F.value=`create`,N.value=``,P.value=`null`,M.value=!0},z=e=>{F.value=`update`,N.value=e.key,P.value=JSON.stringify(e.value,void 0,2),M.value=!0},B=async()=>{let e;try{e=JSON.parse(P.value)}catch{y.error(`不是合法的 JSON`);return}try{await f(`/api/kv`,{pluginId:E.value,key:N.value,value:e}),M.value=!1,await I()}catch(e){c(e)}},V=async e=>{try{await C(`/api/kv?pluginId=${encodeURIComponent(E.value)}&key=${encodeURIComponent(e.key)}`),await I()}catch(e){c(e)}},H=e=>typeof e==`string`?e.length>120?e.slice(0,120)+`…`:e:JSON.stringify(e)?.slice(0,120)??``;return i(async()=>{try{g.value=await _(`/api/kv/plugins`),g.value.length>0&&(E.value=g.value[0]?.pluginId??``,await I())}catch(e){c(e)}}),(n,i)=>{let c=m(`el-option`),u=m(`el-select`),f=m(`el-card`),_=m(`el-input`),y=m(`el-button`),C=m(`el-space`),U=m(`el-table-column`),W=m(`el-table`),G=m(`el-pagination`),K=m(`el-form-item`),q=m(`el-form`),J=m(`el-dialog`),Y=e(`loading`);return a(),p(`div`,null,[s(f,{class:`block`},{default:r(()=>[s(u,{modelValue:E.value,"onUpdate:modelValue":i[0]||=e=>E.value=e,placeholder:`选择插件`,style:{width:`240px`},onChange:I},{default:r(()=>[(a(!0),p(o,null,t(g.value,e=>(a(),v(c,{key:e.pluginId,label:`${e.pluginId} (${e.count})`,value:e.pluginId},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),E.value?(a(),v(f,{key:0},{default:r(()=>[s(C,{class:`block`},{default:r(()=>[s(_,{modelValue:D.value,"onUpdate:modelValue":i[1]||=e=>D.value=e,placeholder:`key 前缀过滤`,style:{width:`200px`},onKeyup:b(I,[`enter`])},null,8,[`modelValue`]),s(y,{onClick:I},{default:r(()=>[...i[6]||=[S(`过滤`,-1)]]),_:1}),s(y,{type:`primary`,onClick:R},{default:r(()=>[...i[7]||=[S(`新增 KV`,-1)]]),_:1})]),_:1}),w((a(),v(W,{data:O.value,size:`small`},{default:r(()=>[s(U,{prop:`key`,label:`Key`,"show-overflow-tooltip":``}),s(U,{label:`Value`,"show-overflow-tooltip":``},{default:r(({row:e})=>[S(d(H(e.value)),1)]),_:1}),s(U,{label:`更新时间`,width:`180`},{default:r(({row:e})=>[S(d(l(h)(e.updatedAt)),1)]),_:1}),s(U,{label:`操作`,width:`150`},{default:r(({row:e})=>[s(y,{size:`small`,onClick:t=>z(e)},{default:r(()=>[...i[8]||=[S(`编辑`,-1)]]),_:1},8,[`onClick`]),s(y,{size:`small`,type:`danger`,onClick:t=>V(e)},{default:r(()=>[...i[9]||=[S(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[Y,j.value]]),s(G,{class:`pager`,layout:`total, prev, pager, next`,total:k.value,"page-size":T,"current-page":A.value,onCurrentChange:L},null,8,[`total`,`current-page`])]),_:1})):x(``,!0),s(J,{modelValue:M.value,"onUpdate:modelValue":i[5]||=e=>M.value=e,title:`KV 编辑`,width:`560px`},{footer:r(()=>[s(y,{onClick:i[4]||=e=>M.value=!1},{default:r(()=>[...i[10]||=[S(`取消`,-1)]]),_:1}),s(y,{type:`primary`,onClick:B},{default:r(()=>[...i[11]||=[S(`保存`,-1)]]),_:1})]),default:r(()=>[s(q,{"label-width":`80px`},{default:r(()=>[s(K,{label:`key`},{default:r(()=>[s(_,{modelValue:N.value,"onUpdate:modelValue":i[2]||=e=>N.value=e,disabled:F.value===`update`},null,8,[`modelValue`,`disabled`])]),_:1}),s(K,{label:`value (JSON)`},{default:r(()=>[s(_,{modelValue:P.value,"onUpdate:modelValue":i[3]||=e=>P.value=e,type:`textarea`,rows:6,spellcheck:`false`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-6e1ecb0b`]]);export{E as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.block[data-v-6e1ecb0b]{margin-bottom:12px}.pager[data-v-6e1ecb0b]{margin-top:12px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.login-page[data-v-57590040]{background:var(--app-bg);justify-content:center;align-items:center;height:100%;min-height:100%;display:flex;position:relative;overflow:hidden}.login-card[data-v-57590040]{z-index:1;background:var(--app-glass);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);width:372px;box-shadow:var(--card-shadow), 0 32px 80px -40px oklch(0% 0 0/.35);position:relative}.brand[data-v-57590040]{text-align:center;margin-bottom:26px}.logo[data-v-57590040]{width:52px;height:52px;color:var(--app-accent-fg);background:linear-gradient(135deg,oklch(68.5% .155 230),oklch(56% .15 250));border-radius:15px;justify-content:center;align-items:center;margin-bottom:16px;font-size:22px;font-weight:700;display:inline-flex;box-shadow:inset 0 1px oklch(100% 0 0/.22),0 12px 28px oklch(68.5% .155 230/.4)}.brand h2[data-v-57590040]{color:var(--app-text);letter-spacing:.02em;margin:0;font-size:18px}.brand p[data-v-57590040]{color:var(--app-muted);margin:6px 0 0;font-size:13px}.submit[data-v-57590040]{letter-spacing:.35em;width:100%;margin-top:6px;font-weight:600}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Jr as e,Ki as t,Ri as n,Ti as r,ci as i,d as a,f as o,ii as s,ki as c,li as l,oi as u,qr as d,r as f,si as p,ti as m}from"./api-CNzxhTWe.js";import{n as h}from"./index-CUvpnClx.js";var g={class:`login-page`},_=o(l({__name:`LoginView`,setup(o){let l=h(),_=t(``),v=t(``),y=t(!1),b=async()=>{if(!y.value){y.value=!0;try{await f(`/api/auth/login`,{username:_.value,password:v.value}),await l.push({name:`dashboard`})}catch(e){a(e)}finally{y.value=!1}}};return(t,a)=>{let o=c(`el-input`),l=c(`el-form-item`),f=c(`el-button`),h=c(`el-form`),x=c(`el-card`);return r(),s(`div`,g,[a[5]||=u(`<svg class="login-waves" viewBox="0 0 1440 900" preserveAspectRatio="xMidYMid slice" aria-hidden="true" data-v-57590040><path d="M-40 250 C 180 180, 360 320, 620 250 S 1080 180, 1480 260" data-v-57590040></path><path d="M-40 420 C 200 340, 420 480, 700 410 S 1120 330, 1480 430" data-v-57590040></path><path d="M-40 580 C 220 500, 400 640, 660 570 S 1100 490, 1480 590" data-v-57590040></path><path d="M-40 730 C 180 660, 380 790, 640 725 S 1080 650, 1480 740" data-v-57590040></path><path d="M-40 130 C 240 70, 440 190, 720 125 S 1120 40, 1480 140" data-v-57590040></path></svg>`,1),i(x,{class:`login-card`,"body-style":{padding:`36px 32px 32px`}},{default:n(()=>[a[4]||=m(`div`,{class:`brand`},[m(`div`,{class:`logo`},`J`),m(`h2`,null,`JsBot 控制台`),m(`p`,null,`Tellus 管理后台`)],-1),i(h,{"label-position":`top`,size:`large`,onSubmit:a[2]||=e(()=>{},[`prevent`])},{default:n(()=>[i(l,{label:`用户名`},{default:n(()=>[i(o,{modelValue:_.value,"onUpdate:modelValue":a[0]||=e=>_.value=e,autocomplete:`username`},null,8,[`modelValue`])]),_:1}),i(l,{label:`密码`},{default:n(()=>[i(o,{modelValue:v.value,"onUpdate:modelValue":a[1]||=e=>v.value=e,type:`password`,autocomplete:`current-password`,"show-password":``,onKeyup:d(b,[`enter`])},null,8,[`modelValue`])]),_:1}),i(f,{type:`primary`,size:`large`,class:`submit`,loading:y.value,onClick:b},{default:n(()=>[...a[3]||=[p(` 登 录 `,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-57590040`]]);export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ci as e,Di as t,Ii as n,Ki as r,Ri as i,Si as a,Ti as o,Xr as s,a as c,ci as l,d as u,ea as d,ei as f,f as p,ga as m,gi as h,ii as g,ki as _,li as v,lt as y,n as b,pa as x,qr as S,ri as C,si as w,ti as T,zr as E}from"./api-CNzxhTWe.js";var D={class:`term container`},O={class:`term-content`},k={class:`term-bar`},ee={class:`term-title`},te={class:`dim`},ne={key:0,class:`term-empty`},re={class:`lt`},A={class:`lv`},j={key:0,class:`ls`},M={class:`lm`},N=500,P=30,F=p(v({__name:`LogsView`,setup(p){let v=r(``),F=r(``),I=r(``),L=r(`on`),R=r([]),z=r(null),B=r(!0),V=e=>({key:`${e.time}|${e.scope}|${e.level}|${e.message}`,time:e.time,level:e.level,scope:e.scope,text:e.message+(e.args.length>0?` `+e.args.join(` `):``),fresh:!1}),H=f(()=>R.value.slice(-500)),U=f(()=>Math.max(0,R.value.length-N)),W=()=>{let e=new URLSearchParams({limit:`500`});return v.value&&e.set(`level`,v.value),F.value&&e.set(`scope`,F.value),I.value&&e.set(`query`,I.value),`/api/logs?${e.toString()}`},G=e=>Number.isNaN(e)?`--:--:--`:new Date(e).toTimeString().slice(0,8),K=()=>{let e=z.value;e!==null&&(e.scrollTop=e.scrollHeight)},q=()=>{let e=z.value;return e===null||e.scrollHeight-e.scrollTop-e.clientHeight<32},J=()=>{B.value=q()},Y=()=>{B.value=!0,K()},X=e=>{let t=new Set(R.value.map(e=>e.key)),n=new Map,r=e.slice(-500).map(e=>{let t=V(e),r=n.get(t.key)??0;return n.set(t.key,r+1),t.key=r>0?`${t.key}#${r}`:t.key,t}),i=r.length;for(let e=r.length-1;e>=0;--e)if(t.has(r[e]?.key??``)){i=e+1;break}for(let e=0;e<r.length;e+=1)r[e]={...r[e],fresh:e>=i&&e>=r.length-P};R.value=r,B.value&&h(K)},Z=async()=>{try{let e=await b(W());X(e)}catch(e){u(e)}},Q=null,$=()=>{Q?.(),Q=null,L.value===`on`&&(Q=c(`/api/logs/stream`,()=>{b(W()).then(e=>{X(e)}).catch(()=>{})}))};return n(L,$),a(async()=>{await Z(),K(),$()}),e(()=>{Q?.()}),(e,n)=>{let r=_(`el-option`),a=_(`el-select`),c=_(`el-input`),u=_(`el-button`);return o(),g(`div`,D,[T(`section`,O,[T(`header`,k,[n[6]||=T(`div`,{class:`term-traffic`},[T(`span`,{class:`dot`}),T(`span`,{class:`dot`}),T(`span`,{class:`dot`})],-1),T(`span`,ee,[n[4]||=w(` bot://console`,-1),T(`span`,te,` · `+m(L.value===`on`?`streaming`:`paused`),1)]),n[7]||=T(`span`,{class:`term-spacer`},null,-1),l(a,{modelValue:v.value,"onUpdate:modelValue":n[0]||=e=>v.value=e,placeholder:`级别`,clearable:``,class:`ctl sel-level`,onChange:Z},{default:i(()=>[l(r,{label:`all`,value:``}),l(r,{label:`debug`,value:`debug`}),l(r,{label:`info`,value:`info`}),l(r,{label:`warn`,value:`warn`}),l(r,{label:`error`,value:`error`})]),_:1},8,[`modelValue`]),l(c,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e,placeholder:`scope`,class:`ctl`,onKeyup:S(Z,[`enter`])},null,8,[`modelValue`]),l(c,{modelValue:I.value,"onUpdate:modelValue":n[2]||=e=>I.value=e,placeholder:`关键字`,class:`ctl`,onKeyup:S(Z,[`enter`])},null,8,[`modelValue`]),l(a,{modelValue:L.value,"onUpdate:modelValue":n[3]||=e=>L.value=e,class:`ctl sel-live`},{default:i(()=>[l(r,{label:`stream`,value:`on`}),l(r,{label:`paused`,value:`off`})]),_:1},8,[`modelValue`]),l(u,{class:`ctl refresh`,text:``,icon:d(y),onClick:Z},{default:i(()=>[...n[5]||=[w(` 查询 `,-1)]]),_:1},8,[`icon`])]),T(`main`,{ref_key:`scrollEl`,ref:z,class:`term-body log-fade-both`,onScroll:J},[R.value.length===0?(o(),g(`div`,ne,` — 暂无日志:试试调整筛选或点击「查询」 — `)):C(``,!0),(o(!0),g(s,null,t(H.value,(e,t)=>(o(),g(`div`,{key:e.key,class:x([`log-row`,[`l-${e.level}`,e.fresh?`rowIn`:``]])},[T(`span`,re,m(G(e.time)),1),T(`span`,A,m(e.level.toUpperCase()),1),e.scope?(o(),g(`span`,j,`[`+m(e.scope)+`]`,1)):C(``,!0),T(`span`,M,m(e.text),1)],2))),128))],544),l(E,{name:`pill`},{default:i(()=>[!B.value&&R.value.length>0?(o(),g(`button`,{key:0,class:`jump-latest`,onClick:Y},` ↓ 回到最新`+m(U.value>0?`(+${U.value})`:``),1)):C(``,!0)]),_:1})])])}}}),[[`__scopeId`,`data-v-c504421e`]]);export{F as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.term-content[data-v-c504421e]{--app-bg:oklch(13% .012 250);--app-panel:oklch(17% .02 250);--app-panel-2:oklch(21% .02 250);--app-field:oklch(19% .015 250);--app-text:oklch(95% .01 240);--app-muted:oklch(65% .02 240);--app-border:oklch(27% .02 250);--app-border-strong:oklch(33% .022 250);--app-field-border:oklch(25% .02 250);--app-field-border-hover:oklch(35% .022 250);--app-accent:oklch(75% .14 230);--app-accent-fg:oklch(15% .02 250);--app-accent-soft:oklch(30% .06 230);--app-accent-ring:oklch(75% .14 230/.25);--app-ok:oklch(72% .15 160);--app-warn:oklch(80% .16 80);--app-danger:oklch(62% .2 27);--app-violet:oklch(74% .11 295);--app-log-info:oklch(75% .14 230);--app-log-success:oklch(72% .15 160);--app-log-warn:oklch(80% .16 80);--app-log-error:oklch(62% .2 27);--app-dot-off:oklch(40% .015 250);--card-shadow:0 1px 2px oklch(0% 0 0/.36), 0 16px 38px -24px oklch(0% 0 0/.72), inset 0 1px oklch(100% 0 0/.025);--app-pop-shadow:0 1px 2px oklch(0% 0 0/.4), 0 16px 40px -18px oklch(0% 0 0/.75);--el-bg-color:var(--app-panel);--el-bg-color-overlay:oklch(19% .018 250);--el-bg-color-page:var(--app-bg);--el-fill-color:var(--app-panel-2);--el-fill-color-light:oklch(23% .02 250);--el-fill-color-lighter:oklch(25% .02 250);--el-fill-color-blank:var(--app-panel);--el-text-color-primary:var(--app-text);--el-text-color-regular:var(--app-text);--el-text-color-secondary:var(--app-muted);--el-text-color-placeholder:color-mix(in oklab, var(--app-muted) 72%, transparent);--el-border-color:var(--app-border);--el-border-color-lighter:color-mix(in srgb, var(--app-border) 78%, transparent);--el-border-color-extra-light:color-mix(in srgb, var(--app-border) 62%, transparent);border:1px solid var(--app-border);border-radius:calc(var(--app-radius) + 2px);background:var(--app-bg);height:calc(100vh - 192px);min-height:420px;box-shadow:var(--card-shadow);scrollbar-gutter:stable both-edges;flex-direction:column;display:flex;position:relative;overflow:hidden}.container[data-v-c504421e]{flex-direction:column;display:flex}.term-bar[data-v-c504421e]{border-bottom:1px solid var(--app-border);background:var(--app-panel);flex:none;align-items:center;gap:10px;padding:8px 12px;display:flex}.term-traffic[data-v-c504421e]{flex:none;gap:6px;display:flex}.dot[data-v-c504421e]{background:var(--app-dot-off);opacity:.55;border-radius:999px;width:10px;height:10px}.term-title[data-v-c504421e]{color:var(--app-text);font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;font-weight:600}.term-title .dim[data-v-c504421e]{color:var(--app-muted);font-weight:400}.term-spacer[data-v-c504421e]{flex:1}.ctl[data-v-c504421e]{flex:none;width:128px}.sel-level[data-v-c504421e]{width:108px}.sel-live[data-v-c504421e]{width:104px}.refresh[data-v-c504421e]{width:auto}.term-body[data-v-c504421e]{font-variant-numeric:tabular-nums;scrollbar-color:color-mix(in oklab, var(--app-text) 22%, transparent) transparent;flex:1;padding:10px 14px 14px;font-family:SF Mono,ui-monospace,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:12px;line-height:1.7;position:relative;overflow-y:auto}.term-empty[data-v-c504421e]{text-align:center;color:var(--app-muted);padding:48px 0;font-size:12px}.log-row[data-v-c504421e]{content-visibility:auto;contain-intrinsic-size:auto 24px;white-space:pre-wrap;word-break:break-word;border-radius:6px;align-items:baseline;gap:10px;padding:0 6px;display:flex}.log-row[data-v-c504421e]:hover{background:color-mix(in oklab, var(--app-accent) 6%, transparent)}.lt[data-v-c504421e]{color:color-mix(in oklab, var(--app-muted) 70%, transparent);flex:none}.lv[data-v-c504421e]{letter-spacing:.02em;flex:none;width:52px;font-size:11px;font-weight:600}.ls[data-v-c504421e]{color:color-mix(in oklab, var(--app-muted) 85%, transparent);flex:none}.lm[data-v-c504421e]{min-width:0;color:var(--app-text)}.l-debug .lv[data-v-c504421e],.l-debug .lm[data-v-c504421e]{color:color-mix(in oklab, var(--app-muted) 78%, transparent)}.l-info .lv[data-v-c504421e]{color:var(--app-log-info)}.l-warn .lv[data-v-c504421e]{color:var(--app-log-warn)}.l-error .lv[data-v-c504421e],.l-error .lm[data-v-c504421e]{color:var(--app-log-error)}.log-fade-both[data-v-c504421e]{-webkit-mask-image:linear-gradient(#0000 0,#fff 12px calc(100% - 16px),#0000 100%);mask-image:linear-gradient(#0000 0,#fff 12px calc(100% - 16px),#0000 100%)}.rowIn[data-v-c504421e]{animation:.2s cubic-bezier(.16,1,.3,1) terminal-row-in-c504421e}@keyframes terminal-row-in-c504421e{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.jump-latest[data-v-c504421e]{border:1px solid color-mix(in oklab, var(--app-border) 74%, transparent);background:var(--el-bg-color-overlay);color:var(--app-accent);box-shadow:var(--app-pop-shadow);cursor:pointer;border-radius:999px;padding:6px 14px;font-size:12px;font-weight:500;transition:opacity .15s;position:absolute;bottom:14px;left:50%;translate:-50%}.jump-latest[data-v-c504421e]:hover{border-color:color-mix(in oklab, var(--app-accent) 30%, transparent)}.pill-enter-active[data-v-c504421e],.pill-leave-active[data-v-c504421e]{transition:opacity .15s,translate .15s}.pill-enter-from[data-v-c504421e],.pill-leave-to[data-v-c504421e]{opacity:0;translate:-50% 6px}@media (prefers-reduced-motion:reduce){.rowIn[data-v-c504421e]{animation-duration:.01ms}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ci as e,Di as t,I as n,Ii as r,J as i,Ki as a,M as o,Pi as s,Ri as c,Si as l,Ti as u,W as d,Wi as f,Xr as p,c as m,ci as h,ea as g,ei as _,et as v,f as y,ga as b,ii as x,j as S,ji as C,ki as w,li as T,mt as E,n as D,ni as O,nt as k,o as A,pa as j,r as M,ri as N,rt as P,si as F,ti as I,yt as ee,zr as L}from"./api-CNzxhTWe.js";import{a as R,c as z,i as B,n as V,o as H,r as U,s as te,t as ne}from"./index-CUvpnClx.js";var W={class:`panel`},G={class:`group`},K={key:0,class:`group`},q={class:`group`},J={class:`group`},Y={class:`group`},X={class:`slider-row`},Z={class:`slider-value`},Q={class:`group`},$={class:`slider-row`},re={class:`slider-value`},ie={class:`group`},ae=y(T({__name:`AppearanceDrawer`,props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:[`update:modelValue`],setup(e){let t=s(e,`modelValue`),n=B(),i=f({modeKey:n.mode??`system`,intensity:n.darkIntensity??`soft`,density:n.density??`cozy`,sidebarStyle:n.sidebarStyle??`follow`,uiScale:n.uiScale??1,radius:n.radius??.75,highContrast:n.highContrast===!0,reduceMotion:n.reduceMotion===!0,disableMotion:n.disableMotion===!0}),a=_(()=>i.modeKey===`light`);r(t,e=>{if(!e)return;let t=B();i.modeKey=t.mode??`system`,i.intensity=t.darkIntensity??`soft`,i.density=t.density??`cozy`,i.sidebarStyle=t.sidebarStyle??`follow`,i.uiScale=t.uiScale??1,i.radius=t.radius??.75,i.highContrast=t.highContrast===!0,i.reduceMotion=t.reduceMotion===!0,i.disableMotion=t.disableMotion===!0});let o=[{label:`跟随系统`,value:`system`},{label:`亮色`,value:`light`},{label:`暗色`,value:`dark`}],l=[{label:`柔和`,value:`soft`},{label:`纯黑`,value:`black`}],d=[{label:`默认`,value:`cozy`},{label:`紧凑`,value:`compact`}],p=[{label:`跟随画布`,value:`follow`},{label:`独立面板`,value:`panel`},{label:`带品牌色`,value:`accent`}],m={1:`100%`},g=()=>{H({mode:i.modeKey===`system`?void 0:i.modeKey})},v=()=>{H({darkIntensity:i.modeKey===`dark`?i.intensity:void 0})},y=()=>{H({density:i.density})},S=()=>{H({sidebarStyle:i.sidebarStyle})},C=()=>{H({uiScale:i.uiScale})},T=()=>{H({radius:i.radius})},E=()=>{H({mode:i.modeKey===`system`?void 0:i.modeKey,darkIntensity:i.modeKey===`dark`?i.intensity:void 0,density:i.density,sidebarStyle:i.sidebarStyle,uiScale:i.uiScale,radius:i.radius,highContrast:i.highContrast,reduceMotion:i.reduceMotion,disableMotion:i.disableMotion})},D=()=>{R()};return(e,n)=>{let r=w(`el-segmented`),s=w(`el-slider`),f=w(`el-switch`),_=w(`el-button`),k=w(`el-drawer`);return u(),O(k,{modelValue:t.value,"onUpdate:modelValue":n[9]||=e=>t.value=e,title:`外观`,size:`336px`,class:`appearance-drawer`,"append-to-body":!0},{default:c(()=>[I(`div`,W,[I(`section`,G,[n[10]||=I(`h4`,null,`模式`,-1),h(r,{modelValue:i.modeKey,"onUpdate:modelValue":n[0]||=e=>i.modeKey=e,options:o,block:``,onChange:g},null,8,[`modelValue`])]),a.value?N(``,!0):(u(),x(`section`,K,[n[11]||=I(`h4`,null,`暗色强度`,-1),h(r,{modelValue:i.intensity,"onUpdate:modelValue":n[1]||=e=>i.intensity=e,options:l,block:``,onChange:v},null,8,[`modelValue`])])),I(`section`,q,[n[12]||=I(`h4`,null,`密度`,-1),h(r,{modelValue:i.density,"onUpdate:modelValue":n[2]||=e=>i.density=e,options:d,block:``,onChange:y},null,8,[`modelValue`])]),I(`section`,J,[n[13]||=I(`h4`,null,`侧边栏`,-1),h(r,{modelValue:i.sidebarStyle,"onUpdate:modelValue":n[3]||=e=>i.sidebarStyle=e,options:p,block:``,onChange:S},null,8,[`modelValue`])]),I(`section`,Y,[I(`div`,X,[n[14]||=I(`h4`,null,`界面缩放`,-1),I(`span`,Z,b(Math.round(i.uiScale*100))+`% `,1)]),h(s,{modelValue:i.uiScale,"onUpdate:modelValue":n[4]||=e=>i.uiScale=e,min:.5,max:2,step:.05,marks:m,onInput:C,onChange:E},null,8,[`modelValue`])]),I(`section`,Q,[I(`div`,$,[n[15]||=I(`h4`,null,`圆角`,-1),I(`span`,re,b(i.radius.toFixed(2))+`rem `,1)]),h(s,{modelValue:i.radius,"onUpdate:modelValue":n[5]||=e=>i.radius=e,min:0,max:2,step:.125,onInput:T},null,8,[`modelValue`])]),I(`section`,ie,[h(f,{modelValue:i.highContrast,"onUpdate:modelValue":n[6]||=e=>i.highContrast=e,"active-text":`高对比度`,onChange:E},null,8,[`modelValue`]),h(f,{modelValue:i.reduceMotion,"onUpdate:modelValue":n[7]||=e=>i.reduceMotion=e,"active-text":`减少动效`,onChange:E},null,8,[`modelValue`]),h(f,{modelValue:i.disableMotion,"onUpdate:modelValue":n[8]||=e=>i.disableMotion=e,"active-text":`关闭全部动效`,onChange:E},null,8,[`modelValue`])]),h(_,{class:`reset`,text:``,onClick:D},{default:c(()=>[...n[16]||=[F(` 恢复默认外观 `,-1)]]),_:1})])]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-3773df04`]]),oe={class:`brand`},se={class:`brand-text`},ce={class:`nav`},le={class:`sidebar-footer`},ue={class:`title`},de={class:`user`},fe={class:`avatar`},pe={class:`username`},me=y(T({__name:`MainLayout`,setup(r){let s=ne(),f=V(),y=[{key:`dashboard`,label:`概览`,icon:k},{key:`sessions`,label:`会话`,icon:n},{key:`plugins`,label:`插件`,icon:o},{key:`config`,label:`配置`,icon:E},{key:`kv`,label:`KV 存储`,icon:d},{key:`logs`,label:`日志`,icon:i},{key:`events`,label:`事件`,icon:S},{key:`actions`,label:`调试 Action`,icon:v}],T={dashboard:`概览`,sessions:`会话`,plugins:`插件`,config:`配置`,kv:`KV 存储`,logs:`日志`,events:`事件`,actions:`调试 Action`},N=a(``),R=a(`0.0.0`),B=a(!1),H=a(U()),W=a(!1),G=e=>{H.value=z({x:e.clientX,y:e.clientY})},K=()=>{H.value=U()},q=null,J=_(()=>T[s.name]??T[s.path]??`JsBot`),Y=_(()=>N.value?N.value.slice(0,1).toUpperCase():`?`),X=null;l(()=>{D(`/api/auth/me`).then(e=>{N.value=e.username}),Z(),X=setInterval(()=>void Z(),1e4),q=te(K),H.value=U()}),e(()=>{X!==null&&clearInterval(X),q!==null&&q()});let Z=async()=>{try{let e=await m();R.value=e.version,B.value=e.runtime?.connected??!1}catch{B.value=!1}},Q=e=>{e===`logout`&&$()},$=async()=>{try{await M(`/api/auth/logout`)}catch(e){console.warn(`logout failed:`,A(e))}await f.push({name:`login`})};return(e,n)=>{let r=w(`el-icon`),i=w(`router-link`),a=w(`el-aside`),o=w(`el-button`),l=w(`el-tooltip`),d=w(`Brush`),f=w(`el-dropdown-item`),m=w(`el-dropdown-menu`),_=w(`el-dropdown`),v=w(`el-header`),S=w(`router-view`),T=w(`el-main`),E=w(`el-container`);return u(),O(E,{class:`layout`},{default:c(()=>[h(a,{width:`232px`,class:`sidebar`},{default:c(()=>[I(`div`,oe,[n[4]||=I(`div`,{class:`logo`},`J`,-1),I(`div`,se,[n[3]||=I(`h2`,null,`JsBot 控制台`,-1),I(`p`,null,`Tellus · `+b(g(R)),1)])]),I(`nav`,ce,[(u(),x(p,null,t(y,e=>h(i,{key:e.key,to:{name:e.key},class:j([`nav-item`,{active:g(s).name===e.key}])},{default:c(()=>[h(r,{size:17},{default:c(()=>[(u(),O(C(e.icon)))]),_:2},1024),I(`span`,null,b(e.label),1)]),_:2},1032,[`to`,`class`])),64))]),I(`div`,le,[I(`span`,{class:j([`status-dot`,g(B)?`ok`:`off`])},null,2),I(`span`,null,b(g(B)?`运行时在线`:`运行时离线`),1)])]),_:1}),h(E,null,{default:c(()=>[h(v,{class:`header`},{default:c(()=>[I(`span`,ue,b(J.value),1),n[6]||=I(`span`,{class:`spacer`},null,-1),h(l,{content:H.value?`切换到亮色模式`:`切换到暗色模式`,placement:`bottom`},{default:c(()=>[h(o,{text:``,circle:``,class:`theme-toggle`,onClick:n[0]||=e=>G(e)},{default:c(()=>[h(r,{size:17},{default:c(()=>[H.value?(u(),O(g(ee),{key:0})):(u(),O(g(P),{key:1}))]),_:1})]),_:1})]),_:1},8,[`content`]),h(l,{content:`外观设置`,placement:`bottom`},{default:c(()=>[h(o,{text:``,circle:``,class:`theme-toggle`,onClick:n[1]||=e=>W.value=!0},{default:c(()=>[h(r,{size:17},{default:c(()=>[h(d)]),_:1})]),_:1})]),_:1}),h(_,{trigger:`click`,onCommand:Q},{dropdown:c(()=>[h(m,null,{default:c(()=>[h(f,{command:`logout`},{default:c(()=>[...n[5]||=[F(` 退出登录 `,-1)]]),_:1})]),_:1})]),default:c(()=>[I(`span`,de,[I(`span`,fe,b(Y.value),1),I(`span`,pe,b(g(N)),1)])]),_:1})]),_:1}),h(T,{class:`main`},{default:c(()=>[h(S,null,{default:c(({Component:e})=>[h(L,{name:`route-fade`,mode:`out-in`},{default:c(()=>[(u(),O(C(e)))]),_:2},1024)]),_:1})]),_:1})]),_:1}),h(ae,{modelValue:W.value,"onUpdate:modelValue":n[2]||=e=>W.value=e},null,8,[`modelValue`])]),_:1})}}}),[[`__scopeId`,`data-v-068da420`]]);export{me as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.panel[data-v-3773df04]{flex-direction:column;gap:20px;display:flex}.group[data-v-3773df04]{flex-direction:column;gap:10px;display:flex}.group h4[data-v-3773df04]{color:var(--app-muted);letter-spacing:.02em;margin:0;font-size:12.5px;font-weight:600}.slider-row[data-v-3773df04]{justify-content:space-between;align-items:center;display:flex}.slider-value[data-v-3773df04]{font-variant-numeric:tabular-nums;color:var(--app-accent);font-size:12.5px}.group .el-switch[data-v-3773df04]{width:fit-content}.reset[data-v-3773df04]{color:var(--app-muted);align-self:flex-start}.layout[data-v-068da420]{background:var(--app-bg);height:100%}.sidebar[data-v-068da420]{background:var(--app-side-bg);border-right:1px solid var(--app-border);color:var(--app-muted);flex-direction:column;transition:background .2s;display:flex}.brand[data-v-068da420]{align-items:center;gap:12px;padding:22px 20px 18px;display:flex}.logo[data-v-068da420]{color:#fff;width:36px;height:36px;box-shadow:0 8px 20px color-mix(in oklab, var(--app-accent) 35%, transparent);background:linear-gradient(135deg,oklch(68.5% .155 230),oklch(56% .15 250));border-radius:10px;flex:none;justify-content:center;align-items:center;font-weight:700;display:flex}.brand-text h2[data-v-068da420]{color:var(--app-text);letter-spacing:.02em;margin:0;font-size:14.5px}.brand-text p[data-v-068da420]{color:var(--app-muted);margin:3px 0 0;font-size:11px}.nav[data-v-068da420]{flex-direction:column;flex:1;gap:2px;margin-top:4px;padding:6px 12px;display:flex}.nav-item[data-v-068da420]{border-radius:9px;align-items:center;gap:10px;padding:9px 13px;font-size:13.5px;text-decoration:none;transition:background .14s,color .14s;display:flex;position:relative;color:var(--app-muted)!important}.nav-item[data-v-068da420]:hover{background:var(--app-nav-hover);color:var(--app-text)!important}.nav-item.active[data-v-068da420]{background:color-mix(in oklab, var(--app-accent) 12%, transparent);color:var(--app-accent)!important}.nav-item.active[data-v-068da420]:before{content:"";background:linear-gradient(oklch(68.5% .155 230),oklch(56% .15 250));border-radius:999px;width:3px;position:absolute;top:20%;bottom:20%;left:-12px}.sidebar-footer[data-v-068da420]{border-top:1px solid var(--app-border);align-items:center;gap:8px;padding:14px 20px;font-size:12px;display:flex}.status-dot[data-v-068da420]{border-radius:999px;width:8px;height:8px}.status-dot.ok[data-v-068da420]{background:var(--app-ok);box-shadow:0 0 10px color-mix(in oklab, var(--app-ok) 70%, transparent)}.status-dot.off[data-v-068da420]{background:var(--app-dot-off)}.header[data-v-068da420]{background:var(--app-glass);border-bottom:1px solid var(--app-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);align-items:center;height:58px;padding:0 24px;display:flex}.title[data-v-068da420]{color:var(--app-text);font-size:14.5px;font-weight:600}.spacer[data-v-068da420]{flex:1}.theme-toggle[data-v-068da420]{color:var(--app-muted);margin-right:6px}.user[data-v-068da420]{color:var(--app-text);cursor:pointer;border-radius:999px;align-items:center;gap:9px;padding:4px 6px 4px 4px;transition:background .14s;display:flex}.user[data-v-068da420]:hover{background:var(--app-nav-hover)}.avatar[data-v-068da420]{color:#fff;background:linear-gradient(135deg,oklch(68.5% .155 230),oklch(56% .15 250));border-radius:999px;justify-content:center;align-items:center;width:28px;height:28px;font-size:12.5px;font-weight:700;display:flex}.username[data-v-068da420]{font-size:13px}.main[data-v-068da420]{padding:22px 24px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.opts-form[data-v-cabdd1c5]{flex-direction:column;gap:10px;display:flex}.row[data-v-cabdd1c5]{align-items:flex-start;gap:10px;display:flex}.row .key[data-v-cabdd1c5]{flex:0 0 148px}.row .type[data-v-cabdd1c5]{flex:0 0 96px}.row .value[data-v-cabdd1c5]{flex:1;min-width:0}.row .num[data-v-cabdd1c5]{width:100%}.row .raw[data-v-cabdd1c5] textarea{font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:12px;line-height:1.6}.row>.drop[data-v-cabdd1c5]{color:var(--app-muted);flex:none}.row>.drop[data-v-cabdd1c5]:hover{color:var(--app-log-error)}.key.dup[data-v-cabdd1c5] .el-input__wrapper{box-shadow:0 0 0 1px var(--app-log-error) inset, 0 0 0 3px color-mix(in oklab, var(--app-log-error) 16%, transparent)}.null-mark[data-v-cabdd1c5]{background:color-mix(in oklab, var(--app-muted) 14%, transparent);color:var(--app-muted);border-radius:7px;padding:2px 10px;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:12px;display:inline-flex}.add[data-v-cabdd1c5]{color:var(--app-accent);align-self:flex-start}.mono[data-v-cabdd1c5] textarea{font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.65}.mono.bad[data-v-cabdd1c5] textarea:focus{box-shadow:0 0 0 1px var(--app-log-error) inset, 0 0 0 3px color-mix(in oklab, var(--app-log-error) 16%, transparent)}.hint[data-v-cabdd1c5]{color:var(--app-muted);margin:0;font-size:12px}.hint.bad[data-v-cabdd1c5]{color:var(--app-log-error)}.empty[data-v-cabdd1c5]{color:var(--app-muted);padding:18px 0;font-size:12.5px}.block[data-v-c65df5c0]{margin-bottom:16px}.card-header[data-v-c65df5c0]{justify-content:space-between;align-items:center;display:flex}.cfg-mode[data-v-c65df5c0]{margin:0 0 14px 4px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ai as e,Di as t,Ii as n,Ki as r,Ri as i,Si as a,Ti as o,Wi as s,Xr as c,ci as l,d as u,ea as d,ei as f,f as p,ga as m,i as h,ii as g,ki as _,li as v,n as y,ni as b,p as x,pa as S,q as C,r as w,ri as T,si as E,st as D,ti as O,zi as k}from"./api-CNzxhTWe.js";var A={class:`opts-form`},j={key:0,class:`empty`},M={class:`value`},N={key:3,class:`null-mark`},P=p(v({__name:`PluginOptionsForm`,props:{options:{}},setup(e,{expose:a}){let u=e,p=r(`form`),h=s([]),v=r(``),y=e=>{let t={key:``,type:`json`,text:``,num:void 0,bool:!1,raw:``};return e===null?t.type=`null`:typeof e==`string`?(t.type=`string`,t.text=e):typeof e==`number`?(t.type=`number`,t.num=e):typeof e==`boolean`?(t.type=`boolean`,t.bool=e):(t.type=`json`,t.raw=JSON.stringify(e,null,4)),t};n(()=>u.options,()=>{h.length=0;for(let[e,t]of Object.entries(u.options??{})){let n=y(t);n.key=e,h.push(n)}v.value=JSON.stringify(u.options??{},null,4)},{immediate:!0,deep:!1});let x=e=>h.filter(t=>t.key===h[e]?.key).length>1,w=()=>{let e=1;for(;h.some(t=>t.key===`新字段${e}`);)e+=1;h.push({key:`新字段${e}`,type:`string`,text:``,num:void 0,bool:!1,raw:``})},k=e=>{if(e.type!==`json`)return!1;try{JSON.parse(e.raw)}catch{return!0}return!1},P=e=>e.trim().length===0?null:JSON.parse(e),F=()=>{let e={};for(let t of h)t.key.trim().length!==0&&(e[t.key]=I(t));return e},I=e=>e.type===`null`?null:e.type===`json`?P(e.raw):e.type===`number`?e.num??0:e.type===`boolean`?e.bool:e.text,L=f(()=>{try{P(v.value);let e=JSON.parse(v.value);return!(typeof e==`object`&&e)}catch{return!0}});return a({collect:()=>{if(p.value===`json`)return L.value?{ok:!1,message:`JSON 格式错误`}:{ok:!0,options:JSON.parse(v.value)};let e=new Map;for(let t of h){if(t.key.trim().length===0)return{ok:!1,message:`有字段没有名字,请为每个字段命名`};if(e.set(t.key,(e.get(t.key)??0)+1),t.type===`json`&&k(t))return{ok:!1,message:`字段「${t.key}」的 JSON 有格式错误`}}let t=[...e.entries()].find(([,e])=>e>1);return t===void 0?{ok:!0,options:F()}:{ok:!1,message:`字段名「${t[0]}」重复,请先改名`}},mode:p,switchMode:e=>{if(e===p.value)return{ok:!0};if(e===`json`){for(let e of h)if(e.type===`json`&&k(e))return{ok:!1,message:`字段「${e.key}」的 JSON 有格式错误,无法切到 JSON 模式`};return v.value=JSON.stringify(F(),null,4),p.value=`json`,{ok:!0}}if(L.value)return{ok:!1,message:`JSON 里有格式错误,修好了才能切回表单`};let t=JSON.parse(v.value);if(Array.isArray(t))return{ok:!1,message:`数组根无法用表单呈现,请继续用 JSON 编辑`};h.length=0;for(let[e,n]of Object.entries(t)){let t=y(n);t.key=e,h.push(t)}return p.value=`form`,{ok:!0}}}),(e,n)=>{let r=_(`el-input`),a=_(`el-option`),s=_(`el-select`),u=_(`el-input-number`),f=_(`el-switch`),y=_(`el-button`);return o(),g(`div`,A,[p.value===`form`?(o(),g(c,{key:0},[h.length===0?(o(),g(`div`,j,` 该插件暂无配置。点「添加字段」创建第一个,或切到 JSON 直接编辑。 `)):T(``,!0),(o(!0),g(c,null,t(h,(e,t)=>(o(),g(`div`,{key:t,class:`row`},[l(r,{modelValue:e.key,"onUpdate:modelValue":t=>e.key=t,class:S([`key`,{dup:x(t)}]),placeholder:`字段名`},null,8,[`modelValue`,`onUpdate:modelValue`,`class`]),l(s,{modelValue:e.type,"onUpdate:modelValue":t=>e.type=t,class:`type`},{default:i(()=>[l(a,{label:`字符串`,value:`string`}),l(a,{label:`数字`,value:`number`}),l(a,{label:`开关`,value:`boolean`}),l(a,{label:`JSON`,value:`json`}),l(a,{label:`null`,value:`null`})]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),O(`div`,M,[e.type===`string`?(o(),b(r,{key:0,modelValue:e.text,"onUpdate:modelValue":t=>e.text=t,placeholder:`字符串`},null,8,[`modelValue`,`onUpdate:modelValue`])):e.type===`number`?(o(),b(u,{key:1,modelValue:e.num,"onUpdate:modelValue":t=>e.num=t,step:1,class:`num`},null,8,[`modelValue`,`onUpdate:modelValue`])):e.type===`boolean`?(o(),b(f,{key:2,modelValue:e.bool,"onUpdate:modelValue":t=>e.bool=t},null,8,[`modelValue`,`onUpdate:modelValue`])):e.type===`null`?(o(),g(`span`,N,`null`)):(o(),b(r,{key:4,modelValue:e.raw,"onUpdate:modelValue":t=>e.raw=t,type:`textarea`,rows:3,spellcheck:`false`,class:S([`raw`,k(e)?`bad`:``]),placeholder:`数组或对象,JSON 格式`},null,8,[`modelValue`,`onUpdate:modelValue`,`class`]))]),l(y,{class:`drop`,text:``,icon:d(C),onClick:e=>h.splice(t,1)},null,8,[`icon`,`onClick`])]))),128)),l(y,{class:`add`,text:``,icon:d(D),onClick:w},{default:i(()=>[...n[1]||=[E(` 添加字段 `,-1)]]),_:1},8,[`icon`])],64)):(o(),g(c,{key:1},[l(r,{modelValue:v.value,"onUpdate:modelValue":n[0]||=e=>v.value=e,type:`textarea`,rows:14,spellcheck:`false`,class:S([`mono`,L.value?`bad`:``]),placeholder:`{}`},null,8,[`modelValue`,`class`]),O(`p`,{class:S([`hint`,{bad:L.value}])},m(L.value?`JSON 格式错误,顶层必须是对象或数组`:`JSON 校验通过——保存时会以这份 JSON 为准`),3)],64))])}}}),[[`__scopeId`,`data-v-cabdd1c5`]]),F={class:`card-header`},I={class:`card-header`},L={class:`cfg-mode`},R=p(v({__name:`PluginsView`,setup(t){let n=r([]),s=r([]),c=r(!0),d=r(!1),f=r(``),p=r(!1),v=r(`form`),S=r(``),C=r(``),D=r({}),A=r(null),j=async()=>{d.value=!0;try{let e=await y(`/api/plugins`);n.value=e.plugins,s.value=e.installed,c.value=e.installerEnabled,C.value=e.configHash}catch(e){u(e)}finally{d.value=!1}},M=async(e,t)=>{try{await h(`/api/plugins/${encodeURIComponent(e.id)}/config`,{enabled:!!t}),await j()}catch(e){u(e)}},N=e=>{S.value=e.id,D.value=e.options??{},v.value=`form`,p.value=!0},R=e=>{let t=A.value;if(t===null)return;let n=e===`json`?`json`:`form`,r=t.switchMode(n);r.ok?v.value=n:x.warning(r.message??`无法切换模式`)},z=async()=>{if(d.value)return;let e=A.value;if(e===null)return;let t=e.collect();if(!t.ok)x.warning(t.message??`配置未能通过校验`);else{d.value=!0;try{await h(`/api/plugins/${encodeURIComponent(S.value)}/config`,{options:t.options??{},baseHash:C.value}),p.value=!1,x.success(`配置已保存`),await j()}catch(e){u(e)}finally{d.value=!1}}},B=async()=>{if(f.value){d.value=!0;try{await w(`/api/plugins/install`,{spec:f.value}),x.success(`安装完成,请自行重启运行时使其生效`),f.value=``,await j()}catch(e){u(e)}finally{d.value=!1}}},V=async()=>{d.value=!0;try{await w(`/api/plugins/update`,{}),await j()}catch(e){u(e)}finally{d.value=!1}},H=async e=>{d.value=!0;try{await w(`/api/plugins/remove`,{target:e.packageName}),await j()}catch(e){u(e)}finally{d.value=!1}};return a(()=>void j()),(t,r)=>{let a=_(`el-alert`),u=_(`el-button`),h=_(`el-table-column`),y=_(`el-tag`),x=_(`el-switch`),C=_(`el-table`),w=_(`el-card`),U=_(`el-space`),W=_(`el-input`),G=_(`el-radio-button`),K=_(`el-radio-group`),q=_(`el-drawer`),J=e(`loading`);return o(),g(`div`,null,[c.value?T(``,!0):(o(),b(a,{key:0,title:`插件安装器未启用(installer.enabled = false)`,type:`info`,closable:!1,class:`block`})),l(w,{class:`block`},{header:i(()=>[O(`div`,F,[r[4]||=O(`span`,null,`已加载插件`,-1),l(u,{size:`small`,onClick:j},{default:i(()=>[...r[3]||=[E(`刷新`,-1)]]),_:1})])]),default:i(()=>[k((o(),b(C,{data:n.value,size:`small`},{default:i(()=>[l(h,{prop:`id`,label:`ID`,width:`160`}),l(h,{prop:`version`,label:`版本`,width:`100`}),l(h,{prop:`description`,label:`说明`}),l(h,{label:`状态`,width:`110`},{default:i(({row:e})=>[l(y,{size:`small`,type:e.loaded?`success`:`info`},{default:i(()=>[E(m(e.loaded?`已加载`:`未加载`),1)]),_:2},1032,[`type`])]),_:1}),l(h,{label:`启用`,width:`80`},{default:i(({row:e})=>[l(x,{"model-value":e.enabled,onChange:t=>M(e,!!t)},null,8,[`model-value`,`onChange`])]),_:1}),l(h,{label:`操作`,width:`190`},{default:i(({row:e})=>[l(u,{size:`small`,onClick:t=>N(e)},{default:i(()=>[...r[5]||=[E(` 配置 `,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[J,d.value]])]),_:1}),l(w,null,{header:i(()=>[O(`div`,I,[r[7]||=O(`span`,null,`已安装 npm 包`,-1),l(U,null,{default:i(()=>[l(u,{size:`small`,onClick:V},{default:i(()=>[...r[6]||=[E(` 全部更新 `,-1)]]),_:1})]),_:1})])]),default:i(()=>[l(C,{data:s.value,size:`small`},{default:i(()=>[l(h,{prop:`packageName`,label:`包名`}),l(h,{prop:`version`,label:`版本`,width:`110`}),l(h,{label:`插件 ID`,width:`200`},{default:i(({row:e})=>[E(m((e.pluginIds??[]).join(`, `)),1)]),_:1}),l(h,{label:`卸载`,width:`110`},{default:i(({row:e})=>[l(u,{size:`small`,type:`danger`,onClick:t=>H(e)},{default:i(()=>[...r[8]||=[E(` 卸载 `,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1}),l(w,{class:`block`},{default:i(()=>[l(U,null,{default:i(()=>[l(W,{modelValue:f.value,"onUpdate:modelValue":r[0]||=e=>f.value=e,placeholder:`包名,如 @scope/jsbot-plugin-xxx`,style:{width:`320px`}},null,8,[`modelValue`]),l(u,{type:`primary`,loading:d.value,onClick:B},{default:i(()=>[...r[9]||=[E(` 安装 `,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1}),l(q,{modelValue:p.value,"onUpdate:modelValue":r[2]||=e=>p.value=e,size:`620px`,title:`插件配置 · `+S.value},{footer:i(()=>[l(u,{onClick:r[1]||=e=>p.value=!1},{default:i(()=>[...r[12]||=[E(`取消`,-1)]]),_:1}),l(u,{type:`primary`,loading:d.value,onClick:z},{default:i(()=>[...r[13]||=[E(` 保存 `,-1)]]),_:1},8,[`loading`])]),default:i(()=>[O(`div`,L,[l(K,{"model-value":v.value,size:`small`,onChange:R},{default:i(()=>[l(G,{value:`form`},{default:i(()=>[...r[10]||=[E(`表单`,-1)]]),_:1}),l(G,{value:`json`},{default:i(()=>[...r[11]||=[E(`JSON`,-1)]]),_:1})]),_:1},8,[`model-value`])]),l(P,{ref_key:`formRef`,ref:A,options:D.value},null,8,[`options`])]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-c65df5c0`]]);export{R as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ai as e,Di as t,Jr as n,Ki as r,Ri as i,Si as a,Ti as o,Xr as s,ci as c,d as l,ea as u,f as d,ga as f,i as p,ii as m,ki as h,l as g,li as _,n as v,ni as y,p as b,qr as x,r as S,ri as C,si as w,t as T,ti as E,zi as D}from"./api-CNzxhTWe.js";var ee={key:0},O={class:`message-content`},k={key:0,class:`sub`},A=20,j=d(_({__name:`SessionsView`,setup(d){let _=r([]),j=r(0),M=r(1),N=r(``),P=r(!1),F=r(!1),I=r(null),L=r(``),R=r({provider:``,model:``,persona:``}),z=r(``),B=r(``),V=r(!0),H=r(!1),U=async()=>{P.value=!0;try{let e=(M.value-1)*A,t=new URLSearchParams({limit:String(A),offset:String(e)});N.value&&t.set(`query`,N.value);let n=await v(`/api/sessions?${t.toString()}`);_.value=n.items,j.value=n.total}catch(e){l(e)}finally{P.value=!1}},W=e=>{M.value=e,U()},G=async e=>{try{let t=await v(`/api/sessions/${encodeURIComponent(e.sessionId)}`);I.value=t,L.value=e.sessionId,R.value={provider:t.provider??``,model:t.model??``,persona:t.persona??``},F.value=!0}catch(e){l(e)}},K=async()=>{if(I.value!==null)try{I.value=await p(`/api/sessions/${encodeURIComponent(L.value)}`,{provider:R.value.provider||null,model:R.value.model||null,persona:R.value.persona||null}),b.success(`已保存`),await U()}catch(e){l(e)}},q=async()=>{if(I.value!==null&&z.value)try{I.value=await S(`/api/sessions/${encodeURIComponent(L.value)}/messages`,{role:`user`,content:z.value}),z.value=``}catch(e){l(e)}},J=async()=>{if(B.value){H.value=!0;try{await S(`/api/sessions/${encodeURIComponent(L.value)}/send`,{message:B.value,autoEscape:V.value}),b.success(`已发送`),B.value=``}catch(e){l(e)}finally{H.value=!1}}},Y=async()=>{try{await T(`/api/sessions/${encodeURIComponent(L.value)}`),I.value=null,F.value=!1,await U()}catch(e){l(e)}},X=async e=>{try{await T(`/api/sessions/${encodeURIComponent(e.sessionId)}`),await U()}catch(e){l(e)}},Z=e=>e===`assistant`?`success`:e===`system`?`warning`:`primary`;return a(()=>void U()),(r,a)=>{let l=h(`el-input`),d=h(`el-button`),p=h(`el-space`),v=h(`el-card`),b=h(`el-table-column`),S=h(`el-table`),T=h(`el-pagination`),Q=h(`el-form-item`),te=h(`el-form`),$=h(`el-divider`),ne=h(`el-tag`),re=h(`el-checkbox`),ie=h(`el-drawer`),ae=e(`loading`);return o(),m(`div`,null,[c(v,{class:`block`},{default:i(()=>[c(p,null,{default:i(()=>[c(l,{modelValue:N.value,"onUpdate:modelValue":a[0]||=e=>N.value=e,placeholder:`搜索 session id`,clearable:``,style:{width:`260px`},onKeyup:x(U,[`enter`])},null,8,[`modelValue`]),c(d,{type:`primary`,onClick:U},{default:i(()=>[...a[8]||=[w(`搜索`,-1)]]),_:1})]),_:1})]),_:1}),c(v,null,{default:i(()=>[D((o(),y(S,{data:_.value,size:`small`,onRowClick:G},{default:i(()=>[c(b,{prop:`sessionId`,label:`Session ID`,"show-overflow-tooltip":``}),c(b,{label:`消息数`,width:`90`},{default:i(({row:e})=>[w(f(e.messageCount),1)]),_:1}),c(b,{label:`更新时间`,width:`180`},{default:i(({row:e})=>[w(f(u(g)(e.updatedAt)),1)]),_:1}),c(b,{label:`操作`,width:`160`},{default:i(({row:e})=>[c(d,{size:`small`,onClick:n(t=>G(e),[`stop`])},{default:i(()=>[...a[9]||=[w(` 详情 `,-1)]]),_:1},8,[`onClick`]),c(d,{size:`small`,type:`danger`,onClick:n(t=>X(e),[`stop`])},{default:i(()=>[...a[10]||=[w(` 清空 `,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[ae,P.value]]),c(T,{class:`pager`,layout:`total, prev, pager, next`,total:j.value,"page-size":A,"current-page":M.value,onCurrentChange:W},null,8,[`total`,`current-page`])]),_:1}),c(ie,{modelValue:F.value,"onUpdate:modelValue":a[7]||=e=>F.value=e,size:`45%`,title:`会话 `+L.value},{default:i(()=>[I.value?(o(),m(`div`,ee,[c(te,{"label-width":`90px`,size:`small`},{default:i(()=>[c(Q,{label:`provider`},{default:i(()=>[c(l,{modelValue:R.value.provider,"onUpdate:modelValue":a[1]||=e=>R.value.provider=e},null,8,[`modelValue`])]),_:1}),c(Q,{label:`model`},{default:i(()=>[c(l,{modelValue:R.value.model,"onUpdate:modelValue":a[2]||=e=>R.value.model=e},null,8,[`modelValue`])]),_:1}),c(Q,{label:`persona`},{default:i(()=>[c(l,{modelValue:R.value.persona,"onUpdate:modelValue":a[3]||=e=>R.value.persona=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1}),c(Q,null,{default:i(()=>[c(d,{type:`primary`,onClick:K},{default:i(()=>[...a[11]||=[w(` 保存 `,-1)]]),_:1})]),_:1})]),_:1}),c($,null,{default:i(()=>[...a[12]||=[w(`LLM 消息`,-1)]]),_:1}),(o(!0),m(s,null,t(I.value.messages,(e,t)=>(o(),m(`div`,{key:t,class:`message`},[c(ne,{size:`small`,type:Z(e.role)},{default:i(()=>[w(f(e.role),1)]),_:2},1032,[`type`]),E(`pre`,O,f(e.content),1)]))),128)),I.value.messages.length===0?(o(),m(`p`,k,`无消息`)):C(``,!0),c(l,{modelValue:z.value,"onUpdate:modelValue":a[4]||=e=>z.value=e,type:`textarea`,rows:3,placeholder:`追加 role=user 消息`,class:`block`},null,8,[`modelValue`]),c(d,{size:`small`,onClick:q},{default:i(()=>[...a[13]||=[w(`追加`,-1)]]),_:1}),c($,null,{default:i(()=>[...a[14]||=[w(`发送 QQ 消息`,-1)]]),_:1}),c(l,{modelValue:B.value,"onUpdate:modelValue":a[5]||=e=>B.value=e,type:`textarea`,rows:3,placeholder:`发送到此 session(等同机器人回复)`,class:`block`},null,8,[`modelValue`]),c(p,null,{default:i(()=>[c(d,{type:`primary`,size:`small`,loading:H.value,onClick:J},{default:i(()=>[...a[15]||=[w(` 发送 `,-1)]]),_:1},8,[`loading`]),c(re,{modelValue:V.value,"onUpdate:modelValue":a[6]||=e=>V.value=e},{default:i(()=>[...a[16]||=[w(`autoEscape`,-1)]]),_:1},8,[`modelValue`]),c(d,{type:`danger`,size:`small`,onClick:Y},{default:i(()=>[...a[17]||=[w(` 清空会话 `,-1)]]),_:1})]),_:1})])):C(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-6382784b`]]);export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.block[data-v-6382784b]{margin-bottom:16px}.pager[data-v-6382784b]{margin-top:12px}.message[data-v-6382784b]{margin:8px 0}.message-content[data-v-6382784b]{background:var(--app-panel-2);border:1px solid var(--app-border);color:var(--app-text);white-space:pre-wrap;border-radius:8px;margin:4px 0 0;padding:8px;font-size:12px}.sub[data-v-6382784b]{color:var(--app-muted);font-size:12px}
|