@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.
Files changed (152) hide show
  1. package/README.md +6 -0
  2. package/docs/channel-message-format.md +2 -0
  3. package/docs/mcp.md +54 -0
  4. package/docs/releases/2.4.0.md +11 -0
  5. package/docs/releases/2.4.1.md +9 -0
  6. package/lib/agent-runtime.d.ts.map +1 -1
  7. package/lib/agent-runtime.js +4 -0
  8. package/lib/agent-runtime.js.map +1 -1
  9. package/lib/api/features/mcp-api.d.ts +4 -0
  10. package/lib/api/features/mcp-api.d.ts.map +1 -0
  11. package/lib/api/features/mcp-api.js +37 -0
  12. package/lib/api/features/mcp-api.js.map +1 -0
  13. package/lib/api.d.ts +2 -0
  14. package/lib/api.d.ts.map +1 -1
  15. package/lib/api.js +3 -0
  16. package/lib/api.js.map +1 -1
  17. package/lib/capabilities.d.ts +1 -1
  18. package/lib/capabilities.d.ts.map +1 -1
  19. package/lib/capabilities.js +2 -2
  20. package/lib/capabilities.js.map +1 -1
  21. package/lib/client.d.ts.map +1 -1
  22. package/lib/client.js +1480 -1033
  23. package/lib/client.js.map +4 -4
  24. package/lib/collaboration/composition.d.ts +3 -0
  25. package/lib/collaboration/composition.d.ts.map +1 -1
  26. package/lib/collaboration/composition.js +5 -1
  27. package/lib/collaboration/composition.js.map +1 -1
  28. package/lib/collaboration/domain.d.ts +3 -0
  29. package/lib/collaboration/domain.d.ts.map +1 -1
  30. package/lib/collaboration/domain.js.map +1 -1
  31. package/lib/collaboration/review-dispatch.d.ts +5 -0
  32. package/lib/collaboration/review-dispatch.d.ts.map +1 -0
  33. package/lib/collaboration/review-dispatch.js +23 -0
  34. package/lib/collaboration/review-dispatch.js.map +1 -0
  35. package/lib/collaboration/service.d.ts.map +1 -1
  36. package/lib/collaboration/service.js +12 -3
  37. package/lib/collaboration/service.js.map +1 -1
  38. package/lib/companions/management.d.ts +4 -4
  39. package/lib/companions/removal.d.ts.map +1 -1
  40. package/lib/companions/removal.js +2 -0
  41. package/lib/companions/removal.js.map +1 -1
  42. package/lib/companions/session-configuration.d.ts.map +1 -1
  43. package/lib/companions/session-configuration.js +2 -0
  44. package/lib/companions/session-configuration.js.map +1 -1
  45. package/lib/core/validation.d.ts +2 -0
  46. package/lib/core/validation.d.ts.map +1 -1
  47. package/lib/core/validation.js +9 -0
  48. package/lib/core/validation.js.map +1 -1
  49. package/lib/domain.d.ts +2 -0
  50. package/lib/domain.d.ts.map +1 -1
  51. package/lib/domain.js.map +1 -1
  52. package/lib/execution/service.d.ts +3 -1
  53. package/lib/execution/service.d.ts.map +1 -1
  54. package/lib/execution/service.js +4 -0
  55. package/lib/execution/service.js.map +1 -1
  56. package/lib/index.d.ts.map +1 -1
  57. package/lib/index.js +7 -1
  58. package/lib/index.js.map +1 -1
  59. package/lib/mcp/config.d.ts +10 -0
  60. package/lib/mcp/config.d.ts.map +1 -0
  61. package/lib/mcp/config.js +54 -0
  62. package/lib/mcp/config.js.map +1 -0
  63. package/lib/mcp/connection-error.d.ts +3 -0
  64. package/lib/mcp/connection-error.d.ts.map +1 -0
  65. package/lib/mcp/connection-error.js +31 -0
  66. package/lib/mcp/connection-error.js.map +1 -0
  67. package/lib/mcp/connections.d.ts +11 -0
  68. package/lib/mcp/connections.d.ts.map +1 -0
  69. package/lib/mcp/connections.js +91 -0
  70. package/lib/mcp/connections.js.map +1 -0
  71. package/lib/mcp/credentials.d.ts +11 -0
  72. package/lib/mcp/credentials.d.ts.map +1 -0
  73. package/lib/mcp/credentials.js +25 -0
  74. package/lib/mcp/credentials.js.map +1 -0
  75. package/lib/mcp/domain.d.ts +41 -0
  76. package/lib/mcp/domain.d.ts.map +1 -0
  77. package/lib/mcp/domain.js +2 -0
  78. package/lib/mcp/domain.js.map +1 -0
  79. package/lib/mcp/edit-config.d.ts +6 -0
  80. package/lib/mcp/edit-config.d.ts.map +1 -0
  81. package/lib/mcp/edit-config.js +36 -0
  82. package/lib/mcp/edit-config.js.map +1 -0
  83. package/lib/mcp/service.d.ts +31 -0
  84. package/lib/mcp/service.d.ts.map +1 -0
  85. package/lib/mcp/service.js +227 -0
  86. package/lib/mcp/service.js.map +1 -0
  87. package/lib/mcp/state.d.ts +4 -0
  88. package/lib/mcp/state.d.ts.map +1 -0
  89. package/lib/mcp/state.js +29 -0
  90. package/lib/mcp/state.js.map +1 -0
  91. package/lib/requirements/plan-schema.d.ts +1 -0
  92. package/lib/requirements/plan-schema.d.ts.map +1 -1
  93. package/lib/requirements/plan-schema.js +2 -2
  94. package/lib/requirements/plan-schema.js.map +1 -1
  95. package/lib/requirements/service.js +2 -2
  96. package/lib/requirements/service.js.map +1 -1
  97. package/lib/requirements/tool.js +2 -2
  98. package/lib/requirements/tool.js.map +1 -1
  99. package/lib/skills/task-planning.d.ts +2 -2
  100. package/lib/skills/task-planning.d.ts.map +1 -1
  101. package/lib/skills/task-planning.js +3 -2
  102. package/lib/skills/task-planning.js.map +1 -1
  103. package/lib/storage/migrate-layout.d.ts.map +1 -1
  104. package/lib/storage/migrate-layout.js +1 -0
  105. package/lib/storage/migrate-layout.js.map +1 -1
  106. package/lib/storage/split-state.js +2 -2
  107. package/lib/storage/split-state.js.map +1 -1
  108. package/lib/store.d.ts.map +1 -1
  109. package/lib/store.js +2 -0
  110. package/lib/store.js.map +1 -1
  111. package/lib/tasks/result.d.ts.map +1 -1
  112. package/lib/tasks/result.js +4 -18
  113. package/lib/tasks/result.js.map +1 -1
  114. package/lib/tasks/scheduling.d.ts.map +1 -1
  115. package/lib/tasks/scheduling.js +3 -0
  116. package/lib/tasks/scheduling.js.map +1 -1
  117. package/lib/ui/capability-editor.d.ts.map +1 -1
  118. package/lib/ui/capability-editor.js +26 -17
  119. package/lib/ui/capability-editor.js.map +1 -1
  120. package/lib/ui/capability-resources.d.ts +12 -0
  121. package/lib/ui/capability-resources.d.ts.map +1 -0
  122. package/lib/ui/capability-resources.js +39 -0
  123. package/lib/ui/capability-resources.js.map +1 -0
  124. package/lib/ui/companion-access-panel.d.ts +2 -1
  125. package/lib/ui/companion-access-panel.d.ts.map +1 -1
  126. package/lib/ui/companion-access-panel.js +5 -1
  127. package/lib/ui/companion-access-panel.js.map +1 -1
  128. package/lib/ui/mcp-capabilities.d.ts +6 -0
  129. package/lib/ui/mcp-capabilities.d.ts.map +1 -0
  130. package/lib/ui/mcp-capabilities.js +53 -0
  131. package/lib/ui/mcp-capabilities.js.map +1 -0
  132. package/lib/ui/mcp-editor.d.ts +7 -0
  133. package/lib/ui/mcp-editor.d.ts.map +1 -0
  134. package/lib/ui/mcp-editor.js +85 -0
  135. package/lib/ui/mcp-editor.js.map +1 -0
  136. package/lib/ui/mcp-panel.d.ts +2 -0
  137. package/lib/ui/mcp-panel.d.ts.map +1 -0
  138. package/lib/ui/mcp-panel.js +61 -0
  139. package/lib/ui/mcp-panel.js.map +1 -0
  140. package/lib/ui/skills-panel.d.ts +2 -1
  141. package/lib/ui/skills-panel.d.ts.map +1 -1
  142. package/lib/ui/skills-panel.js +5 -1
  143. package/lib/ui/skills-panel.js.map +1 -1
  144. package/lib/ui/workspace-components.d.ts +2 -1
  145. package/lib/ui/workspace-components.d.ts.map +1 -1
  146. package/lib/ui/workspace-components.js +2 -2
  147. package/lib/ui/workspace-components.js.map +1 -1
  148. package/lib/ui/workspace-navigation.d.ts +9 -1
  149. package/lib/ui/workspace-navigation.d.ts.map +1 -1
  150. package/lib/ui/workspace-navigation.js +1 -0
  151. package/lib/ui/workspace-navigation.js.map +1 -1
  152. package/package.json +7 -3
