coding-tool-x 3.9.9-261027 → 3.9.9-261105
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/CHANGELOG.md +1 -0
- package/dist/web/assets/AgentsDrawer-DWnAsTH_.js +1 -0
- package/dist/web/assets/Analytics-D_WWRO5h.js +1 -0
- package/dist/web/assets/AssetPathField-CoIuoSZr.js +1 -0
- package/dist/web/assets/ChatHistoryDrawer-B_OnCpxR.js +1 -0
- package/dist/web/assets/CollapseItem-DEV7PQ-o.js +1 -0
- package/dist/web/assets/CommandsDrawer-gG61nb7a.js +1 -0
- package/dist/web/assets/ConfigExportDrawer-BkSzLSuZ.js +1 -0
- package/dist/web/assets/ConfigTemplates-DvEDpIso.js +1 -0
- package/dist/web/assets/ConfigTemplatesDrawer-DMPO4gjt.js +1 -0
- package/dist/web/assets/ConfigTemplatesPanel-BQe31_bq.js +1 -0
- package/dist/web/assets/Divider-CEqaZMTW.js +1 -0
- package/dist/web/assets/DrawerContent-BYlV968f.js +1 -0
- package/dist/web/assets/FavoritesDrawer-Y-MmIIE9.js +1 -0
- package/dist/web/assets/{Forward-DLCL7aMY.js → Forward-kgMPT2RI.js} +1 -1
- package/dist/web/assets/GatewayConvertDrawer-BvYhzJD6.js +1 -0
- package/dist/web/assets/Home-BOwk4kTa.js +1 -0
- package/dist/web/assets/MarkdownEditor-Bf9QKKaV.js +1 -0
- package/dist/web/assets/McpDrawer-B7cwI24B.js +1 -0
- package/dist/web/assets/McpFormDrawer-Djt5CJyE.js +1 -0
- package/dist/web/assets/PluginManager-B4J_hR0V.js +1 -0
- package/dist/web/assets/PluginsDrawer-Ch4x66-E.js +1 -0
- package/dist/web/assets/PluginsPanel-mqXBlKZg.js +1 -0
- package/dist/web/assets/ProjectList-DtmQyoPc.css +1 -0
- package/dist/web/assets/ProjectList-xToRgLVw.js +1 -0
- package/dist/web/assets/PromptsDrawer-VYrlk-F6.js +1 -0
- package/dist/web/assets/RecentSessionsDrawer-DCsgGSBu.js +1 -0
- package/dist/web/assets/SessionCard-C9n9lC_Y.css +1 -0
- package/dist/web/assets/SessionCard-DwzxeSe9.js +1 -0
- package/dist/web/assets/{SessionList-qG_XpPBJ.css → SessionList-CCuKp6ib.css} +1 -1
- package/dist/web/assets/SessionList-GqzUHgOu.js +1 -0
- package/dist/web/assets/SettingsDrawer-Q_aTOBhf.js +1 -0
- package/dist/web/assets/SkillManager-B1B58WKe.js +1 -0
- package/dist/web/assets/SkillsDrawer-Ch1b1hLn.js +1 -0
- package/dist/web/assets/SkillsPanel-B_xxyDpy.js +1 -0
- package/dist/web/assets/{Upload-xqorL26i.js → Upload-B6Kn1TvG.js} +1 -1
- package/dist/web/assets/WorkspaceDrawer-C3w-Z87U.js +1 -0
- package/dist/web/assets/WorkspaceManager-BFzjeEWh.js +1 -0
- package/dist/web/assets/WorkspacePanel-DkrwFSLs.js +1 -0
- package/dist/web/assets/_plugin-vue_export-helper-DyHLuIR4.js +1 -0
- package/dist/web/assets/{client-oU6RT-6I.js → client-B31QOzWk.js} +1 -1
- package/dist/web/assets/{dsh-agent-presets-DjJRVMT6.js → dsh-agent-presets-DopJnuAZ.js} +1 -1
- package/dist/web/assets/headers-nTUGmJee.js +1 -0
- package/dist/web/assets/{icons-B-AzZoeE.js → icons-C6KNTFqo.js} +1 -1
- package/dist/web/assets/index-BXWpib7P.js +2 -0
- package/dist/web/assets/{index-DjIuAtaS.css → index-CvL_fRpL.css} +1 -1
- package/dist/web/assets/light-DeIjG9s_.js +1 -0
- package/dist/web/assets/markdown-xLK9ekFg.js +1 -0
- package/dist/web/assets/platforms-BdTllxKt.js +1 -0
- package/dist/web/assets/{platforms-p9AiybLU.js → platforms-CDltfh5G.js} +1 -1
- package/dist/web/assets/{project-config-CzFKBw_m.js → project-config-C16yaWHF.js} +1 -1
- package/dist/web/assets/rolldown-runtime-DcNxTHDL.js +1 -0
- package/dist/web/assets/sessions-B4RD8wDx.js +1 -0
- package/dist/web/assets/{sessions-DJiJJgvg.js → sessions-Xl0HAvhA.js} +1 -1
- package/dist/web/assets/use-lock-html-scroll-Bu94jdUB.js +1 -0
- package/dist/web/assets/use-message-BYx0IRj1.js +1 -0
- package/dist/web/assets/useResponsiveDrawer-Deh7Xdcj.js +1 -0
- package/dist/web/assets/vendors-CvGw6U_t.js +1 -0
- package/dist/web/assets/vue-vendor-Cr_NLmXY.js +1 -0
- package/dist/web/assets/{workspaces-D2yLnT-B.js → workspaces-Y7hS24p2.js} +1 -1
- package/dist/web/assets/xml-B78loRzO.js +1 -0
- package/dist/web/index.html +13 -12
- package/package.json +3 -3
- package/src/config/model-metadata.json +30 -4
- package/src/platforms/drivers/dsh/api-operations.js +1 -1
- package/src/platforms/drivers/dsh/channels-implementation.js +10 -0
- package/src/platforms/drivers/dsh/channels.js +10 -0
- package/src/platforms/drivers/dsh/proxy-implementation.js +7 -1
- package/src/platforms/drivers/dsh/sessions.js +5 -1
- package/src/platforms/manifest-schema.js +1 -1
- package/src/platforms/manifests/dsh.json +8 -0
- package/src/server/services/model-detector.js +22 -3
- package/dist/web/assets/AgentsDrawer-CKEf8ie1.js +0 -1
- package/dist/web/assets/Analytics-0BCMxQ-o.js +0 -1
- package/dist/web/assets/AssetPathField-pfN6L814.js +0 -1
- package/dist/web/assets/ChatHistoryDrawer-nuUPRqje.js +0 -1
- package/dist/web/assets/CollapseItem-B2SdqQp2.js +0 -1
- package/dist/web/assets/CommandsDrawer-D8m0qLzQ.js +0 -1
- package/dist/web/assets/ConfigExportDrawer-BlCBLdue.js +0 -1
- package/dist/web/assets/ConfigTemplates-CePBARK8.js +0 -1
- package/dist/web/assets/ConfigTemplatesDrawer-DbVY4rD1.js +0 -1
- package/dist/web/assets/ConfigTemplatesPanel-CwYPLEFV.js +0 -1
- package/dist/web/assets/Divider-BLLhMTSt.js +0 -1
- package/dist/web/assets/DrawerContent-ChXgZ1Xm.js +0 -1
- package/dist/web/assets/FavoritesDrawer-BKAKQNqP.js +0 -1
- package/dist/web/assets/GatewayConvertDrawer-D2MFXcqS.js +0 -1
- package/dist/web/assets/Home-BmElvXVZ.js +0 -1
- package/dist/web/assets/MarkdownEditor-buNC2iDj.js +0 -1
- package/dist/web/assets/McpDrawer-NBjAyFU5.js +0 -1
- package/dist/web/assets/McpFormDrawer-BUnW9j4A.js +0 -1
- package/dist/web/assets/PluginManager-BgHpsF5S.js +0 -1
- package/dist/web/assets/PluginsDrawer-CFnmqzV0.js +0 -1
- package/dist/web/assets/PluginsPanel-ClSdnSCu.js +0 -1
- package/dist/web/assets/ProjectList-CjlHEyU1.js +0 -1
- package/dist/web/assets/ProjectList-VbIYSHbH.css +0 -1
- package/dist/web/assets/PromptsDrawer-xeSGgpCd.js +0 -1
- package/dist/web/assets/RecentSessionsDrawer-DELB6-rU.js +0 -1
- package/dist/web/assets/SessionCard-BaH42eOe.js +0 -1
- package/dist/web/assets/SessionCard-aM2NHu6i.css +0 -1
- package/dist/web/assets/SessionList-BGB9GwYE.js +0 -1
- package/dist/web/assets/SettingsDrawer-DdYC8GIa.js +0 -1
- package/dist/web/assets/SkillManager-CF7EiSps.js +0 -1
- package/dist/web/assets/SkillsDrawer-Bc5zA1bk.js +0 -1
- package/dist/web/assets/SkillsPanel-SnzwzqW5.js +0 -1
- package/dist/web/assets/WorkspaceDrawer-DBiEnZ7j.js +0 -1
- package/dist/web/assets/WorkspaceManager-C1dNfoAy.js +0 -1
- package/dist/web/assets/WorkspacePanel-CWNQZjm1.js +0 -1
- package/dist/web/assets/_plugin-vue_export-helper-BeLZJZij.js +0 -1
- package/dist/web/assets/headers-DbowkmZJ.js +0 -1
- package/dist/web/assets/index-BKpL4XdU.js +0 -2
- package/dist/web/assets/light-C2X7hegj.js +0 -1
- package/dist/web/assets/markdown-u082bbtj.js +0 -1
- package/dist/web/assets/platforms-Cq6XDXfy.js +0 -1
- package/dist/web/assets/sessions-DSLpMXCq.js +0 -1
- package/dist/web/assets/use-lock-html-scroll-DXIqmUW4.js +0 -1
- package/dist/web/assets/use-message-DBsCm7FJ.js +0 -1
- package/dist/web/assets/useResponsiveDrawer-CTQPBATk.js +0 -1
- package/dist/web/assets/vendors-D0c_0KLP.js +0 -1
- package/dist/web/assets/vue-vendor-BqZbbXHA.js +0 -1
- package/dist/web/assets/xml-CgY3RMlX.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "models.dev",
|
|
3
3
|
"sourceUrl": "https://models.dev/api.json",
|
|
4
|
-
"lastUpdated": "2026-10-
|
|
4
|
+
"lastUpdated": "2026-10-30",
|
|
5
5
|
"defaultModels": {
|
|
6
6
|
"claude": [
|
|
7
7
|
"claude-opus-4-7",
|
|
@@ -152,6 +152,7 @@
|
|
|
152
152
|
"mistral-large-2411": "mistral/mistral-large-2411",
|
|
153
153
|
"mistral-large-2512": "mistral/mistral-large-2512",
|
|
154
154
|
"mistral-large-4": "mistral/mistral-large-4",
|
|
155
|
+
"mistral-large-4-0-8": "mistral/mistral-large-4-0-8",
|
|
155
156
|
"mistral-large-latest": "mistral/mistral-large-latest",
|
|
156
157
|
"mistral-medium-2505": "mistral/mistral-medium-2505",
|
|
157
158
|
"mistral-medium-2508": "mistral/mistral-medium-2508",
|
|
@@ -3548,9 +3549,9 @@
|
|
|
3548
3549
|
},
|
|
3549
3550
|
"name": "Mistral Large 4",
|
|
3550
3551
|
"pricing": {
|
|
3551
|
-
"cacheRead": 0.
|
|
3552
|
-
"input":
|
|
3553
|
-
"output":
|
|
3552
|
+
"cacheRead": 0.07,
|
|
3553
|
+
"input": 0.7,
|
|
3554
|
+
"output": 2.1
|
|
3554
3555
|
},
|
|
3555
3556
|
"provider": "mistral",
|
|
3556
3557
|
"reasoning": true,
|
|
@@ -3561,6 +3562,31 @@
|
|
|
3561
3562
|
"omp"
|
|
3562
3563
|
]
|
|
3563
3564
|
},
|
|
3565
|
+
"mistral/mistral-large-4-0-8": {
|
|
3566
|
+
"id": "mistral/mistral-large-4-0-8",
|
|
3567
|
+
"input": [
|
|
3568
|
+
"text",
|
|
3569
|
+
"image"
|
|
3570
|
+
],
|
|
3571
|
+
"limit": {
|
|
3572
|
+
"context": 1048576,
|
|
3573
|
+
"output": 262144
|
|
3574
|
+
},
|
|
3575
|
+
"name": "Mistral Large 4.0.8",
|
|
3576
|
+
"pricing": {
|
|
3577
|
+
"cacheRead": 0.07,
|
|
3578
|
+
"input": 0.7,
|
|
3579
|
+
"output": 2.1
|
|
3580
|
+
},
|
|
3581
|
+
"provider": "mistral",
|
|
3582
|
+
"reasoning": true,
|
|
3583
|
+
"sourceId": "mistral/mistral-large-4-0-8",
|
|
3584
|
+
"supportsTools": true,
|
|
3585
|
+
"toolTypes": [
|
|
3586
|
+
"opencode",
|
|
3587
|
+
"omp"
|
|
3588
|
+
]
|
|
3589
|
+
},
|
|
3564
3590
|
"mistral/mistral-large-latest": {
|
|
3565
3591
|
"id": "mistral/mistral-large-latest",
|
|
3566
3592
|
"input": [
|
|
@@ -222,7 +222,7 @@ function createDriver(context = {}) {
|
|
|
222
222
|
|
|
223
223
|
// Keep the aggregate DSH API driver compatible with the manifest consistency
|
|
224
224
|
// contract. Actual descriptor requests are still dispatched by capability.
|
|
225
|
-
for (const operation of ['list', 'current', 'enabled', 'poolStatus', 'create', 'update', 'remove', 'applyToSettings', 'sync', 'order', 'models', 'probeModels', 'speedTest']) {
|
|
225
|
+
for (const operation of ['list', 'current', 'enabled', 'poolStatus', 'create', 'update', 'remove', 'applyToSettings', 'sync', 'order', 'models', 'modelsFromConfig', 'probeModels', 'speedTest']) {
|
|
226
226
|
driver[operation] = (...args) => channels[operation](...args);
|
|
227
227
|
}
|
|
228
228
|
for (const operation of ['status', 'start', 'stop']) {
|
|
@@ -254,6 +254,16 @@ class DshChannelService extends BaseChannelService {
|
|
|
254
254
|
if (!SUPPORTED_PROVIDER_APIS.has(channel.providerApi)) {
|
|
255
255
|
throw new Error(`Unsupported DSH provider api: ${channel.providerApi}`);
|
|
256
256
|
}
|
|
257
|
+
const previous = _allChannels.find(item => item.id === channel.id);
|
|
258
|
+
const enablingUnsupported = channel.enabled !== false
|
|
259
|
+
&& channel.providerApi !== 'openai-completions'
|
|
260
|
+
&& (!previous || previous.enabled === false || previous.providerApi !== channel.providerApi);
|
|
261
|
+
if (isProxyModeEnabled() && enablingUnsupported) {
|
|
262
|
+
const error = new Error('DSH 动态代理仅支持 OpenAI Chat Completions;请先停止代理或禁用该渠道');
|
|
263
|
+
error.statusCode = 409;
|
|
264
|
+
error.code = 'dsh_proxy_provider_api_unsupported';
|
|
265
|
+
throw error;
|
|
266
|
+
}
|
|
257
267
|
if (!channel.model || !channel.models.length) {
|
|
258
268
|
throw new Error('DSH channel requires at least one model');
|
|
259
269
|
}
|
|
@@ -118,6 +118,16 @@ function createDriver(context = {}) {
|
|
|
118
118
|
forceRefresh: request?.query?.forceRefresh === 'true' || request?.query?.force === '1'
|
|
119
119
|
});
|
|
120
120
|
}),
|
|
121
|
+
modelsFromConfig: request => withAsyncResult(request, 'modelsFromConfig', async () => {
|
|
122
|
+
const { fetchModelsFromProvider } = require('../../../server/services/model-detector');
|
|
123
|
+
const channel = bodyOf(request);
|
|
124
|
+
if (!String(channel.baseUrl || '').trim()) {
|
|
125
|
+
throw Object.assign(new Error('DSH channel baseUrl is required'), { statusCode: 400 });
|
|
126
|
+
}
|
|
127
|
+
return fetchModelsFromProvider(channel, channelTypeForSpeed(channel), {
|
|
128
|
+
forceRefresh: channel.forceRefresh === true || channel.force === true
|
|
129
|
+
});
|
|
130
|
+
}),
|
|
121
131
|
probeModels: request => withAsyncResult(request, 'probeModels', async () => {
|
|
122
132
|
const { probeModelAvailability } = require('../../../server/services/model-detector');
|
|
123
133
|
const input = bodyOf(request);
|
|
@@ -63,7 +63,13 @@ async function startDshProxyServer(options = {}) {
|
|
|
63
63
|
return { success: true, port: currentPort, provider: 'ctx-dsh-proxy', activeChannel };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
const enabledChannels = getEnabledChannels();
|
|
67
|
+
const incompatibleChannels = enabledChannels.filter(channel => channel.providerApi !== 'openai-completions');
|
|
68
|
+
if (incompatibleChannels.length > 0) {
|
|
69
|
+
const names = incompatibleChannels.map(channel => channel.name || channel.providerKey).join(', ');
|
|
70
|
+
throw new Error(`DSH 动态代理仅支持 OpenAI Chat Completions;请先禁用不兼容渠道:${names}`);
|
|
71
|
+
}
|
|
72
|
+
if (enabledChannels.length === 0) {
|
|
67
73
|
throw new Error('DSH 动态代理当前只支持 openai-completions;请先添加并启用至少一个兼容渠道');
|
|
68
74
|
}
|
|
69
75
|
|
|
@@ -442,7 +442,11 @@ function createDriver(context = {}) {
|
|
|
442
442
|
return {
|
|
443
443
|
sessions,
|
|
444
444
|
totalSize: all.reduce((sum, session) => sum + (Number(session.size) || 0), 0),
|
|
445
|
-
projectInfo: {
|
|
445
|
+
projectInfo: {
|
|
446
|
+
sessionCount: all.length,
|
|
447
|
+
totalSize: all.reduce((sum, session) => sum + (Number(session.size) || 0), 0),
|
|
448
|
+
readOnly: true
|
|
449
|
+
},
|
|
446
450
|
pagination: { page, limit, total: all.length, hasMore: page * limit < all.length }
|
|
447
451
|
};
|
|
448
452
|
};
|
|
@@ -115,7 +115,7 @@ const CAPABILITY_OPERATIONS = Object.freeze({
|
|
|
115
115
|
'updateSkill',
|
|
116
116
|
'deleteSkill'
|
|
117
117
|
]),
|
|
118
|
-
channels: new Set(['applyToSettings', 'bestForRestore', 'catalogMetadata', 'create', 'current', 'enabled', 'getAuth', 'getAuthQuota', 'list', 'models', 'order', 'poolStatus', 'probeModels', 'remove', 'resetHealth', 'speedTest', 'sync', 'syncLocalAuth', 'update']),
|
|
118
|
+
channels: new Set(['applyToSettings', 'bestForRestore', 'catalogMetadata', 'create', 'current', 'enabled', 'getAuth', 'getAuthQuota', 'list', 'models', 'modelsFromConfig', 'order', 'poolStatus', 'probeModels', 'remove', 'resetHealth', 'speedTest', 'sync', 'syncLocalAuth', 'update']),
|
|
119
119
|
health: new Set(['healthCheck']),
|
|
120
120
|
hooks: new Set(['getHooks', 'saveHooks', 'testHooks']),
|
|
121
121
|
projects: new Set(['createProject', 'deleteProject', 'listProjects', 'saveProjectOrder']),
|
|
@@ -259,6 +259,14 @@
|
|
|
259
259
|
"request": "default",
|
|
260
260
|
"response": "default"
|
|
261
261
|
},
|
|
262
|
+
{
|
|
263
|
+
"method": "POST",
|
|
264
|
+
"path": "/channels/models",
|
|
265
|
+
"capability": "channels",
|
|
266
|
+
"operation": "modelsFromConfig",
|
|
267
|
+
"request": "default",
|
|
268
|
+
"response": "default"
|
|
269
|
+
},
|
|
262
270
|
{
|
|
263
271
|
"method": "POST",
|
|
264
272
|
"path": "/channels/:channelId/speed-test",
|
|
@@ -161,6 +161,18 @@ const PROVIDER_CAPABILITIES = {
|
|
|
161
161
|
}
|
|
162
162
|
};
|
|
163
163
|
|
|
164
|
+
function getProviderCapability(channelType, channel) {
|
|
165
|
+
if (channelType === 'claude' && channel?.providerApi === 'anthropic-messages') {
|
|
166
|
+
return {
|
|
167
|
+
supportsModelList: true,
|
|
168
|
+
modelListEndpoint: '/v1/models',
|
|
169
|
+
authHeader: 'x-api-key',
|
|
170
|
+
anthropicVersion: '2023-06-01'
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return PROVIDER_CAPABILITIES[channelType];
|
|
174
|
+
}
|
|
175
|
+
|
|
164
176
|
/**
|
|
165
177
|
* Auto-detect channel type based on baseUrl
|
|
166
178
|
* @param {Object} channel - Channel configuration
|
|
@@ -325,6 +337,9 @@ function buildRequestHeaders(channelType, channel) {
|
|
|
325
337
|
if (channelType === 'codex' || channelType === 'openai_compatible') {
|
|
326
338
|
headers['OpenAI-Beta'] = 'assistants=v2';
|
|
327
339
|
}
|
|
340
|
+
if (channelType === 'claude' && channel?.providerApi === 'anthropic-messages') {
|
|
341
|
+
headers['anthropic-version'] = '2023-06-01';
|
|
342
|
+
}
|
|
328
343
|
|
|
329
344
|
return headers;
|
|
330
345
|
}
|
|
@@ -693,6 +708,7 @@ function buildChannelCacheSignature(channel, payload = {}) {
|
|
|
693
708
|
name: channel?.name || '',
|
|
694
709
|
baseUrl: channel?.baseUrl || '',
|
|
695
710
|
apiKey: channel?.apiKey || '',
|
|
711
|
+
providerApi: channel?.providerApi || '',
|
|
696
712
|
gatewaySourceType: channel?.gatewaySourceType || '',
|
|
697
713
|
wireApi: channel?.wireApi || '',
|
|
698
714
|
model: channel?.model || '',
|
|
@@ -1011,7 +1027,7 @@ async function fetchModelsFromProvider(channel, channelType, options = {}) {
|
|
|
1011
1027
|
}
|
|
1012
1028
|
|
|
1013
1029
|
// Check if provider supports model listing
|
|
1014
|
-
const capability =
|
|
1030
|
+
const capability = getProviderCapability(channelType, channel);
|
|
1015
1031
|
if (!capability || !capability.supportsModelList) {
|
|
1016
1032
|
return {
|
|
1017
1033
|
models: [],
|
|
@@ -1050,8 +1066,11 @@ async function fetchModelsFromProvider(channel, channelType, options = {}) {
|
|
|
1050
1066
|
const headers = buildRequestHeaders(channelType, channel);
|
|
1051
1067
|
|
|
1052
1068
|
// Add authentication header
|
|
1053
|
-
if (capability.authHeader) {
|
|
1054
|
-
if (
|
|
1069
|
+
if (capability.authHeader && channel.apiKey) {
|
|
1070
|
+
if (capability.authHeader.toLowerCase() === 'x-api-key') {
|
|
1071
|
+
headers[capability.authHeader] = channel.apiKey;
|
|
1072
|
+
if (capability.anthropicVersion) headers['anthropic-version'] = capability.anthropicVersion;
|
|
1073
|
+
} else {
|
|
1055
1074
|
headers['Authorization'] = `Bearer ${channel.apiKey}`;
|
|
1056
1075
|
}
|
|
1057
1076
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as t,K as n,O as i,S as o,V as u,W as d,Y as r,Z as c,_t as v,b as p,et as m,g,ht as f,m as y,mt as h,r as b,st as k,w,x as _}from"./vue-vendor-BqZbbXHA.js";import{t as C}from"./client-oU6RT-6I.js";import{c as j,i as x,t as M}from"./platforms-Cq6XDXfy.js";import{$ as z,At as P,Nt as O,O as U,R as A,S as N,V as L,_ as I,f as S,g as $,j as F,m as D}from"./icons-B-AzZoeE.js";import{t as R}from"./use-message-DBsCm7FJ.js";import{l as B}from"./light-C2X7hegj.js";import{a as q,c as E,i as T,o as H,r as J,s as V,t as G}from"./AssetPathField-pfN6L814.js";import{n as Y,t as W}from"./useResponsiveDrawer-CTQPBATk.js";import{t as X}from"./DrawerContent-ChXgZ1Xm.js";import{$ as Z,Et as K,I as Q,L as ee,M as ae,P as le,T as se,X as te,Y as ne,Z as ie,ct as oe,ft as ue,j as de,k as re,st as ce,ut as ve,w as pe}from"./index-BKpL4XdU.js";import{t as me}from"./MarkdownEditor-buNC2iDj.js";import{i as ge,n as fe,r as ye,t as he}from"./dsh-agent-presets-DjJRVMT6.js";async function be(e=null,a="claude",l={}){const s=pe("agents",a,l.scope||"",e||"");return se(s,l=>C.get("/agents",{params:e?{projectPath:e,platform:a}:{platform:a},signal:l}).then(e=>e.data),"agents",`agents:${a}`)}var ke={class:"asset-card-main"},we={class:"asset-card-top"},_e={class:"asset-card-title-stack"},Ce={class:"asset-card-title-row"},je={class:"asset-name"},xe={class:"asset-tags"},Me={key:0,class:"asset-description"},ze={class:"asset-meta"},Pe={key:0,class:"asset-meta-item"},Oe={key:1,class:"asset-meta-item"},Ue={class:"asset-card-actions"},Ae={class:"asset-platform-strip"},Ne=["onClick"],Le=l({__name:"AgentCard",props:{agent:{type:Object,required:!0},deleting:{type:Boolean,default:!1},registryInfo:{type:Object,default:null},toggling:{type:Boolean,default:!1}},emits:["click","edit","delete","toggle-enabled","toggle-platform"],setup(l,{emit:u}){const c=l,b=u,{byCapability:k}=K(),C=p(()=>k("agents"));return(u,p)=>{return d(),w("div",{class:f(["agent-card asset-card",{"is-project":"project"===l.agent.scope,"is-managed":l.registryInfo}]),onClick:p[4]||(p[4]=e=>b("click",l.agent))},[_("div",ke,[_("div",we,[_("div",_e,[_("div",Ce,[_("span",{class:f(["asset-status-dot",{active:l.registryInfo?.enabled||"project"===l.agent.scope}])},null,2),_("span",je,v(l.agent.name),1)]),_("div",xe,[i(h(ve),{type:"user"===l.agent.scope?"info":"success",size:"tiny",bordered:!1},{default:m(()=>[t(v("user"===l.agent.scope?"用户级":"项目级"),1)]),_:1},8,["type"]),l.registryInfo?(d(),o(h(ve),{key:0,type:"success",size:"tiny",bordered:!1},{default:m(()=>[...p[5]||(p[5]=[t("托管",-1)])]),_:1})):s("",!0),l.agent.model?(d(),o(h(ve),{key:1,type:"warning",size:"tiny",bordered:!1},{default:m(()=>[t(v(l.agent.model),1)]),_:1})):s("",!0)])])]),l.agent.description?(d(),w("div",Me,v((j=l.agent.description,j?j.length>80?j.slice(0,80)+"...":j:"")),1)):s("",!0),_("div",ze,[l.agent.tools?(d(),w("span",Pe,[i(h(e),{size:"12"},{default:m(()=>[i(h(L))]),_:1}),t(" "+v((k=l.agent.tools,k?k.length>30?k.slice(0,30)+"...":k:"")),1)])):s("",!0),l.agent.permissionMode?(d(),w("span",Oe,[i(h(e),{size:"12"},{default:m(()=>[i(h(S))]),_:1}),t(" "+v(l.agent.permissionMode),1)])):s("",!0)])]),_("div",Ue,[l.registryInfo?(d(),w(g,{key:0},[i(h(ne),{trigger:"hover"},{trigger:m(()=>[i(h(de),{value:l.registryInfo.enabled,size:"small",loading:l.toggling,"onUpdate:value":p[0]||(p[0]=e=>b("toggle-enabled",l.agent,e)),onClick:p[1]||(p[1]=y(()=>{},["stop"]))},null,8,["value","loading"])]),default:m(()=>[t(" "+v(l.registryInfo.enabled?"已启用":"已禁用"),1)]),_:1}),_("div",Ae,[(d(!0),w(g,null,n(C.value,a=>(d(),o(h(ne),{key:a.key,trigger:"hover"},{trigger:m(()=>[_("span",{class:f(["asset-platform-icon",{active:l.registryInfo.platforms?.[a.key]}]),onClick:y(e=>b("toggle-platform",l.agent,a.key,!l.registryInfo.platforms?.[a.key]),["stop"])},[i(h(e),{size:"14"},{default:m(()=>[(d(),o(r(a.icon)))]),_:2},1024)],10,Ne)]),default:m(()=>[t(" "+v(a.label||a.title||a.key)+" "+v(l.registryInfo.platforms?.[a.key]?"已启用":"未启用"),1)]),_:2},1024))),128))])],64)):(d(),w(g,{key:1},[i(h(a),{size:"tiny",tertiary:"",onClick:p[2]||(p[2]=y(e=>b("edit",l.agent),["stop"]))},{default:m(()=>[...p[6]||(p[6]=[t(" 编辑 ",-1)])]),_:1}),i(h(a),{size:"tiny",tertiary:"",type:"error",loading:c.deleting,onClick:p[3]||(p[3]=y(e=>b("delete",l.agent),["stop"]))},{default:m(()=>[...p[7]||(p[7]=[t(" 删除 ",-1)])]),_:1},8,["loading"])],64))])],2);var k,j}}},[["__scopeId","data-v-044e4192"]]),Ie={class:"asset-detail-drawer-header"},Se={class:"asset-detail-identity"},$e={class:"asset-detail-heading"},Fe={class:"asset-detail-name"},De={class:"asset-detail-meta"},Re={key:2,class:"asset-detail-subtle"},Be={class:"asset-detail-body"},qe={key:0,class:"asset-detail-loading"},Ee={class:"asset-detail-container"},Te={class:"asset-detail-info-section"},He={class:"asset-detail-description"},Je={class:"asset-detail-info-section"},Ve={class:"asset-detail-list"},Ge={class:"asset-detail-row"},Ye={class:"asset-detail-value"},We={key:0,class:"asset-detail-row"},Xe={class:"asset-detail-value mono"},Ze={key:1,class:"asset-detail-row"},Ke={class:"asset-detail-value mono"},Qe={key:2,class:"asset-detail-row"},ea={class:"asset-detail-value"},aa={key:3,class:"asset-detail-row"},la={class:"asset-detail-value"},sa={key:4,class:"asset-detail-row"},ta={class:"asset-detail-value"},na={key:1,class:"asset-detail-info-section"},ia={class:"asset-detail-box"},oa={class:"asset-detail-code"},ua={key:2,class:"asset-detail-empty"},da={__name:"AgentDetailDrawer",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},platform:{type:String,default:"claude"},loading:{type:Boolean,default:!1}},emits:["update:visible"],setup(a,{emit:l}){const{drawerWidth:n}=W(600),u=a,r=l,c=p({get:()=>u.visible,set:e=>r("update:visible",e)}),g={height:"100%",minHeight:0,overflow:"hidden"},f=p(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode"}[u.platform]||"")),y=p(()=>u.agent?.fileName?"codex"===u.platform?`[agents.${u.agent.fileName}]`:`${u.agent.fileName}.md`:""),b=p(()=>u.agent?"codex"===u.platform?u.agent.fullContent||"(无内容)":u.agent.systemPrompt||"(无内容)":"(无内容)"),k=p(()=>u.agent?.fullPath||u.agent?.path||"");function C(e){return"project"===e?"项目级":"用户级"}return(l,u)=>(d(),o(h(Y),{show:c.value,"onUpdate:show":u[0]||(u[0]=e=>c.value=e),width:h(n),placement:"right","show-mask":!0},{default:m(()=>[i(h(X),{closable:"","native-scrollbar":!1,"body-content-style":g},{header:m(()=>[_("div",Ie,[_("div",Se,[i(h(e),{size:20,class:"asset-detail-icon"},{default:m(()=>[i(h(U))]),_:1}),_("div",$e,[_("span",Fe,v(a.agent?.name||"代理详情"),1),_("div",De,[a.agent?.scope?(d(),o(h(ve),{key:0,type:"project"===a.agent.scope?"success":"info",size:"tiny",bordered:!1},{default:m(()=>[t(v(C(a.agent.scope)),1)]),_:1},8,["type"])):s("",!0),a.agent?.model?(d(),o(h(ve),{key:1,type:"warning",size:"tiny",bordered:!1},{default:m(()=>[t(v(a.agent.model),1)]),_:1})):s("",!0),f.value?(d(),w("span",Re,v(f.value),1)):s("",!0)])])])])]),default:m(()=>[_("div",Be,[a.loading&&!a.agent?(d(),w("div",qe,[i(h(ae),{size:"medium"}),u[1]||(u[1]=_("p",null,"加载代理详情中...",-1))])):a.agent?(d(),o(h(V),{key:1,type:"line",animated:"",class:"asset-detail-tabs"},{default:m(()=>[i(h(E),{name:"overview",tab:"概览"},{default:m(()=>[_("div",Ee,["codex"===a.platform&&a.agent.configReadError?(d(),o(h(oe),{key:0,type:"warning",bordered:!1},{default:m(()=>[t(v(a.agent.configReadError),1)]),_:1})):s("",!0),_("div",Te,[u[2]||(u[2]=_("h3",{class:"asset-detail-section-title"},"描述",-1)),_("p",He,v(a.agent.description||"暂无描述"),1)]),_("div",Je,[u[9]||(u[9]=_("h3",{class:"asset-detail-section-title"},"基础信息",-1)),_("div",Ve,[_("div",Ge,[u[3]||(u[3]=_("span",{class:"asset-detail-label"},"作用域",-1)),_("span",Ye,v(C(a.agent.scope)),1)]),a.agent.fileName?(d(),w("div",We,[u[4]||(u[4]=_("span",{class:"asset-detail-label"},"文件名",-1)),_("span",Xe,v(y.value),1)])):s("",!0),"codex"===a.platform&&a.agent.configFile?(d(),w("div",Ze,[u[5]||(u[5]=_("span",{class:"asset-detail-label"},"config_file",-1)),_("span",Ke,v(a.agent.configFile),1)])):s("",!0),a.agent.model?(d(),w("div",Qe,[u[6]||(u[6]=_("span",{class:"asset-detail-label"},"模型",-1)),_("span",ea,v(a.agent.model),1)])):s("",!0),a.agent.permissionMode?(d(),w("div",aa,[u[7]||(u[7]=_("span",{class:"asset-detail-label"},"权限模式",-1)),_("span",la,v(a.agent.permissionMode),1)])):s("",!0),a.agent.skills?(d(),w("div",sa,[u[8]||(u[8]=_("span",{class:"asset-detail-label"},"技能",-1)),_("span",ta,v(a.agent.skills),1)])):s("",!0)])]),a.agent.tools?(d(),w("div",na,[u[10]||(u[10]=_("h3",{class:"asset-detail-section-title"},"可用工具",-1)),_("div",ia,[i(h(e),{size:16},{default:m(()=>[i(h(L))]),_:1}),_("code",null,v(a.agent.tools),1)])])):s("",!0),i(G,{path:k.value},null,8,["path"])])]),_:1}),i(h(E),{name:"content",tab:"codex"===a.platform?"配置":"提示词"},{default:m(()=>[_("pre",oa,v(b.value),1)]),_:1},8,["tab"])]),_:1})):(d(),w("div",ua,[i(h(e),{size:44,class:"asset-detail-empty-icon"},{default:m(()=>[i(h(z))]),_:1}),u[11]||(u[11]=_("p",null,"未选择代理",-1))]))])]),_:1})]),_:1},8,["show","width"]))}},ra={class:"config-edit-header"},ca={class:"config-edit-identity"},va={class:"config-edit-icon"},pa={class:"config-edit-title-stack"},ma={class:"config-edit-kicker"},ga={class:"config-edit-title"},fa={class:"config-edit-badges"},ya={class:"config-edit-section"},ha={class:"section-heading"},ba={class:"field-grid"},ka={class:"scope-option"},wa={class:"scope-path"},_a={class:"scope-option"},Ca={class:"scope-path"},ja={key:0,class:"platform-note"},xa={class:"config-edit-section"},Ma={class:"section-heading"},za={key:1,class:"empty-config-box"},Pa={key:0,class:"field-grid"},Oa={class:"field-grid"},Ua={key:0,class:"config-edit-section content-section"},Aa={class:"section-heading"},Na={class:"modal-footer"},La=l({__name:"AgentFormModal",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},projectPath:{type:String,default:null},platform:{type:String,default:"claude"}},emits:["update:visible","saved"],setup(l,{emit:n}){const u=l,r=n,y=p({get:()=>u.visible,set:e=>r("update:visible",e)}),b=p(()=>!!u.agent),j=p(()=>"codex"===u.platform),x=p(()=>"claude"===u.platform),M=p(()=>"omp"===u.platform),P=p(()=>["codex","opencode","omp"].includes(u.platform)),O=p(()=>b.value?"编辑代理":"创建代理"),N=p(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode",omp:"OMP"}[u.platform]||"Claude Code")),L=p(()=>"codex"===u.platform?"~/.codex/config.toml":"opencode"===u.platform?"~/.config/opencode/agents/":"gemini"===u.platform?"~/.gemini/agents/":"omp"===u.platform?"~/.omp/agent/agents/":"~/.claude/agents/"),S=p(()=>"opencode"===u.platform?".opencode/agents/":"gemini"===u.platform?".gemini/agents/":"omp"===u.platform?".omp/agents/":".claude/agents/"),$=p(()=>"project"===Y.value.scope?"项目级":"用户级"),R=p(()=>G.find(e=>e.value===Y.value.configMode)?.label||"配置"),q=k(null),E=k(!1),T={maxHeight:"calc(92vh - 134px)",overflowY:"auto",paddingBottom:"18px"},H=[{label:"Sonnet",value:"sonnet"},{label:"Opus",value:"opus"},{label:"Haiku",value:"haiku"},{label:"继承 (inherit)",value:"inherit"}],J=[{label:"默认 (default)",value:"default"},{label:"宽松 (permissive)",value:"permissive"},{label:"严格 (strict)",value:"strict"}],V=[{label:"Off",value:"off"},{label:"Minimal",value:"minimal"},{label:"Low",value:"low"},{label:"Medium",value:"medium"},{label:"High",value:"high"},{label:"XHigh",value:"xhigh"},{label:"Max",value:"max"}],G=[{label:"仅描述",value:"none"},{label:"托管 TOML",value:"managed"},{label:"自定义路径",value:"custom"}],Y=k({fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}),W=p(()=>{const e={fileName:{required:!0,message:"请输入文件名",trigger:"blur"},scope:{required:!0,message:"请选择作用域",trigger:"change"},description:{required:!0,message:"请输入代理描述",trigger:"blur"}};return x.value&&(e.name={required:!0,message:"请输入代理名称",trigger:"blur"}),j.value&&(e.configMode={required:!0,message:"请选择配置模式",trigger:"change"},e.configFile={required:"custom"===Y.value.configMode,message:"请输入自定义配置文件路径",trigger:"blur"}),e});function X(){Y.value={fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}}function K(){y.value=!1,X()}async function ae(){try{await(q.value?.validate())}catch{return}E.value=!0;try{const e={...Y.value,projectPath:u.projectPath};j.value?("custom"===Y.value.configMode?e.configFile=Y.value.configFile:delete e.configFile,"managed"===Y.value.configMode||"custom"===Y.value.configMode?e.configContent=Y.value.configContent||"":delete e.configContent):(delete e.configMode,delete e.configFile,delete e.configContent),b.value?(await async function(e,a,l,s="claude"){return(await C.put(`/agents/${a}/${e}`,{...l,platform:s})).data}(Y.value.fileName,Y.value.scope,e,u.platform),re.success("代理更新成功")):(await async function(e,a="claude"){return(await C.post("/agents",{...e,platform:a})).data}(e,u.platform),re.success("代理创建成功")),r("saved"),y.value=!1,X()}catch(e){re.error("操作失败: "+e.message)}finally{E.value=!1}}return c(()=>u.agent,e=>{if(e){const a=e.configMode||(e.configFile?String(e.configFile).includes("/.codex/agents/")?"managed":"custom":"none");Y.value={fileName:e.fileName||"",scope:e.scope||"user",name:e.name||"",description:e.description||"",configMode:a,configFile:e.configFile||"",configContent:e.fullContent||"",tools:e.tools||"",model:e.model||"",thinkingLevel:e.thinkingLevel||"",spawns:e.spawns||"",permissionMode:e.permissionMode||"",skills:e.skills||"",systemPrompt:e.systemPrompt||""}}else X()},{immediate:!0}),c(()=>u.platform,e=>{"codex"===e&&(Y.value.scope="user",Y.value.configMode||(Y.value.configMode="none"))},{immediate:!0}),(l,n)=>(d(),o(h(B),{show:y.value,"onUpdate:show":n[15]||(n[15]=e=>y.value=e),preset:"card",title:O.value,style:{width:"min(940px, 96vw)","max-height":"92vh"},"content-style":T,"mask-closable":!1,class:"config-edit-modal"},{footer:m(()=>[_("div",Na,[i(h(a),{onClick:K},{default:m(()=>[...n[23]||(n[23]=[t("取消",-1)])]),_:1}),i(h(a),{type:"primary",loading:E.value,onClick:ae},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(I))]),_:1})]),default:m(()=>[t(" "+v(b.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:m(()=>[_("div",ra,[_("div",ca,[_("span",va,[i(h(e),{size:22},{default:m(()=>[i(h(U))]),_:1})]),_("div",pa,[_("span",ma,v(N.value),1),_("span",ga,v(b.value?Y.value.fileName||"编辑代理":"创建新代理"),1)])]),_("div",fa,[i(h(ve),{size:"small",bordered:!1,type:"info"},{default:m(()=>[t(v($.value),1)]),_:1}),j.value?(d(),o(h(ve),{key:0,size:"small",bordered:!1,type:"success"},{default:m(()=>[...n[16]||(n[16]=[t("Codex 用户级",-1)])]),_:1})):s("",!0),j.value&&"none"!==Y.value.configMode?(d(),o(h(ve),{key:1,size:"small",bordered:!1,type:"warning"},{default:m(()=>[t(v(R.value),1)]),_:1})):s("",!0)])]),i(h(ee),{ref_key:"formRef",ref:q,model:Y.value,rules:W.value,"label-placement":"top","require-mark-placement":"right-hanging",class:"config-edit-form"},{default:m(()=>[_("div",{class:f(["config-edit-grid",{"is-codex":j.value}])},[_("section",ya,[_("div",ha,[i(h(e),{size:16},{default:m(()=>[i(h(F))]),_:1}),n[17]||(n[17]=_("span",null,"基础信息",-1))]),_("div",ba,[i(h(Q),{label:"文件名",path:"fileName"},{default:m(()=>[i(h(ce),{value:Y.value.fileName,"onUpdate:value":n[0]||(n[0]=e=>Y.value.fileName=e),disabled:b.value,placeholder:"code-reviewer"},null,8,["value","disabled"])]),_:1}),x.value?(d(),o(h(Q),{key:0,label:"显示名称",path:"name"},{default:m(()=>[i(h(ce),{value:Y.value.name,"onUpdate:value":n[1]||(n[1]=e=>Y.value.name=e),placeholder:"代理的显示名称"},null,8,["value"])]),_:1})):s("",!0)]),i(h(Q),{label:"作用域",path:"scope"},{default:m(()=>[i(h(te),{value:Y.value.scope,"onUpdate:value":n[2]||(n[2]=e=>Y.value.scope=e),disabled:b.value,class:f(["scope-picker",{"single-option":j.value}])},{default:m(()=>[i(h(ie),{value:"user"},{default:m(()=>[_("span",ka,[n[18]||(n[18]=_("span",{class:"scope-title"},"用户级",-1)),_("span",wa,v(L.value),1)])]),_:1}),j.value?s("",!0):(d(),o(h(ie),{key:0,value:"project"},{default:m(()=>[_("span",_a,[n[19]||(n[19]=_("span",{class:"scope-title"},"项目级",-1)),_("span",Ca,v(S.value),1)])]),_:1}))]),_:1},8,["value","disabled","class"])]),_:1}),i(h(Q),{label:"描述",path:"description"},{default:m(()=>[i(h(ce),{value:Y.value.description,"onUpdate:value":n[3]||(n[3]=e=>Y.value.description=e),type:"textarea",autosize:{minRows:3,maxRows:5},placeholder:"一句话说明这个代理什么时候该被调用"},null,8,["value"])]),_:1}),j.value?(d(),w("div",ja,[i(h(e),{size:16},{default:m(()=>[i(h(A))]),_:1}),n[20]||(n[20]=_("span",null,[t("Codex agents 写入用户级配置。描述会进入 "),_("code",null,"~/.codex/config.toml"),t(",TOML 配置可托管到 "),_("code",null,"~/.codex/agents/"),t("。")],-1))])):s("",!0)]),_("section",xa,[_("div",Ma,[i(h(e),{size:16},{default:m(()=>[i(h(D))]),_:1}),_("span",null,v(j.value?"运行配置":"模型与权限"),1)]),j.value?(d(),w(g,{key:0},[i(h(Q),{label:"配置模式",path:"configMode"},{default:m(()=>[i(h(Z),{value:Y.value.configMode,"onUpdate:value":n[4]||(n[4]=e=>Y.value.configMode=e),options:G,placeholder:"选择配置模式"},null,8,["value"])]),_:1}),"custom"===Y.value.configMode?(d(),o(h(Q),{key:0,label:"配置文件路径",path:"configFile"},{default:m(()=>[i(h(ce),{value:Y.value.configFile,"onUpdate:value":n[5]||(n[5]=e=>Y.value.configFile=e),placeholder:"~/.omx/agents/my-agent.toml"},null,8,["value"])]),_:1})):s("",!0),"none"===Y.value.configMode?(d(),w("div",za,[i(h(e),{size:18},{default:m(()=>[i(h(z))]),_:1}),n[21]||(n[21]=_("span",null,"仅保存代理描述,不额外写入模型或工具配置。",-1))])):(d(),o(h(Q),{key:2,label:"Agent Config (TOML)",path:"configContent",class:"editor-form-item"},{default:m(()=>[i(h(ce),{value:Y.value.configContent,"onUpdate:value":n[6]||(n[6]=e=>Y.value.configContent=e),type:"textarea",autosize:{minRows:14,maxRows:22},class:"toml-editor",placeholder:'model = "gpt-5.4"'},null,8,["value"])]),_:1}))],64)):(d(),w(g,{key:1},[i(h(Q),{label:"可用工具",path:"tools"},{default:m(()=>[i(h(ce),{value:Y.value.tools,"onUpdate:value":n[7]||(n[7]=e=>Y.value.tools=e),placeholder:M.value?"read, edit, bash(逗号分隔)":"Read, Edit, Bash"},null,8,["value","placeholder"])]),_:1}),i(h(Q),{label:"模型",path:"model"},{default:m(()=>[P.value?(d(),o(h(ce),{key:0,value:Y.value.model,"onUpdate:value":n[8]||(n[8]=e=>Y.value.model=e),placeholder:M.value?"@default、@review 或 provider/model;多个候选用逗号分隔":"gpt-5, claude-sonnet-4, openrouter/model"},null,8,["value","placeholder"])):(d(),o(h(Z),{key:1,value:Y.value.model,"onUpdate:value":n[9]||(n[9]=e=>Y.value.model=e),options:H,placeholder:"选择模型",clearable:""},null,8,["value"]))]),_:1}),M.value?(d(),w("div",Pa,[i(h(Q),{label:"思考级别",path:"thinkingLevel"},{default:m(()=>[i(h(Z),{value:Y.value.thinkingLevel,"onUpdate:value":n[10]||(n[10]=e=>Y.value.thinkingLevel=e),options:V,placeholder:"使用模型默认级别",clearable:""},null,8,["value"])]),_:1}),i(h(Q),{label:"可调用的子 Agent",path:"spawns"},{default:m(()=>[i(h(ce),{value:Y.value.spawns,"onUpdate:value":n[11]||(n[11]=e=>Y.value.spawns=e),placeholder:"* 或 reviewer, scout"},null,8,["value"])]),_:1})])):s("",!0),_("div",Oa,["opencode"===u.platform||M.value?s("",!0):(d(),o(h(Q),{key:0,label:"权限模式",path:"permissionMode"},{default:m(()=>[i(h(Z),{value:Y.value.permissionMode,"onUpdate:value":n[12]||(n[12]=e=>Y.value.permissionMode=e),options:J,placeholder:"选择权限模式",clearable:""},null,8,["value"])]),_:1})),"opencode"===u.platform||M.value?s("",!0):(d(),o(h(Q),{key:1,label:"技能",path:"skills"},{default:m(()=>[i(h(ce),{value:Y.value.skills,"onUpdate:value":n[13]||(n[13]=e=>Y.value.skills=e),placeholder:"自动加载的技能,逗号分隔"},null,8,["value"])]),_:1}))])],64))]),j.value?s("",!0):(d(),w("section",Ua,[_("div",Aa,[i(h(e),{size:16},{default:m(()=>[i(h(z))]),_:1}),n[22]||(n[22]=_("span",null,"系统提示词",-1))]),i(h(Q),{path:"systemPrompt","show-label":!1,class:"editor-form-item"},{default:m(()=>[i(me,{modelValue:Y.value.systemPrompt,"onUpdate:modelValue":n[14]||(n[14]=e=>Y.value.systemPrompt=e),rows:10,"min-height":240,placeholder:"定义代理的行为、边界和输出要求","default-editing":!b.value},null,8,["modelValue","default-editing"])]),_:1})]))],2)]),_:1},8,["model","rules"])]),_:1},8,["show","title"]))}},[["__scopeId","data-v-ea89272f"]]),Ia={key:0,class:"asset-panel-header"},Sa={class:"asset-title-group"},$a={class:"asset-heading"},Fa={class:"asset-title-row"},Da={class:"asset-platform-pill"},Ra={key:0,class:"asset-action-row"},Ba={key:1,class:"asset-drawer-toolbar"},qa={key:0,class:"asset-action-row"},Ea={key:2,class:"omp-model-roles"},Ta={class:"omp-model-roles-toolbar"},Ha={class:"omp-model-roles-copy"},Ja={key:0,class:"omp-model-roles-stale"},Va={key:1,class:"omp-model-roles-error"},Ga={class:"asset-summary"},Ya={class:"asset-summary-item"},Wa={class:"asset-summary-value"},Xa={class:"asset-summary-item"},Za={class:"asset-summary-value"},Ka={class:"asset-summary-item"},Qa={class:"asset-summary-value"},el={class:"asset-summary-item"},al={class:"asset-summary-value"},ll={class:"asset-filter-bar"},sl={class:"asset-panel-content"},tl={key:0,class:"asset-empty"},nl={key:1,class:"asset-list"},il={class:"asset-footer"},ol=l({__name:"AgentsPanel",props:{hideBack:{type:Boolean,default:!1},inDrawer:{type:Boolean,default:!1},projectPath:{type:String,default:null},platform:{type:String,default:""}},emits:["back","updated"],setup(l,{emit:r}){const y=l,z=r,L=M(),I=b(),S=k([]),F=k(!1),D=k(""),R=k("all"),B=k(!1),E=k(!1),V=k(null),G=k(!1),Y=k(null),W=k({}),X=k({}),Q=k({}),ee=k([]),le=k(""),te=k([]),ne=k([]),ie=p(()=>new Set(te.value.map(e=>e.value))),oe=k(!1),de=k(!1),ve=k(""),me=p(()=>JSON.stringify(_e())!==le.value);let ge=0;const{byCapability:fe}=K(),ye=p(()=>fe("agents").map(e=>e.key)),he=p(()=>ye.value.includes(xe.value)),ke=["default","smol","slow","plan","commit","vision","designer","task","advisor","tiny"],we=["minimal","low","medium","high","xhigh","max"].map(e=>({label:e,value:e}));function _e(){return Object.fromEntries(ee.value.map(e=>[e.key,{model:e.model||"",thinkingLevel:e.thinkingLevel||""}]))}function Ce(e={}){const a=e.roles&&"object"==typeof e.roles?e.roles:{};ee.value=ke.map(e=>({key:e,model:"string"==typeof a[e]?.model?a[e].model:"",thinkingLevel:"string"==typeof a[e]?.thinkingLevel?a[e].thinkingLevel:""})),le.value=JSON.stringify(_e()),te.value=(Array.isArray(e.modelOptions)?e.modelOptions:[]).filter(e=>"string"==typeof e&&e.trim()).map(e=>({label:e,value:e})),ne.value=e.unavailableRoles&&"object"==typeof e.unavailableRoles?Object.keys(e.unavailableRoles).filter(a=>!0===e.unavailableRoles[a]):[]}function je(e,a){return e?.data?.error||e?.response?.data?.error||e?.message||a}const xe=p(()=>String(y.platform||x(I)||"").trim().toLowerCase()),Me=p(()=>"opencode"===xe.value?"使用 @agent 或 Task 在 OpenCode 中调用":"omp"===xe.value?"OMP Agent 由 task 工具按名称调用;模型可在 Agent 配置中单独指定":"gemini"===xe.value?"使用 @agent 调用 Gemini 自定义代理":"使用 Task tool 调用自定义代理"),ze=p(()=>{const e=L.get(xe.value)||j(xe.value);return e.label||e.title||"Claude Code"}),Pe=[{label:"全部",value:"all"},{label:"用户级",value:"user"},{label:"项目级",value:"project"},{label:"已托管",value:"managed"}],Oe=p(()=>S.value.filter(e=>"user"===e.scope).length),Ue=p(()=>S.value.filter(e=>"project"===e.scope).length),Ae=p(()=>Object.keys(X.value).length);function Ne(e){if(!e)return"";const a="string"==typeof e.scope&&e.scope.trim()?e.scope.trim():"unknown",l="string"==typeof e.path&&e.path.trim()?e.path.trim():"",s="string"==typeof e.fileName&&e.fileName.trim()?e.fileName.trim():"";return`${a}:${l||s}`}function Ie(e){if(!e)return"";const a=[];if("string"==typeof e.path&&e.path.trim()&&a.push(e.path.trim()),"string"==typeof e.fileName&&e.fileName.trim()){const l=e.fileName.trim();a.push(`${l}.md`,l)}"string"==typeof e.name&&e.name.trim()&&a.push(e.name.trim());for(const l of a)if(X.value[l])return l;return a[0]||""}const Se=p(()=>{let e=S.value;if("user"===R.value?e=e.filter(e=>"user"===e.scope):"project"===R.value?e=e.filter(e=>"project"===e.scope):"managed"===R.value&&(e=e.filter(e=>X.value[Ie(e)])),D.value.trim()){const a=D.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a)||e.fileName?.toLowerCase().includes(a))}return e}),$e=p(()=>D.value?"没有匹配的代理":"user"===R.value?"暂无用户级代理":"project"===R.value?"暂无项目级代理":"managed"===R.value?"暂无托管的代理":he.value?"暂无自定义代理":`${ze.value} 暂未提供 Agents 能力`);async function Fe(){if(!he.value)return S.value=[],X.value={},void(F.value=!1);F.value=!0;try{const[e,a]=await Promise.all([be(y.projectPath,xe.value),J("agents",{platform:xe.value,projectPath:y.projectPath})]);if(e.success&&(S.value=e.agents||[]),a.success){X.value={};for(const[e,l]of Object.entries(a.items||{}))X.value[e]=l}}catch(e){re.error("加载代理列表失败: "+e.message)}finally{F.value=!1}}async function De(e,a){const l=Ie(e);if(l){Q.value[l]=!0;try{(await q("agents",l,a)).success&&(re.success(a?"已启用":"已禁用"),await Fe())}catch(s){re.error("切换失败: "+s.message)}finally{delete Q.value[l]}}else re.error("未找到代理对应的托管配置键")}async function Re(e,a,l){const s=Ie(e);if(s){Q.value[s]=!0;try{(await H("agents",s,a,l)).success&&(re.success(`${a} ${l?"已启用":"已禁用"}`),await Fe())}catch(t){re.error("切换失败: "+t.message)}finally{delete Q.value[s]}}else re.error("未找到代理对应的托管配置键")}async function Be(){F.value=!0;try{const e=await T("agents");e?.success||re.warning(e?.message||"同步失败,已继续刷新列表")}catch(e){re.warning("同步失败,已继续刷新列表: "+e.message)}await Fe()}async function qe(){if("omp"===xe.value){oe.value=!0,ve.value="";try{const{data:e}=await C.get("/settings/omp-model-roles");Ce(e)}catch(e){ve.value=`加载 OMP 角色配置失败:${je(e,"未知错误")}`}finally{oe.value=!1}}}async function Ee(){if(!(oe.value||de.value||ve.value)){de.value=!0;try{const{data:e}=await C.put("/settings/omp-model-roles",{roles:_e()});Ce(e),re.success("OMP 模型角色配置已保存")}catch(e){re.error(`保存 OMP 角色配置失败:${je(e,"未知错误")}`)}finally{de.value=!1}}}function Te(){Y.value=null,B.value=!0}function He(e){B.value=e,e||(Y.value=null)}function Je(e){Ge(e,!0)}async function Ve(e){const a=Ne(e);W.value[a]=!0;try{(await async function(e,a,l=null,s="claude"){const t={};return s&&(t.platform=s),l&&(t.projectPath=l),(await C.delete(`/agents/${a}/${e}`,{params:t})).data}(e.fileName,e.scope,y.projectPath,xe.value)).success&&(re.success("代理已删除"),await Fe(),z("updated"))}catch(l){re.error("删除失败: "+l.message)}finally{delete W.value[a]}}async function Ge(e,a=!1){if(!e)return;const l=++ge;G.value=!0,a||(V.value=null,E.value=!0);try{const s=await async function(e,a,l=null,s="claude"){const t={};s&&(t.platform=s),l&&(t.projectPath=l);const n=pe(`agent-detail:${e}`,s,a||"",l||"");return se(n,l=>C.get(`/agents/${a}/${e}`,{params:t,signal:l}).then(e=>e.data),"agent-detail",`agent-detail:${s}`)}(e.fileName,e.scope,y.projectPath,xe.value);if(l!==ge)return;const t=s?.agent||e;a?(Y.value=t,B.value=!0):V.value=t}catch(s){if(l!==ge)return;re.error("加载代理详情失败: "+s.message),a?(Y.value=e,B.value=!0):V.value=e}finally{l===ge&&(G.value=!1)}}function Ye(e){Ge(e,!1)}function We(){Y.value=null,Fe(),z("updated")}function Xe(){z("back")}return u(()=>{Fe(),qe()}),c(xe,()=>{ge+=1,G.value=!1,V.value=null,Fe(),qe()}),(u,r)=>(d(),w("div",{class:f(["agents-panel asset-panel",{"in-drawer":y.inDrawer}])},[y.inDrawer?s("",!0):(d(),w("div",Ia,[_("div",Sa,[y.hideBack?s("",!0):(d(),o(h(a),{key:0,text:"",onClick:Xe,class:"back-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(P))]),_:1})]),_:1})),_("div",$a,[_("div",Fa,[r[3]||(r[3]=_("span",{class:"asset-title"},"代理管理",-1)),_("span",Da,v(ze.value),1)]),r[4]||(r[4]=_("div",{class:"asset-subtitle"},"维护自定义代理、工具权限和平台启用状态",-1))])]),he.value?(d(),w("div",Ra,[i(h(a),{text:"",onClick:Te,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(O))]),_:1})]),default:m(()=>[r[5]||(r[5]=t(" 创建 ",-1))]),_:1}),i(h(a),{text:"",onClick:Be,loading:F.value,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(N))]),_:1})]),default:m(()=>[r[6]||(r[6]=t(" 刷新 ",-1))]),_:1},8,["loading"])])):s("",!0)])),y.inDrawer?(d(),w("div",Ba,[he.value?(d(),w("div",qa,[i(h(a),{text:"",onClick:Te,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(O))]),_:1})]),default:m(()=>[r[7]||(r[7]=t(" 创建 ",-1))]),_:1}),i(h(a),{text:"",onClick:Be,loading:F.value,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(N))]),_:1})]),default:m(()=>[r[8]||(r[8]=t(" 刷新 ",-1))]),_:1},8,["loading"])])):s("",!0)])):s("",!0),"omp"===xe.value?(d(),w("div",Ea,[_("div",Ta,[_("div",Ha,[r[10]||(r[10]=_("strong",null,"OMP 模型角色",-1)),r[11]||(r[11]=_("span",null,"候选模型只取当前启用渠道。原生 OAuth 渠道读取允许模型列表(未设置时读取已声明模型),并使用 OAuth provider ID 作为前缀;OAuth Auth Gateway 使用该托管渠道的模型配置。思考强度会写入选择器后缀,例如 :high。",-1)),ne.value.length?(d(),w("span",Ja," 以下角色当前指向未启用渠道模型:"+v(ne.value.join("、"))+"。请切换到已启用渠道中的模型,或清空对应角色。 ",1)):s("",!0),ve.value?(d(),w("div",Va,[_("span",null,v(ve.value),1),i(h(a),{text:"",size:"tiny",disabled:oe.value,onClick:qe},{default:m(()=>[...r[9]||(r[9]=[t("重试",-1)])]),_:1},8,["disabled"])])):s("",!0)]),i(h(a),{type:"primary",size:"small",loading:de.value,disabled:oe.value||!!ve.value||de.value||!me.value,onClick:Ee},{default:m(()=>[...r[12]||(r[12]=[t(" 保存角色配置 ",-1)])]),_:1},8,["loading","disabled"])]),r[13]||(r[13]=_("div",{class:"omp-model-roles-header"},[_("span",null,"角色"),_("span",null,"模型"),_("span",null,"思考强度")],-1)),(d(!0),w(g,null,n(ee.value,e=>(d(),w("div",{key:e.key,class:"omp-model-role-row"},[_("strong",null,v(e.key),1),i(h(Z),{value:e.model,"onUpdate:value":a=>e.model=a,options:te.value,placeholder:"请选择已启用渠道模型",filterable:"",clearable:"",size:"small",disabled:oe.value||!!ve.value||de.value},null,8,["value","onUpdate:value","options","disabled"]),i(h(Z),{value:e.thinkingLevel,"onUpdate:value":a=>e.thinkingLevel=a,options:h(we),placeholder:"跟随默认",clearable:"",size:"small",disabled:oe.value||!!ve.value||de.value||!ie.value.has(e.model)},null,8,["value","onUpdate:value","options","disabled"])]))),128))])):s("",!0),_("div",Ga,[_("span",Ya,[r[14]||(r[14]=_("span",{class:"asset-summary-label"},"全部",-1)),_("span",Wa,v(S.value.length),1)]),_("span",Xa,[r[15]||(r[15]=_("span",{class:"asset-summary-label"},"用户级",-1)),_("span",Za,v(Oe.value),1)]),_("span",Ka,[r[16]||(r[16]=_("span",{class:"asset-summary-label"},"项目级",-1)),_("span",Qa,v(Ue.value),1)]),_("span",el,[r[17]||(r[17]=_("span",{class:"asset-summary-label"},"托管",-1)),_("span",al,v(Ae.value),1)])]),_("div",ll,[i(h(ce),{value:D.value,"onUpdate:value":r[0]||(r[0]=e=>D.value=e),placeholder:"搜索代理、描述或文件名",clearable:"",size:"small",class:"asset-search"},{prefix:m(()=>[i(h(e),null,{default:m(()=>[i(h($))]),_:1})]),_:1},8,["value"]),i(h(Z),{value:R.value,"onUpdate:value":r[1]||(r[1]=e=>R.value=e),options:Pe,size:"small",class:"asset-filter"},null,8,["value"])]),_("div",sl,[i(h(ae),{show:F.value},{default:m(()=>[0!==Se.value.length||F.value?(d(),w("div",nl,[(d(!0),w(g,null,n(Se.value,e=>(d(),o(Le,{key:Ne(e),agent:e,deleting:!!W.value[Ne(e)],"registry-info":X.value[Ie(e)],toggling:!!Q.value[Ie(e)],onEdit:Je,onDelete:Ve,onClick:Ye,onToggleEnabled:De,onTogglePlatform:Re},null,8,["agent","deleting","registry-info","toggling"]))),128))])):(d(),w("div",tl,[i(h(ue),{description:$e.value},{icon:m(()=>[i(h(e),{size:"48",color:"var(--text-quaternary)"},{default:m(()=>[i(h(U))]),_:1})]),extra:m(()=>[he.value?(d(),o(h(a),{key:0,size:"small",onClick:Te},{default:m(()=>[...r[18]||(r[18]=[t(" 创建第一个代理 ",-1)])]),_:1})):s("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),_("div",il,[i(h(e),{size:"14",class:"asset-info-icon"},{default:m(()=>[i(h(A))]),_:1}),_("span",null,v(Me.value),1)]),i(La,{visible:B.value,"onUpdate:visible":He,agent:Y.value,"project-path":l.projectPath,platform:xe.value,onSaved:We},null,8,["visible","agent","project-path","platform"]),i(da,{visible:E.value,"onUpdate:visible":r[2]||(r[2]=e=>E.value=e),agent:V.value,platform:xe.value,loading:G.value},null,8,["visible","agent","platform","loading"])],2))}},[["__scopeId","data-v-393fa5d6"]]),ul={class:"preset-panel"},dl={class:"toolbar"},rl={key:0,class:"empty"},cl={key:1,class:"preset-list"},vl=["onClick"],pl={key:1,class:"editor"},ml={class:"editor-title"},gl={class:"field-grid"},fl={class:"wide"},yl={class:"wide"},hl={class:"editor-actions"},bl={key:0,class:"hint"},kl=l({__name:"DshAgentPresetsPanel",setup(e){const l=R(),r=k([]),c=k(""),y=k([]),b=k(null),C=k(""),j=k(!1),x=k(!1),M=k(!1),z=k(""),P=k(!1),O=k(!1),U=k("[]"),A=k({id:"",name:"",description:"",order:0,plugins:[],builtIn:!1}),N=p(()=>r.value.map(e=>({label:e.name,value:e.name})));async function L(){if(c.value){j.value=!0,z.value="";try{const e=await fe(c.value);if(y.value=e.presets||[],b.value=e.revision??null,C.value){const e=y.value.find(e=>e.id===C.value);e?I(e):(P.value=!1,C.value="")}}catch(e){z.value=e.message||"读取 Agent 预设失败"}finally{j.value=!1}}}function I(e){C.value=e.id,A.value={...e,plugins:Array.isArray(e.plugins)?e.plugins:[]},U.value=JSON.stringify(A.value.plugins,null,2),O.value=!1,P.value=!0}function S(){C.value="",A.value={id:"",name:"",description:"",order:0,plugins:[],builtIn:!1},U.value="[]",O.value=!0,P.value=!0}async function $(){let e;try{e=JSON.parse(U.value||"[]")}catch(a){return void l.error("插件声明必须是有效的 JSON 数组")}if(Array.isArray(e)){x.value=!0;try{await ge(c.value,{id:A.value.id,name:A.value.name,description:A.value.description,order:A.value.order,plugins:e},b.value),l.success("Agent 预设已保存"),C.value=A.value.id,await L()}catch(s){l.error(s.message||"保存失败,请刷新后重试")}finally{x.value=!1}}else l.error("插件声明必须是数组")}async function F(){M.value=!0;try{await he(c.value,A.value.id,b.value),l.success("自定义 Agent 预设已删除"),C.value="",P.value=!1,await L()}catch(e){l.error(e.message||"删除失败,请刷新后重试")}finally{M.value=!1}}return u(async()=>{try{r.value=await ye(),c.value=r.value[0]?.name||"",c.value&&await L()}catch(e){z.value=e.message||"读取 DSH Profile 失败"}}),(e,l)=>(d(),w("div",ul,[_("div",dl,[i(h(Z),{value:c.value,"onUpdate:value":[l[0]||(l[0]=e=>c.value=e),L],options:N.value,placeholder:"选择 DSH Profile",size:"small"},null,8,["value","options"]),i(h(a),{size:"small",disabled:!c.value,onClick:S},{default:m(()=>[...l[7]||(l[7]=[t("新建预设",-1)])]),_:1},8,["disabled"]),i(h(a),{size:"small",loading:j.value,onClick:L},{default:m(()=>[...l[8]||(l[8]=[t("刷新",-1)])]),_:1},8,["loading"])]),z.value?(d(),o(h(oe),{key:0,type:"error","show-icon":!1},{default:m(()=>[t(v(z.value),1)]),_:1})):s("",!0),i(h(ae),{show:j.value},{default:m(()=>[j.value||0!==y.value.length?(d(),w("div",cl,[(d(!0),w(g,null,n(y.value,e=>(d(),w("button",{key:e.id,class:f(["preset-item",{selected:C.value===e.id}]),onClick:a=>I(e)},[_("strong",null,v(e.name||e.id),1),_("span",null,v(e.description||e.id),1),_("small",null,v(e.builtIn?"内置预设":"自定义预设"),1)],10,vl))),128))])):(d(),w("div",rl,"该 Profile 尚无 Agent 预设"))]),_:1},8,["show"]),P.value?(d(),w("div",pl,[_("div",ml,v(O.value?"新建 Agent 预设":A.value.name||A.value.id),1),_("div",gl,[_("label",null,[l[9]||(l[9]=t("预设 ID",-1)),i(h(ce),{value:A.value.id,"onUpdate:value":l[1]||(l[1]=e=>A.value.id=e),disabled:!O.value,placeholder:"例如 review"},null,8,["value","disabled"])]),_("label",null,[l[10]||(l[10]=t("显示名称",-1)),i(h(ce),{value:A.value.name,"onUpdate:value":l[2]||(l[2]=e=>A.value.name=e),placeholder:"可选"},null,8,["value"])]),_("label",null,[l[11]||(l[11]=t("排序",-1)),i(h(le),{value:A.value.order,"onUpdate:value":l[3]||(l[3]=e=>A.value.order=e),min:0},null,8,["value"])]),_("label",fl,[l[12]||(l[12]=t("描述",-1)),i(h(ce),{value:A.value.description,"onUpdate:value":l[4]||(l[4]=e=>A.value.description=e),placeholder:"可选"},null,8,["value"])]),_("label",yl,[l[13]||(l[13]=t("插件声明(JSON 格式的 YAML) ",-1)),i(h(ce),{value:U.value,"onUpdate:value":l[5]||(l[5]=e=>U.value=e),type:"textarea",autosize:{minRows:8,maxRows:18},spellcheck:"false"},null,8,["value"])])]),_("div",hl,[i(h(a),{type:"primary",loading:x.value,onClick:$},{default:m(()=>[...l[14]||(l[14]=[t("保存预设",-1)])]),_:1},8,["loading"]),O.value||A.value.builtIn?s("",!0):(d(),o(h(a),{key:0,type:"error",secondary:"",loading:M.value,onClick:F},{default:m(()=>[...l[15]||(l[15]=[t("删除",-1)])]),_:1},8,["loading"])),i(h(a),{onClick:l[6]||(l[6]=e=>P.value=!1)},{default:m(()=>[...l[16]||(l[16]=[t("取消",-1)])]),_:1})]),A.value.builtIn?(d(),w("div",bl,"保存后会在当前 Profile 覆盖内置预设。")):s("",!0)])):s("",!0)]))}},[["__scopeId","data-v-b33b4ced"]]),wl={class:"drawer-header"},_l=l({__name:"AgentsDrawer",props:{visible:Boolean,platform:{type:String,default:""}},emits:["update:visible"],setup(e,{emit:a}){const l=e,s=a,{drawerWidth:t}=W(720),n=p({get:()=>l.visible,set:e=>s("update:visible",e)}),u={padding:0,display:"flex",flexDirection:"column",overflow:"hidden"};return(e,a)=>(d(),o(h(Y),{show:n.value,"onUpdate:show":a[1]||(a[1]=e=>n.value=e),width:h(t),placement:"right","mask-closable":!0},{default:m(()=>[i(h(X),{closable:"","native-scrollbar":!1,"body-content-style":u},{header:m(()=>[_("div",wl,[_("span",null,v("dsh"===l.platform?"Agent 预设管理":"代理管理"),1)])]),default:m(()=>["dsh"===l.platform?(d(),o(kl,{key:0})):(d(),o(ol,{key:1,onBack:a[0]||(a[0]=e=>n.value=!1),"hide-back":!0,"in-drawer":!0,platform:l.platform},null,8,["platform"]))]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-de75708b"]]);export{_l as default};
|