@lemoncat7/dsh-partner 2.3.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/docs/channel-message-format.md +2 -0
- package/docs/mcp.md +54 -0
- package/docs/releases/2.4.0.md +11 -0
- package/docs/releases/2.4.1.md +9 -0
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +4 -0
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api/features/mcp-api.d.ts +4 -0
- package/lib/api/features/mcp-api.d.ts.map +1 -0
- package/lib/api/features/mcp-api.js +37 -0
- package/lib/api/features/mcp-api.js.map +1 -0
- package/lib/api.d.ts +2 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +3 -0
- package/lib/api.js.map +1 -1
- package/lib/capabilities.d.ts +1 -1
- package/lib/capabilities.d.ts.map +1 -1
- package/lib/capabilities.js +2 -2
- package/lib/capabilities.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +1480 -1033
- package/lib/client.js.map +4 -4
- package/lib/collaboration/composition.d.ts +3 -0
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +5 -1
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/collaboration/domain.d.ts +3 -0
- package/lib/collaboration/domain.d.ts.map +1 -1
- package/lib/collaboration/domain.js.map +1 -1
- package/lib/collaboration/review-dispatch.d.ts +5 -0
- package/lib/collaboration/review-dispatch.d.ts.map +1 -0
- package/lib/collaboration/review-dispatch.js +23 -0
- package/lib/collaboration/review-dispatch.js.map +1 -0
- package/lib/collaboration/service.d.ts.map +1 -1
- package/lib/collaboration/service.js +12 -3
- package/lib/collaboration/service.js.map +1 -1
- package/lib/companions/management.d.ts +4 -4
- package/lib/companions/removal.d.ts.map +1 -1
- package/lib/companions/removal.js +2 -0
- package/lib/companions/removal.js.map +1 -1
- package/lib/companions/session-configuration.d.ts.map +1 -1
- package/lib/companions/session-configuration.js +2 -0
- package/lib/companions/session-configuration.js.map +1 -1
- package/lib/core/validation.d.ts +2 -0
- package/lib/core/validation.d.ts.map +1 -1
- package/lib/core/validation.js +9 -0
- package/lib/core/validation.js.map +1 -1
- package/lib/domain.d.ts +2 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/execution/service.d.ts +3 -1
- package/lib/execution/service.d.ts.map +1 -1
- package/lib/execution/service.js +4 -0
- package/lib/execution/service.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -1
- package/lib/index.js.map +1 -1
- package/lib/mcp/config.d.ts +10 -0
- package/lib/mcp/config.d.ts.map +1 -0
- package/lib/mcp/config.js +54 -0
- package/lib/mcp/config.js.map +1 -0
- package/lib/mcp/connection-error.d.ts +3 -0
- package/lib/mcp/connection-error.d.ts.map +1 -0
- package/lib/mcp/connection-error.js +31 -0
- package/lib/mcp/connection-error.js.map +1 -0
- package/lib/mcp/connections.d.ts +11 -0
- package/lib/mcp/connections.d.ts.map +1 -0
- package/lib/mcp/connections.js +91 -0
- package/lib/mcp/connections.js.map +1 -0
- package/lib/mcp/credentials.d.ts +11 -0
- package/lib/mcp/credentials.d.ts.map +1 -0
- package/lib/mcp/credentials.js +25 -0
- package/lib/mcp/credentials.js.map +1 -0
- package/lib/mcp/domain.d.ts +41 -0
- package/lib/mcp/domain.d.ts.map +1 -0
- package/lib/mcp/domain.js +2 -0
- package/lib/mcp/domain.js.map +1 -0
- package/lib/mcp/edit-config.d.ts +6 -0
- package/lib/mcp/edit-config.d.ts.map +1 -0
- package/lib/mcp/edit-config.js +36 -0
- package/lib/mcp/edit-config.js.map +1 -0
- package/lib/mcp/service.d.ts +31 -0
- package/lib/mcp/service.d.ts.map +1 -0
- package/lib/mcp/service.js +227 -0
- package/lib/mcp/service.js.map +1 -0
- package/lib/mcp/state.d.ts +4 -0
- package/lib/mcp/state.d.ts.map +1 -0
- package/lib/mcp/state.js +29 -0
- package/lib/mcp/state.js.map +1 -0
- package/lib/requirements/plan-schema.d.ts +1 -0
- package/lib/requirements/plan-schema.d.ts.map +1 -1
- package/lib/requirements/plan-schema.js +2 -2
- package/lib/requirements/plan-schema.js.map +1 -1
- package/lib/requirements/service.js +2 -2
- package/lib/requirements/service.js.map +1 -1
- package/lib/requirements/tool.js +2 -2
- package/lib/requirements/tool.js.map +1 -1
- package/lib/skills/task-planning.d.ts +2 -2
- package/lib/skills/task-planning.d.ts.map +1 -1
- package/lib/skills/task-planning.js +3 -2
- package/lib/skills/task-planning.js.map +1 -1
- package/lib/storage/migrate-layout.d.ts.map +1 -1
- package/lib/storage/migrate-layout.js +1 -0
- package/lib/storage/migrate-layout.js.map +1 -1
- package/lib/storage/split-state.js +2 -2
- package/lib/storage/split-state.js.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +2 -0
- package/lib/store.js.map +1 -1
- package/lib/tasks/result.d.ts.map +1 -1
- package/lib/tasks/result.js +4 -18
- package/lib/tasks/result.js.map +1 -1
- package/lib/tasks/scheduling.d.ts.map +1 -1
- package/lib/tasks/scheduling.js +3 -0
- package/lib/tasks/scheduling.js.map +1 -1
- package/lib/ui/capability-editor.d.ts.map +1 -1
- package/lib/ui/capability-editor.js +26 -17
- package/lib/ui/capability-editor.js.map +1 -1
- package/lib/ui/capability-resources.d.ts +12 -0
- package/lib/ui/capability-resources.d.ts.map +1 -0
- package/lib/ui/capability-resources.js +39 -0
- package/lib/ui/capability-resources.js.map +1 -0
- package/lib/ui/companion-access-panel.d.ts +2 -1
- package/lib/ui/companion-access-panel.d.ts.map +1 -1
- package/lib/ui/companion-access-panel.js +5 -1
- package/lib/ui/companion-access-panel.js.map +1 -1
- package/lib/ui/mcp-capabilities.d.ts +6 -0
- package/lib/ui/mcp-capabilities.d.ts.map +1 -0
- package/lib/ui/mcp-capabilities.js +53 -0
- package/lib/ui/mcp-capabilities.js.map +1 -0
- package/lib/ui/mcp-editor.d.ts +7 -0
- package/lib/ui/mcp-editor.d.ts.map +1 -0
- package/lib/ui/mcp-editor.js +85 -0
- package/lib/ui/mcp-editor.js.map +1 -0
- package/lib/ui/mcp-panel.d.ts +2 -0
- package/lib/ui/mcp-panel.d.ts.map +1 -0
- package/lib/ui/mcp-panel.js +61 -0
- package/lib/ui/mcp-panel.js.map +1 -0
- package/lib/ui/skills-panel.d.ts +2 -1
- package/lib/ui/skills-panel.d.ts.map +1 -1
- package/lib/ui/skills-panel.js +5 -1
- package/lib/ui/skills-panel.js.map +1 -1
- package/lib/ui/workspace-components.d.ts +2 -1
- package/lib/ui/workspace-components.d.ts.map +1 -1
- package/lib/ui/workspace-components.js +2 -2
- package/lib/ui/workspace-components.js.map +1 -1
- package/lib/ui/workspace-navigation.d.ts +9 -1
- package/lib/ui/workspace-navigation.d.ts.map +1 -1
- package/lib/ui/workspace-navigation.js +1 -0
- package/lib/ui/workspace-navigation.js.map +1 -1
- package/package.json +7 -3
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { IconCheckOutline14 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
4
|
import { api } from '../client-api.js';
|
|
5
5
|
import { CAPABILITY_LABELS } from '../capabilities.js';
|
|
6
|
-
import {
|
|
7
|
-
import { CompanionAccessPanel } from './companion-access-panel.js';
|
|
6
|
+
import { CapabilityResources } from './capability-resources.js';
|
|
8
7
|
import { FormField as Field, SectionHeading as Section } from './partner-components.js';
|
|
9
8
|
import { errorMessage as message } from './workspace-components.js';
|
|
10
9
|
import { companionDraft } from './companion-draft.js';
|
|
11
10
|
export function CapabilityEditor({ companion, presets, onChanged }) {
|
|
12
11
|
const [form, setForm] = useState(() => companionDraft(companion));
|
|
12
|
+
const [persistedCapabilities, setPersistedCapabilities] = useState(companion.capabilities);
|
|
13
13
|
const [modelCatalog, setModelCatalog] = useState();
|
|
14
14
|
const [saving, setSaving] = useState(false);
|
|
15
15
|
const [saved, setSaved] = useState(false);
|
|
@@ -17,25 +17,30 @@ export function CapabilityEditor({ companion, presets, onChanged }) {
|
|
|
17
17
|
const savingRef = useRef(false);
|
|
18
18
|
const mounted = useRef(true);
|
|
19
19
|
useEffect(() => { mounted.current = true; return () => { mounted.current = false; }; }, []);
|
|
20
|
-
useEffect(() => { if (!savingRef.current)
|
|
21
|
-
setForm(companionDraft(companion));
|
|
20
|
+
useEffect(() => { if (!savingRef.current) {
|
|
21
|
+
setForm(companionDraft(companion));
|
|
22
|
+
setPersistedCapabilities(companion.capabilities);
|
|
23
|
+
} }, [companion.id, companion.updatedAt]);
|
|
22
24
|
useEffect(() => { void api('/models').then(value => { if (mounted.current)
|
|
23
25
|
setModelCatalog(value); }).catch(reason => { if (mounted.current)
|
|
24
26
|
setError(message(reason)); }); }, []);
|
|
25
27
|
const edit = (next) => { if (savingRef.current)
|
|
26
|
-
return;
|
|
28
|
+
return; void save(next); };
|
|
27
29
|
const toggle = (capability) => edit({ ...form, capabilities: form.capabilities.includes(capability) ? form.capabilities.filter(item => item !== capability) : [...form.capabilities, capability] });
|
|
28
|
-
const save = async () => {
|
|
30
|
+
const save = async (next) => {
|
|
29
31
|
if (savingRef.current)
|
|
30
32
|
return;
|
|
31
33
|
savingRef.current = true;
|
|
34
|
+
const previous = form;
|
|
35
|
+
setForm(next);
|
|
32
36
|
setSaving(true);
|
|
33
37
|
setSaved(false);
|
|
34
38
|
setError(undefined);
|
|
35
39
|
try {
|
|
36
|
-
await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion:
|
|
40
|
+
await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion: next }) });
|
|
37
41
|
if (!mounted.current)
|
|
38
42
|
return;
|
|
43
|
+
setPersistedCapabilities(next.capabilities);
|
|
39
44
|
setSaved(true);
|
|
40
45
|
try {
|
|
41
46
|
await onChanged();
|
|
@@ -46,8 +51,10 @@ export function CapabilityEditor({ companion, presets, onChanged }) {
|
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
53
|
catch (reason) {
|
|
49
|
-
if (mounted.current)
|
|
50
|
-
|
|
54
|
+
if (mounted.current) {
|
|
55
|
+
setForm(previous);
|
|
56
|
+
setError(`保存失败:${message(reason)}。已恢复原选择,请重新操作。`);
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
finally {
|
|
53
60
|
savingRef.current = false;
|
|
@@ -59,6 +66,7 @@ export function CapabilityEditor({ companion, presets, onChanged }) {
|
|
|
59
66
|
{ id: 'tools', eyebrow: 'TOOLS', title: '工作工具', detail: '连接当前伙伴能够使用的专业工具。', choices: [
|
|
60
67
|
{ id: 'knowledge', title: '知识库', detail: '在已挂载范围内检索与回写知识。' },
|
|
61
68
|
{ id: 'skills', title: 'Skill', detail: '使用单独启用的 Skill 与工作流程。' },
|
|
69
|
+
{ id: 'mcp', title: 'MCP', detail: '使用单独授权的外部 MCP 服务工具。' },
|
|
62
70
|
{ id: 'ssh', title: 'SSH', detail: '在 SSH 插件授权边界内操作主机。' },
|
|
63
71
|
{ id: 'git', title: 'Git', detail: '预留 Git 能力,需对应插件实际安装。' },
|
|
64
72
|
] },
|
|
@@ -74,12 +82,13 @@ export function CapabilityEditor({ companion, presets, onChanged }) {
|
|
|
74
82
|
const selectedProvider = form.provider || modelCatalog?.defaultSelection.provider || '';
|
|
75
83
|
const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? [];
|
|
76
84
|
const currentModelMissing = Boolean(form.model) && !modelOptions.some(item => item.id === form.model);
|
|
77
|
-
return _jsxs("div", { className: "dsh-partner-form is-capabilities", children: [_jsx(Section, { eyebrow: "COMPOSITION", title: "\u80FD\u529B\u7EC4\u5408", detail: "\u4F19\u4F34\u58F0\u660E\u610F\u56FE\u8303\u56F4\uFF1B\u771F\u6B63\u53EF\u8C03\u7528\u7684\u5DE5\u5177\u4ECD\u6765\u81EA\u6240\u9009 Agent Preset\uFF0C\u5E76\u7EE7\u7EED\u6267\u884C\u5404\u63D2\u4EF6\u6743\u9650\u3002" }), _jsxs("div", { className: "dsh-partner-runtime-fields", children: [_jsx(Field, { label: "Agent Preset", hint: "\u5DE5\u5177\u3001Skill \u4E0E\u7CFB\u7EDF\u63D0\u793A", children: _jsxs("select", { disabled: saving, value: form.presetId, onChange: event => edit({ ...form, presetId: event.target.value }), children: [_jsx("option", { value: "", children: "\u8DDF\u968F DSH \u9ED8\u8BA4 Preset" }), presets.filter(item => !item.broken).map(item => _jsx("option", { value: item.id, children: item.name }, item.id))] }) }), _jsx(Field, { label: "\u6A21\u578B\u63D0\u4F9B\u65B9", hint: "\u6765\u81EA\u5F53\u524D\u5BA2\u6237\u7AEF", children: _jsxs("select", { disabled: saving, value: form.provider, onChange: event => edit({ ...form, provider: event.target.value, model: '' }), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 ", modelCatalog?.defaultSelection.provider || '正在读取'] }), modelCatalog?.providers.map(provider => _jsx("option", { value: provider.id, children: provider.name || provider.id }, provider.id))] }) }), _jsx(Field, { label: "\u6A21\u578B", hint: "\u968F\u63D0\u4F9B\u65B9\u8054\u52A8", children: _jsxs("select", { disabled: saving, value: form.model, onChange: event => edit({ ...form, model: event.target.value }), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 ", modelCatalog?.defaultSelection.model || '正在读取'] }), currentModelMissing && _jsxs("option", { value: form.model, children: ["\u5F53\u524D\u914D\u7F6E \u00B7 ", form.model] }), modelOptions.map(model => _jsx("option", { value: model.id, children: model.name || model.id }, model.id))] }) })] }), _jsx("p", { className: "dsh-partner-inline-note", children: "\u8EAB\u4EFD\u4E0E\u80FD\u529B\u5728\u4E0B\u4E00\u8F6E\u6267\u884C\u524D\u66F4\u65B0\uFF1BPreset \u4E0E\u6A21\u578B\u4F5C\u4E3A\u4F1A\u8BDD\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u4E0D\u8986\u76D6\u5DF2\u6709\u4F1A\u8BDD\u7684\u9009\u62E9\u3002" }), _jsx("div", { className: "dsh-partner-capability-groups", children: groups.map(group => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
return _jsxs("div", { className: "dsh-partner-form is-capabilities", children: [_jsx(Section, { eyebrow: "COMPOSITION", title: "\u80FD\u529B\u7EC4\u5408", detail: "\u4F19\u4F34\u58F0\u660E\u610F\u56FE\u8303\u56F4\uFF1B\u771F\u6B63\u53EF\u8C03\u7528\u7684\u5DE5\u5177\u4ECD\u6765\u81EA\u6240\u9009 Agent Preset\uFF0C\u5E76\u7EE7\u7EED\u6267\u884C\u5404\u63D2\u4EF6\u6743\u9650\u3002" }), _jsxs("div", { className: "dsh-partner-capability-save-status", role: "status", "aria-live": "polite", "aria-atomic": "true", children: [saving ? '正在保存…' : saved ? '已保存,下一轮生效' : '修改自动保存,无需应用组合。', error && _jsx("p", { className: "dsh-partner-inline-error", role: "alert", children: error })] }), _jsxs("div", { className: "dsh-partner-runtime-fields", children: [_jsx(Field, { label: "Agent Preset", hint: "\u5DE5\u5177\u3001Skill \u4E0E\u7CFB\u7EDF\u63D0\u793A", children: _jsxs("select", { disabled: saving, value: form.presetId, onChange: event => edit({ ...form, presetId: event.target.value }), children: [_jsx("option", { value: "", children: "\u8DDF\u968F DSH \u9ED8\u8BA4 Preset" }), presets.filter(item => !item.broken).map(item => _jsx("option", { value: item.id, children: item.name }, item.id))] }) }), _jsx(Field, { label: "\u6A21\u578B\u63D0\u4F9B\u65B9", hint: "\u6765\u81EA\u5F53\u524D\u5BA2\u6237\u7AEF", children: _jsxs("select", { disabled: saving, value: form.provider, onChange: event => edit({ ...form, provider: event.target.value, model: '' }), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 ", modelCatalog?.defaultSelection.provider || '正在读取'] }), modelCatalog?.providers.map(provider => _jsx("option", { value: provider.id, children: provider.name || provider.id }, provider.id))] }) }), _jsx(Field, { label: "\u6A21\u578B", hint: "\u968F\u63D0\u4F9B\u65B9\u8054\u52A8", children: _jsxs("select", { disabled: saving, value: form.model, onChange: event => edit({ ...form, model: event.target.value }), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 ", modelCatalog?.defaultSelection.model || '正在读取'] }), currentModelMissing && _jsxs("option", { value: form.model, children: ["\u5F53\u524D\u914D\u7F6E \u00B7 ", form.model] }), modelOptions.map(model => _jsx("option", { value: model.id, children: model.name || model.id }, model.id))] }) })] }), _jsx("p", { className: "dsh-partner-inline-note", children: "\u8EAB\u4EFD\u4E0E\u80FD\u529B\u5728\u4E0B\u4E00\u8F6E\u6267\u884C\u524D\u66F4\u65B0\uFF1BPreset \u4E0E\u6A21\u578B\u4F5C\u4E3A\u4F1A\u8BDD\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u4E0D\u8986\u76D6\u5DF2\u6709\u4F1A\u8BDD\u7684\u9009\u62E9\u3002" }), _jsx(CapabilityResources, { companionId: companion.id, capabilities: persistedCapabilities, disabled: saving, children: manage => _jsx("div", { className: "dsh-partner-capability-groups", children: groups.map(group => {
|
|
86
|
+
const enabled = group.choices.filter(choice => form.capabilities.includes(choice.id)).length;
|
|
87
|
+
return _jsxs("section", { className: "dsh-partner-capability-group", "aria-labelledby": `partner-capability-${group.id}`, children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("small", { children: group.eyebrow }), _jsx("strong", { id: `partner-capability-${group.id}`, children: group.title }), _jsx("p", { children: group.detail })] }), _jsxs("em", { children: [enabled, " / ", group.choices.length, " \u5DF2\u542F\u7528"] })] }), _jsxs("div", { className: "dsh-partner-capabilities", children: [group.choices.map(choice => {
|
|
88
|
+
const active = form.capabilities.includes(choice.id);
|
|
89
|
+
const control = _jsxs("button", { type: "button", disabled: saving, className: active ? 'is-active' : '', "aria-pressed": active, onClick: () => toggle(choice.id), children: [_jsx("span", { children: active && _jsx(IconCheckOutline14, { size: 14 }) }), _jsx("strong", { children: choice.title }), _jsx("small", { children: choice.detail })] });
|
|
90
|
+
return _jsxs("div", { className: "dsh-partner-capability-card", children: [control, (choice.id === 'skills' || choice.id === 'mcp') && manage(choice.id)] }, choice.id);
|
|
91
|
+
}), group.id === 'coordination' && _jsxs("div", { className: "dsh-partner-capability-card is-access", children: [_jsxs("div", { className: "dsh-partner-capability-card-copy", children: [_jsx("strong", { children: "\u53EF\u8BBF\u95EE\u4F19\u4F34" }), _jsx("small", { children: "\u9009\u62E9\u80FD\u4E86\u89E3\u5176\u80FD\u529B\u5E76\u59D4\u6D3E\u4EFB\u52A1\u7684\u4F19\u4F34\u3002" })] }), manage('access')] })] })] }, group.id);
|
|
92
|
+
}) }) }, companion.id)] });
|
|
84
93
|
}
|
|
85
94
|
//# sourceMappingURL=capability-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-editor.js","sourceRoot":"","sources":["../../src/ui/capability-editor.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAE,GAAG,EAAoF,MAAM,kBAAkB,CAAA;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"capability-editor.js","sourceRoot":"","sources":["../../src/ui/capability-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type Capability } from '../client-api.js';
|
|
3
|
+
type Resource = 'skills' | 'access' | 'mcp';
|
|
4
|
+
/** Compact entry points only; detailed lists mount on demand inside one shared dialog. */
|
|
5
|
+
export declare function CapabilityResources({ companionId, capabilities, disabled, children }: {
|
|
6
|
+
companionId: string;
|
|
7
|
+
capabilities: Capability[];
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
children(manage: (resource: Resource) => ReactNode): ReactNode;
|
|
10
|
+
}): JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=capability-resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-resources.d.ts","sourceRoot":"","sources":["../../src/ui/capability-resources.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAO,KAAK,UAAU,EAAmD,MAAM,kBAAkB,CAAA;AAOxG,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAA;AAG3C,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,SAAS,GAAG,SAAS,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA6B1O"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { api } from '../client-api.js';
|
|
4
|
+
import { CompanionSkillSettings } from './skills-panel.js';
|
|
5
|
+
import { CompanionMcpSettings } from './mcp-capabilities.js';
|
|
6
|
+
import { CompanionAccessPanel } from './companion-access-panel.js';
|
|
7
|
+
import { WorkspaceDialog } from './workspace-components.js';
|
|
8
|
+
const titles = { skills: 'Skill', access: '可访问伙伴', mcp: 'MCP 服务' };
|
|
9
|
+
/** Compact entry points only; detailed lists mount on demand inside one shared dialog. */
|
|
10
|
+
export function CapabilityResources({ companionId, capabilities, disabled, children }) {
|
|
11
|
+
const [opened, setOpened] = useState();
|
|
12
|
+
const [busy, setBusy] = useState(false);
|
|
13
|
+
const [revision, setRevision] = useState(0);
|
|
14
|
+
const [counts, setCounts] = useState({});
|
|
15
|
+
const [failed, setFailed] = useState(false);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
let live = true;
|
|
18
|
+
setFailed(false);
|
|
19
|
+
const requests = [
|
|
20
|
+
['access', api(`/companions/${encodeURIComponent(companionId)}/access`).then(v => v.targetIds.length)],
|
|
21
|
+
];
|
|
22
|
+
if (capabilities.includes('skills'))
|
|
23
|
+
requests.push(['skills', api('/skills').then(v => v.installed.filter(s => v.bindings.some(b => b.companionId === companionId && b.skillId === s.id && b.enabled)).length)]);
|
|
24
|
+
if (capabilities.includes('mcp'))
|
|
25
|
+
requests.push(['mcp', api('/mcp').then(v => v.servers.filter(s => v.bindings.some(b => b.companionId === companionId && b.serverId === s.id)).length)]);
|
|
26
|
+
for (const [key, request] of requests)
|
|
27
|
+
void request.then(count => { if (live)
|
|
28
|
+
setCounts(v => ({ ...v, [key]: count })); }).catch(() => { if (live) {
|
|
29
|
+
setCounts(v => ({ ...v, [key]: undefined }));
|
|
30
|
+
setFailed(true);
|
|
31
|
+
} });
|
|
32
|
+
return () => { live = false; };
|
|
33
|
+
}, [companionId, capabilities, revision]);
|
|
34
|
+
const close = () => { if (busy)
|
|
35
|
+
return; setOpened(undefined); setRevision(v => v + 1); };
|
|
36
|
+
const manage = (key) => _jsxs("button", { className: "dsh-partner-capability-manage", type: "button", disabled: disabled || (key !== 'access' && !capabilities.includes(key)), "aria-haspopup": "dialog", "aria-label": `管理${titles[key]}`, onClick: () => { setBusy(false); setOpened(key); }, children: ["\u7BA1\u7406", counts[key] !== undefined ? ` · ${counts[key]}` : ''] });
|
|
37
|
+
return _jsxs(_Fragment, { children: [children(manage), failed && _jsxs("p", { className: "dsh-partner-inline-note", children: ["\u90E8\u5206\u6570\u91CF\u8BFB\u53D6\u5931\u8D25\uFF0C\u53EF\u6253\u5F00\u7BA1\u7406\u91CD\u8BD5\u3002", _jsx("button", { type: "button", onClick: () => setRevision(v => v + 1), children: "\u5237\u65B0\u6570\u91CF" })] }), opened && _jsxs(WorkspaceDialog, { className: "is-capability-resources", eyebrow: "", title: `管理${titles[opened]}`, detail: opened === 'access' ? '选择此伙伴可以访问和委派的伙伴,单向授权。' : '选择需要启用的能力,修改自动保存,下一轮生效。', close: close, children: [busy && _jsx("p", { role: "status", className: "dsh-partner-inline-note", children: "\u6B63\u5728\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u5019\u2026" }), opened === 'skills' && _jsx(CompanionSkillSettings, { companionId: companionId, onBusyChange: setBusy }), opened === 'access' && _jsx(CompanionAccessPanel, { companionId: companionId, onBusyChange: setBusy }), opened === 'mcp' && _jsx(CompanionMcpSettings, { companionId: companionId, embedded: true, onBusyChange: setBusy })] })] });
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=capability-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-resources.js","sourceRoot":"","sources":["../../src/ui/capability-resources.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export declare function CompanionAccessPanel({ companionId }: {
|
|
1
|
+
export declare function CompanionAccessPanel({ companionId, onBusyChange }: {
|
|
2
2
|
companionId: string;
|
|
3
|
+
onBusyChange?(busy: boolean): void;
|
|
3
4
|
}): JSX.Element;
|
|
4
5
|
//# sourceMappingURL=companion-access-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-access-panel.d.ts","sourceRoot":"","sources":["../../src/ui/companion-access-panel.tsx"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"companion-access-panel.d.ts","sourceRoot":"","sources":["../../src/ui/companion-access-panel.tsx"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAqC5I"}
|
|
@@ -4,7 +4,7 @@ import { IconCheckOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
|
4
4
|
import { api } from '../client-api.js';
|
|
5
5
|
import { CollectionEmpty, WorkspaceNotice, errorMessage } from './workspace-components.js';
|
|
6
6
|
import { CAPABILITY_LABELS, isCompanionCapability } from '../capabilities.js';
|
|
7
|
-
export function CompanionAccessPanel({ companionId }) {
|
|
7
|
+
export function CompanionAccessPanel({ companionId, onBusyChange }) {
|
|
8
8
|
const [access, setAccess] = useState({ targetIds: [], companions: [] });
|
|
9
9
|
const [busy, setBusy] = useState();
|
|
10
10
|
const [error, setError] = useState();
|
|
@@ -19,6 +19,9 @@ export function CompanionAccessPanel({ companionId }) {
|
|
|
19
19
|
}, [companionId]);
|
|
20
20
|
useEffect(() => { void load(); }, [load]);
|
|
21
21
|
const toggle = async (targetId) => {
|
|
22
|
+
if (busy)
|
|
23
|
+
return;
|
|
24
|
+
onBusyChange?.(true);
|
|
22
25
|
const previous = access.targetIds;
|
|
23
26
|
const targetIds = previous.includes(targetId) ? previous.filter(id => id !== targetId) : [...previous, targetId];
|
|
24
27
|
setBusy(targetId);
|
|
@@ -34,6 +37,7 @@ export function CompanionAccessPanel({ companionId }) {
|
|
|
34
37
|
}
|
|
35
38
|
finally {
|
|
36
39
|
setBusy(undefined);
|
|
40
|
+
onBusyChange?.(false);
|
|
37
41
|
}
|
|
38
42
|
};
|
|
39
43
|
return _jsxs("section", { className: "dsh-partner-capability-detail dsh-partner-access", "aria-labelledby": "dsh-partner-access-title", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("small", { children: "DIRECTED ACCESS" }), _jsx("strong", { id: "dsh-partner-access-title", children: "\u53EF\u8BBF\u95EE\u7684\u4F19\u4F34" })] }), _jsxs("em", { children: [access.targetIds.length, " \u4F4D\u5DF2\u6388\u6743"] })] }), _jsx("p", { className: "dsh-partner-access-note", children: "\u52FE\u9009\u540E\uFF0C\u5F53\u524D\u4F19\u4F34\u80FD\u4E86\u89E3\u5BF9\u65B9\u7684\u516C\u5F00\u80FD\u529B\uFF0C\u5E76\u5728\u4EFB\u52A1\u770B\u677F\u4E2D `@` \u5BF9\u65B9\u6267\u884C\u4EFB\u52A1\u3002\u6388\u6743\u53EA\u6CBF\u5F53\u524D\u65B9\u5411\u751F\u6548\uFF0C\u4E0D\u4F1A\u53CD\u5411\u6388\u6743\uFF0C\u4E5F\u4E0D\u4F1A\u5171\u4EAB\u4F1A\u8BDD\u3001\u8BB0\u5FC6\u3001\u6E20\u9053\u6216\u51ED\u636E\u3002" }), access.companions.length === 0 ? _jsx(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u53EF\u6388\u6743\u7684\u4F19\u4F34", detail: "\u521B\u5EFA\u7B2C\u4E8C\u4F4D\u4F19\u4F34\u540E\uFF0C\u53EF\u4EE5\u5728\u8FD9\u91CC\u5EFA\u7ACB\u5355\u5411\u534F\u4F5C\u6388\u6743\u3002" }) : _jsx("div", { className: "dsh-partner-access-list", children: access.companions.map(companion => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-access-panel.js","sourceRoot":"","sources":["../../src/ui/companion-access-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAE,GAAG,EAA4B,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,MAAM,UAAU,oBAAoB,CAAC,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"companion-access-panel.js","sourceRoot":"","sources":["../../src/ui/companion-access-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-capabilities.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-capabilities.tsx"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,QAAgB,EAAE,YAAY,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAwClL"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { IconPlusOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { api } from '../client-api.js';
|
|
5
|
+
import { CollectionEmpty, WorkspaceBlock, WorkspaceDialog, WorkspaceNotice, errorMessage } from './workspace-components.js';
|
|
6
|
+
import { FormField } from './partner-components.js';
|
|
7
|
+
export function CompanionMcpSettings({ companionId, embedded = false, onBusyChange }) {
|
|
8
|
+
const [catalog, setCatalog] = useState({ servers: [], bindings: [] });
|
|
9
|
+
const [selecting, setSelecting] = useState(false);
|
|
10
|
+
const [showAll, setShowAll] = useState(false);
|
|
11
|
+
const [query, setQuery] = useState('');
|
|
12
|
+
const [busy, setBusy] = useState(false);
|
|
13
|
+
const [error, setError] = useState('');
|
|
14
|
+
const [notice, setNotice] = useState('');
|
|
15
|
+
const load = useCallback(async () => {
|
|
16
|
+
try {
|
|
17
|
+
setCatalog(await api('/mcp'));
|
|
18
|
+
setError('');
|
|
19
|
+
}
|
|
20
|
+
catch (reason) {
|
|
21
|
+
setError(errorMessage(reason));
|
|
22
|
+
}
|
|
23
|
+
}, []);
|
|
24
|
+
useEffect(() => { void load(); }, [load]);
|
|
25
|
+
const ids = new Set(catalog.bindings.filter(b => b.companionId === companionId).map(b => b.serverId));
|
|
26
|
+
const authorized = catalog.servers.filter(s => ids.has(s.id));
|
|
27
|
+
const toggle = async (serverId, enabled) => {
|
|
28
|
+
if (busy)
|
|
29
|
+
return;
|
|
30
|
+
onBusyChange?.(true);
|
|
31
|
+
setBusy(true);
|
|
32
|
+
setError('');
|
|
33
|
+
setNotice('');
|
|
34
|
+
try {
|
|
35
|
+
setCatalog(await api('/mcp/bindings', { method: 'POST', body: JSON.stringify({ companionId, serverId, enabled }) }));
|
|
36
|
+
setNotice(enabled ? '已授权,下一轮对话生效,无需新建会话。' : '授权已移除,立即阻止新的调用,下一轮移除工具列表。');
|
|
37
|
+
}
|
|
38
|
+
catch (reason) {
|
|
39
|
+
setError(errorMessage(reason));
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
setBusy(false);
|
|
43
|
+
onBusyChange?.(false);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const feedback = _jsxs(_Fragment, { children: [error && _jsx(WorkspaceNotice, { children: error }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice })] });
|
|
47
|
+
const picker = _jsxs(_Fragment, { children: [feedback, _jsx(FormField, { label: "\u641C\u7D22\u670D\u52A1", children: _jsx("input", { value: query, onChange: e => setQuery(e.target.value) }) }), _jsx("div", { className: "dsh-partner-skill-installed dsh-partner-mcp-bindings", children: catalog.servers.filter(s => s.name.toLocaleLowerCase().includes(query.toLocaleLowerCase())).map(server => _jsxs("article", { children: [_jsxs("span", { children: [_jsx("strong", { children: server.name }), _jsxs("p", { children: [server.tools.length, " \u4E2A\u5DE5\u5177 \u00B7 ", ids.has(server.id) ? '已授权' : '未授权', !server.enabled && ' · 已停用'] })] }), _jsx("button", { type: "button", "aria-pressed": ids.has(server.id), disabled: busy, onClick: () => { void toggle(server.id, !ids.has(server.id)); }, children: ids.has(server.id) ? '移除授权' : '授权' })] }, server.id)) }), !catalog.servers.length && _jsx(CollectionEmpty, { title: "\u6CA1\u6709\u53EF\u7528\u670D\u52A1", detail: "\u5148\u524D\u5F80 MCP \u670D\u52A1\u9875\u65B0\u589E\u6216\u5BFC\u5165\u914D\u7F6E\u3002" })] });
|
|
48
|
+
if (embedded)
|
|
49
|
+
return _jsxs("section", { className: "dsh-partner-capability-picker", children: [_jsx("p", { className: "dsh-partner-inline-note", children: "\u6388\u6743\u670D\u52A1\u5373\u5141\u8BB8\u8C03\u7528\u8BE5\u670D\u52A1\u7684\u5DE5\u5177\u3002\u51ED\u636E\u4E0D\u4F1A\u63D0\u4F9B\u7ED9\u4F19\u4F34\uFF0C\u4FEE\u6539\u4E8E\u4E0B\u4E00\u8F6E\u751F\u6548\u3002" }), picker] });
|
|
50
|
+
return _jsxs(WorkspaceBlock, { title: "\u5DF2\u6388\u6743 MCP", detail: "\u53EA\u6CE8\u5165\u9009\u4E2D\u7684\u670D\u52A1\uFF1B\u65B0\u589E\u6216\u4FEE\u6539\u5DE5\u5177\u540E\uFF0C\u5728 MCP \u670D\u52A1\u9875\u5237\u65B0\u5DE5\u5177\u5373\u53EF\u4E8E\u4E0B\u4E00\u8F6E\u751F\u6548\u3002", actions: _jsxs("button", { type: "button", onClick: () => { setSelecting(true); void load(); }, children: [_jsx(IconPlusOutline16, { size: 14 }), "\u9009\u62E9 MCP"] }), children: [!selecting && feedback, !authorized.length ? _jsx(CollectionEmpty, { title: "\u5C1A\u672A\u6388\u6743 MCP \u670D\u52A1", detail: "\u5148\u5728 MCP \u670D\u52A1\u9875\u6DFB\u52A0\u914D\u7F6E\uFF0C\u518D\u5728\u6B64\u9009\u62E9\u3002" }) : _jsx("div", { className: "dsh-partner-skill-installed dsh-partner-mcp-bindings", children: (showAll ? authorized : authorized.slice(0, 4)).map(server => _jsxs("article", { children: [_jsxs("span", { children: [_jsx("strong", { children: server.name }), _jsxs("p", { children: [server.tools.length, " \u4E2A\u5DE5\u5177 \u00B7 ", server.enabled ? '已启用' : '服务已停用'] })] }), _jsx("button", { type: "button", disabled: busy, onClick: () => { void toggle(server.id, false); }, children: "\u79FB\u9664\u6388\u6743" })] }, server.id)) }), authorized.length > 4 && _jsx("button", { type: "button", className: "dsh-partner-skill-disclosure", "aria-expanded": showAll, onClick: () => setShowAll(v => !v), children: showAll ? '收起' : `查看全部 ${authorized.length} 个 MCP` }), selecting && _jsx(WorkspaceDialog, { title: "\u9009\u62E9 MCP \u670D\u52A1", detail: "\u6388\u6743\u670D\u52A1\u5373\u5141\u8BB8\u8C03\u7528\u8BE5\u670D\u52A1\u5237\u65B0\u540E\u516C\u5E03\u7684\u6240\u6709\u5DE5\u5177\u3002\u51ED\u636E\u4E0D\u4F1A\u63D0\u4F9B\u7ED9\u4F19\u4F34\u3002", close: () => { if (!busy)
|
|
51
|
+
setSelecting(false); }, children: picker })] });
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mcp-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-capabilities.js","sourceRoot":"","sources":["../../src/ui/mcp-capabilities.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpCatalog, McpServerView } from '../mcp/domain.js';
|
|
2
|
+
export declare function McpEditor({ value, close, saved }: {
|
|
3
|
+
value: McpServerView | 'new' | 'import';
|
|
4
|
+
close(): void;
|
|
5
|
+
saved(catalog: McpCatalog): void;
|
|
6
|
+
}): JSX.Element;
|
|
7
|
+
//# sourceMappingURL=mcp-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-editor.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-editor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAG9E,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;IAAC,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA2D5J"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useId, useRef, useState } from 'react';
|
|
3
|
+
import { api } from '../client-api.js';
|
|
4
|
+
import { WorkspaceDialog, WorkspaceNotice, errorMessage } from './workspace-components.js';
|
|
5
|
+
export function McpEditor({ value, close, saved }) {
|
|
6
|
+
const existing = typeof value === 'object' ? value : undefined;
|
|
7
|
+
const importing = value === 'import';
|
|
8
|
+
const [name, setName] = useState(existing?.name ?? '');
|
|
9
|
+
const [json, setJson] = useState('');
|
|
10
|
+
const [original, setOriginal] = useState('');
|
|
11
|
+
const [revision, setRevision] = useState();
|
|
12
|
+
const [revealed, setRevealed] = useState(false);
|
|
13
|
+
const [loading, setLoading] = useState(!!existing);
|
|
14
|
+
const [busy, setBusy] = useState(false);
|
|
15
|
+
const [error, setError] = useState('');
|
|
16
|
+
const mounted = useRef(true);
|
|
17
|
+
const field = useId();
|
|
18
|
+
const load = async (reveal) => {
|
|
19
|
+
if (!existing)
|
|
20
|
+
return;
|
|
21
|
+
setLoading(true);
|
|
22
|
+
setError('');
|
|
23
|
+
try {
|
|
24
|
+
const next = await api(`/mcp/${existing.id}/config${reveal ? '?reveal=1' : ''}`);
|
|
25
|
+
if (!mounted.current)
|
|
26
|
+
return;
|
|
27
|
+
const text = JSON.stringify(next.config, null, 2);
|
|
28
|
+
if (revision === undefined)
|
|
29
|
+
setName(next.name);
|
|
30
|
+
setJson(text);
|
|
31
|
+
setOriginal(text);
|
|
32
|
+
setRevision(next.revision);
|
|
33
|
+
setRevealed(reveal);
|
|
34
|
+
}
|
|
35
|
+
catch (reason) {
|
|
36
|
+
if (mounted.current)
|
|
37
|
+
setError(errorMessage(reason));
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
if (mounted.current)
|
|
41
|
+
setLoading(false);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
useEffect(() => { mounted.current = true; void load(false); return () => { mounted.current = false; }; }, []);
|
|
45
|
+
const hint = importing
|
|
46
|
+
? '粘贴包含 mcpServers 的完整配置,服务名称取自其中的键名;可一次导入多个服务。单个 url / command 对象请用「新增 MCP」。'
|
|
47
|
+
: existing
|
|
48
|
+
? '已回填当前配置。{{DSH_MCP_SAVED:…}} 表示已保存的值,保持原样即可保留;填写新值可替换,删除字段则移除。认证和命令参数默认隐藏,可点「显示完整配置」。'
|
|
49
|
+
: '这里填写一个服务的配置:HTTP 包含 url,stdio 包含 command 和 args。也支持直接粘贴仅含一个服务的完整 mcpServers 配置;多个服务请用「导入 JSON」。';
|
|
50
|
+
const example = JSON.stringify(importing ? { mcpServers: { docmost: { type: 'http', url: 'http://docmost:3000/mcp', headers: { Authorization: 'Bearer YOUR_TOKEN' } } } } : { type: 'http', url: 'http://docmost:3000/mcp', headers: { Authorization: 'Bearer YOUR_TOKEN' } }, null, 2);
|
|
51
|
+
const stdioExample = JSON.stringify(importing ? { mcpServers: { example: { command: 'npx', args: ['-y', 'your-mcp-package'] } } } : { command: 'npx', args: ['-y', 'your-mcp-package'] }, null, 2);
|
|
52
|
+
const submit = async () => {
|
|
53
|
+
if (busy || loading || (existing && revision === undefined))
|
|
54
|
+
return;
|
|
55
|
+
setBusy(true);
|
|
56
|
+
setError('');
|
|
57
|
+
try {
|
|
58
|
+
let parsed;
|
|
59
|
+
if (json.trim()) {
|
|
60
|
+
try {
|
|
61
|
+
parsed = JSON.parse(json);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
throw Error('JSON 格式不正确,请检查双引号、逗号和括号;可展开下方格式示例对照。');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (parsed === undefined)
|
|
68
|
+
throw Error(existing ? '配置不能为空。如需保留已有值,请保留原配置和占位符。' : '请填写 JSON 配置,可参考下方格式示例。');
|
|
69
|
+
const next = await api(importing ? '/mcp/import' : existing ? `/mcp/${existing.id}` : '/mcp', { method: existing ? 'PUT' : 'POST', body: JSON.stringify(importing ? parsed : { name, config: parsed, ...(existing ? { expectedRevision: revision } : {}) }) });
|
|
70
|
+
if (mounted.current)
|
|
71
|
+
saved(next);
|
|
72
|
+
}
|
|
73
|
+
catch (reason) {
|
|
74
|
+
if (mounted.current)
|
|
75
|
+
setError(errorMessage(reason));
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
if (mounted.current)
|
|
79
|
+
setBusy(false);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return _jsx(WorkspaceDialog, { title: importing ? '导入 MCP 配置' : existing ? '编辑 MCP 服务' : '新增 MCP 服务', detail: importing ? '导入完整的客户端配置,可包含一个或多个服务。' : existing ? '修改当前服务配置,不需要重新填写已保存的凭据。' : '手动添加一个服务,名称仅用于页面展示。', close: () => { if (!busy)
|
|
83
|
+
close(); }, children: _jsxs("form", { className: "dsh-partner-feature-form", onSubmit: e => { e.preventDefault(); void submit(); }, children: [!importing && _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u670D\u52A1\u540D\u79F0" }), _jsx("input", { "aria-label": "\u670D\u52A1\u540D\u79F0", required: true, maxLength: 80, value: name, disabled: busy || loading, placeholder: "\u4F8B\u5982\uFF1ADocmost \u6587\u6863", onChange: e => setName(e.target.value) }), _jsx("small", { children: "\u4F19\u4F34\u754C\u9762\u4E2D\u7684\u663E\u793A\u540D\u79F0\uFF0C\u4E0D\u662F\u670D\u52A1\u5730\u5740\uFF0C\u4E5F\u4E0D\u662F JSON \u5B57\u6BB5\u3002" })] }), _jsxs("label", { className: "is-wide", htmlFor: field, children: [_jsx("span", { children: importing ? '完整配置 JSON(包含 mcpServers)' : '连接配置 JSON(单个服务)' }), _jsx("small", { id: `${field}-hint`, children: hint })] }), _jsx("textarea", { className: "is-wide", id: field, rows: 10, value: json, disabled: busy || loading || (!!existing && revision === undefined), spellCheck: false, autoComplete: "off", "aria-describedby": `${field}-hint${error ? ` ${field}-error` : ''}`, "aria-invalid": !!error, onChange: e => setJson(e.target.value), placeholder: loading ? '正在读取当前配置…' : example }), existing && _jsxs("p", { className: "dsh-partner-form-help is-wide", children: [_jsx("button", { type: "button", disabled: busy || loading || (revision !== undefined && json !== original), onClick: () => { void load(revision === undefined ? false : !revealed); }, children: loading ? '正在读取…' : revision === undefined ? '重试读取配置' : revealed ? '隐藏敏感值' : '显示完整配置' }), json !== original && ' 配置已修改,保存后可重新切换显示方式。'] }), _jsxs("details", { className: "dsh-partner-mcp-examples is-wide", children: [_jsx("summary", { children: "\u67E5\u770B\u683C\u5F0F\u793A\u4F8B\uFF08\u4E0D\u4F1A\u8986\u76D6\u5DF2\u586B\u5199\u5185\u5BB9\uFF09" }), _jsx("small", { children: "HTTP \u670D\u52A1" }), _jsx("pre", { children: example }), _jsx("small", { children: "\u672C\u673A\u547D\u4EE4 \u00B7 stdio" }), _jsx("pre", { children: stdioExample })] }), _jsx("p", { className: "dsh-partner-form-help is-wide", children: "stdio \u5728 DSH \u6240\u5728\u673A\u5668\u6216\u5BB9\u5668\u4E2D\u6267\u884C\u547D\u4EE4\uFF0C\u8BF7\u53EA\u6DFB\u52A0\u53EF\u4FE1\u670D\u52A1\u3002\u914D\u7F6E\u4FDD\u5B58\u540E\uFF0C\u70B9\u51FB\u300C\u8FDE\u63A5 / \u5237\u65B0\u5DE5\u5177\u300D\uFF0C\u518D\u5728\u4F19\u4F34\u80FD\u529B\u4E2D\u6388\u6743\u3002" }), error && _jsx("div", { className: "is-wide", id: `${field}-error`, children: _jsx(WorkspaceNotice, { children: error }) }), _jsxs("footer", { children: [_jsx("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: "is-primary", disabled: busy || loading || (!!existing && revision === undefined), "aria-busy": busy, children: busy ? '保存中…' : importing ? '导入配置' : '保存配置' })] })] }) });
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=mcp-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-editor.js","sourceRoot":"","sources":["../../src/ui/mcp-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-panel.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-panel.tsx"],"names":[],"mappings":"AAQA,wBAAgB,QAAQ,IAAI,GAAG,CAAC,OAAO,CAgDtC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { IconPlusOutline16, IconRefreshOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { api } from '../client-api.js';
|
|
5
|
+
import { CollectionEmpty, CollectionSkeleton, WorkspaceBlock, WorkspaceDialog, WorkspaceHero, WorkspaceNotice, errorMessage } from './workspace-components.js';
|
|
6
|
+
import { FormField } from './partner-components.js';
|
|
7
|
+
import { McpEditor } from './mcp-editor.js';
|
|
8
|
+
export function McpPanel() {
|
|
9
|
+
const [catalog, setCatalog] = useState({ servers: [], bindings: [] });
|
|
10
|
+
const [loading, setLoading] = useState(true);
|
|
11
|
+
const [busy, setBusy] = useState('');
|
|
12
|
+
const [error, setError] = useState('');
|
|
13
|
+
const [notice, setNotice] = useState('');
|
|
14
|
+
const [query, setQuery] = useState('');
|
|
15
|
+
const [editor, setEditor] = useState();
|
|
16
|
+
const [deleting, setDeleting] = useState();
|
|
17
|
+
const [details, setDetails] = useState();
|
|
18
|
+
const load = useCallback(async () => {
|
|
19
|
+
try {
|
|
20
|
+
setCatalog(await api('/mcp'));
|
|
21
|
+
setError('');
|
|
22
|
+
}
|
|
23
|
+
catch (reason) {
|
|
24
|
+
setError(errorMessage(reason));
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
setLoading(false);
|
|
28
|
+
}
|
|
29
|
+
}, []);
|
|
30
|
+
useEffect(() => { void load(); }, [load]);
|
|
31
|
+
const action = async (server, kind) => {
|
|
32
|
+
setBusy(server.id);
|
|
33
|
+
setError('');
|
|
34
|
+
setNotice('');
|
|
35
|
+
try {
|
|
36
|
+
const next = await api(`/mcp/${server.id}${kind === 'refresh' ? '/refresh' : ''}`, {
|
|
37
|
+
method: kind === 'refresh' ? 'POST' : kind === 'delete' ? 'DELETE' : 'PUT',
|
|
38
|
+
...(kind === 'toggle' ? { body: JSON.stringify({ name: server.name, enabled: !server.enabled }) } : {}),
|
|
39
|
+
});
|
|
40
|
+
setCatalog(next);
|
|
41
|
+
setDeleting(undefined);
|
|
42
|
+
setNotice(kind === 'refresh' ? '连接成功,工具目录已刷新。已授权伙伴将在下一轮对话使用最新工具。' : kind === 'delete' ? 'MCP 服务与关联授权已删除。' : '状态已保存,下一轮生效;停用后立即阻止新的调用。');
|
|
43
|
+
}
|
|
44
|
+
catch (reason) {
|
|
45
|
+
setError(errorMessage(reason));
|
|
46
|
+
if (kind === 'refresh') {
|
|
47
|
+
try {
|
|
48
|
+
setCatalog(await api('/mcp'));
|
|
49
|
+
}
|
|
50
|
+
catch { /* retain list on network failure */ }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
setBusy('');
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const visible = catalog.servers.filter(s => s.name.toLocaleLowerCase().includes(query.trim().toLocaleLowerCase()));
|
|
58
|
+
return _jsxs("div", { className: "dsh-partner-feature-page", children: [_jsx(WorkspaceHero, { eyebrow: "Capability catalog", title: "MCP \u670D\u52A1", detail: "\u96C6\u4E2D\u7BA1\u7406\u5916\u90E8\u5DE5\u5177\uFF0C\u518D\u5728\u4F19\u4F34\u80FD\u529B\u4E2D\u5355\u72EC\u6388\u6743\u3002\u914D\u7F6E\u4E0E\u5DE5\u5177\u76EE\u5F55\u7684\u66F4\u65B0\u5728\u4E0B\u4E00\u8F6E\u5BF9\u8BDD\u751F\u6548\u3002", actions: _jsxs("button", { type: "button", disabled: loading || !!busy, onClick: () => { void load(); }, children: [_jsx(IconRefreshOutline16, { size: 15 }), "\u5237\u65B0\u5217\u8868"] }) }), error && !deleting && _jsx(WorkspaceNotice, { children: error }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), _jsxs(WorkspaceBlock, { title: "\u5DF2\u914D\u7F6E\u670D\u52A1", detail: `${catalog.servers.length} 个服务 · 安装不等于授权`, actions: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setEditor('import'), children: "\u5BFC\u5165 JSON" }), _jsxs("button", { type: "button", onClick: () => setEditor('new'), children: [_jsx(IconPlusOutline16, { size: 14 }), "\u65B0\u589E MCP"] })] }), children: [_jsx(FormField, { label: "\u641C\u7D22\u670D\u52A1", children: _jsx("input", { value: query, onChange: e => setQuery(e.target.value), placeholder: "\u6309\u670D\u52A1\u540D\u79F0\u641C\u7D22" }) }), loading ? _jsx(CollectionSkeleton, { rows: 2 }) : !visible.length ? _jsx(CollectionEmpty, { title: query ? '没有匹配的服务' : '还没有 MCP 服务', detail: "\u652F\u6301 Streamable HTTP \u548C stdio\uFF1B\u53EF\u76F4\u63A5\u5BFC\u5165 mcpServers JSON\u3002" }) : _jsx("div", { className: "dsh-partner-market-grid", children: visible.map(server => _jsxs("article", { children: [_jsxs("span", { children: [_jsxs("small", { children: [server.transport === 'stdio' ? '本机命令 · STDIO' : '远程服务 · HTTP', " \u00B7 ", server.enabled ? '已启用' : '已停用'] }), _jsx("strong", { children: server.name }), _jsxs("p", { children: [server.tools.length, " \u4E2A\u5DE5\u5177 \u00B7 ", catalog.bindings.filter(b => b.serverId === server.id).length, " \u4E2A\u4F19\u4F34\u83B7\u6388\u6743"] }), _jsx("small", { children: server.refreshedAt ? `上次刷新 ${new Date(server.refreshedAt).toLocaleString()}` : '尚未测试连接,请刷新工具' })] }), server.error && _jsx("p", { className: "dsh-partner-inline-error", role: "alert", children: server.error }), _jsxs("footer", { className: "dsh-partner-mcp-actions", children: [_jsx("button", { type: "button", disabled: !!busy, onClick: () => { void action(server, 'refresh'); }, children: busy === server.id ? '处理中…' : '连接 / 刷新工具' }), _jsx("button", { type: "button", onClick: () => setDetails(server), children: "\u5DE5\u5177\u5217\u8868" }), _jsx("button", { type: "button", disabled: !!busy, onClick: () => setEditor(server), children: "\u7F16\u8F91" }), _jsx("button", { type: "button", disabled: !!busy, onClick: () => { void action(server, 'toggle'); }, children: server.enabled ? '停用' : '启用' }), _jsx("button", { type: "button", disabled: !!busy, onClick: () => { setError(''); setDeleting(server); }, children: "\u5220\u9664" })] })] }, server.id)) })] }), editor && _jsx(McpEditor, { value: editor, close: () => setEditor(undefined), saved: next => { setCatalog(next); setNotice('配置已保存。请连接 / 刷新工具,然后在伙伴能力中授权。'); setEditor(undefined); } }), details && _jsx(WorkspaceDialog, { title: `${details.name} · 工具列表`, detail: "\u5237\u65B0\u5DE5\u5177\u4F1A\u91CD\u65B0\u83B7\u53D6\u540D\u79F0\u3001\u8BF4\u660E\u548C\u53C2\u6570\uFF1B\u4E0D\u6267\u884C\u4EFB\u4F55\u4E1A\u52A1\u5DE5\u5177\u3002", close: () => setDetails(undefined), children: !details.tools.length ? _jsx(CollectionEmpty, { title: "\u6682\u65E0\u5DE5\u5177", detail: "\u8BF7\u5148\u8FDE\u63A5 / \u5237\u65B0\u5DE5\u5177\u3002" }) : _jsx("div", { className: "dsh-partner-mcp-tool-list", children: details.tools.map(tool => _jsxs("details", { children: [_jsx("summary", { children: tool.name }), _jsx("p", { children: tool.description || '服务未提供说明' }), _jsx("pre", { children: JSON.stringify(tool.inputSchema, null, 2) })] }, tool.name)) }) }), deleting && _jsx(WorkspaceDialog, { title: "\u5220\u9664 MCP \u670D\u52A1", detail: `确认删除“${deleting.name}”?关联授权也会移除,不会删除远程服务的数据。`, close: () => { if (!busy)
|
|
59
|
+
setDeleting(undefined); }, children: _jsxs("div", { className: "dsh-partner-feature-form", children: [error && _jsx(WorkspaceNotice, { children: error }), _jsxs("footer", { children: [_jsx("button", { type: "button", disabled: !!busy, onClick: () => setDeleting(undefined), children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "is-primary", disabled: !!busy, onClick: () => { void action(deleting, 'delete'); }, children: busy ? '删除中…' : '确认删除' })] })] }) })] });
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=mcp-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-panel.js","sourceRoot":"","sources":["../../src/ui/mcp-panel.tsx"],"names":[],"mappings":"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"}
|