@@ -1,15 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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 { CompanionSkillSettings } from './skills-panel.js';
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)); }, [companion.id, companion.updatedAt]);
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; setForm(next); setSaved(false); setError(undefined); };
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: form }) });
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
- setError(`保存失败:${message(reason)}。当前选择已保留,可重试。`);
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
- const enabled = group.choices.filter(choice => form.capabilities.includes(choice.id)).length;
79
- 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"] })] }), _jsx("div", { className: "dsh-partner-capabilities", children: group.choices.map(choice => {
80
- const active = form.capabilities.includes(choice.id);
81
- return _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 })] }, choice.id);
82
- }) })] }, group.id);
83
- }) }), form.capabilities.includes('skills') && companion.capabilities.includes('skills') && _jsx(CompanionSkillSettings, { companionId: companion.id }), form.capabilities.includes('skills') && !companion.capabilities.includes('skills') && _jsx("p", { className: "dsh-partner-inline-note", children: "\u5148\u5E94\u7528\u80FD\u529B\u7EC4\u5408\uFF0C\u518D\u4E3A\u5F53\u524D\u4F19\u4F34\u9009\u62E9\u5177\u4F53 Skill\u3002" }), _jsx(CompanionAccessPanel, { companionId: companion.id }), error && _jsx("p", { className: "dsh-partner-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-partner-form-actions is-capability-save", children: [_jsx("span", { role: "status", "aria-live": "polite", "aria-atomic": "true", children: saved && _jsxs(_Fragment, { children: [_jsx(IconCheckOutline14, { size: 14 }), _jsx("span", { children: "\u5DF2\u4FDD\u5B58\uFF0C\u4E0B\u4E00\u8F6E\u751F\u6548" })] }) }), _jsx("button", { type: "button", disabled: saving, "aria-busy": saving, onClick: () => { void save(); }, children: saving ? '正在保存…' : '应用能力组合' })] })] });
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":"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"}
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,CAmC1F"}
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":"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"}
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,6 @@
1
+ export declare function CompanionMcpSettings({ companionId, embedded, onBusyChange }: {
2
+ companionId: string;
3
+ embedded?: boolean;
4
+ onBusyChange?(busy: boolean): void;
5
+ }): JSX.Element;
6
+ //# sourceMappingURL=mcp-capabilities.d.ts.map
@@ -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,2 @@
1
+ export declare function McpPanel(): JSX.Element;
2
+ //# sourceMappingURL=mcp-panel.d.ts.map
@@ -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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"}