@jingyi0605/codingns4dsh 0.2.1-rc.6 → 0.2.1-rc.7

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 (124) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/data/build/dist/client/bundle.js +1412 -103
  4. package/data/build/dist/client/bundle.js.map +1 -1
  5. package/data/build/dist/client/client.native-workspace-store.js +1 -1
  6. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  7. package/data/build/dist/client/client.transport.js +202 -0
  8. package/data/build/dist/client/client.transport.js.map +1 -1
  9. package/data/build/dist/client/desktop-assistant.js +202 -0
  10. package/data/build/dist/client/features/index.d.ts +2 -1
  11. package/data/build/dist/client/features/index.d.ts.map +1 -1
  12. package/data/build/dist/client/features/index.js +3 -1
  13. package/data/build/dist/client/features/index.js.map +1 -1
  14. package/data/build/dist/client/features/magpie-management-page.d.ts +7 -3
  15. package/data/build/dist/client/features/magpie-management-page.d.ts.map +1 -1
  16. package/data/build/dist/client/features/magpie-management-page.js +142 -8
  17. package/data/build/dist/client/features/magpie-management-page.js.map +1 -1
  18. package/data/build/dist/client/features/workspace-mcp.d.ts +3 -0
  19. package/data/build/dist/client/features/workspace-mcp.d.ts.map +1 -0
  20. package/data/build/dist/client/features/workspace-mcp.js +320 -0
  21. package/data/build/dist/client/features/workspace-mcp.js.map +1 -0
  22. package/data/build/dist/client/locale.d.ts.map +1 -1
  23. package/data/build/dist/client/locale.js +176 -0
  24. package/data/build/dist/client/locale.js.map +1 -1
  25. package/data/build/dist/client/locales/magpie.d.ts.map +1 -1
  26. package/data/build/dist/client/locales/magpie.js +12 -0
  27. package/data/build/dist/client/locales/magpie.js.map +1 -1
  28. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  29. package/data/build/dist/client/locales/usage.js +14 -0
  30. package/data/build/dist/client/locales/usage.js.map +1 -1
  31. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  32. package/data/build/dist/client/subscription-slot.js +104 -11
  33. package/data/build/dist/client/subscription-slot.js.map +1 -1
  34. package/data/build/dist/dsh-capabilities/host/workspace-approval-adapter.d.ts +18 -0
  35. package/data/build/dist/dsh-capabilities/host/workspace-approval-adapter.d.ts.map +1 -0
  36. package/data/build/dist/dsh-capabilities/host/workspace-approval-adapter.js +172 -0
  37. package/data/build/dist/dsh-capabilities/host/workspace-approval-adapter.js.map +1 -0
  38. package/data/build/dist/dsh-capabilities/host/workspace-pending-questions-adapter.d.ts +28 -0
  39. package/data/build/dist/dsh-capabilities/host/workspace-pending-questions-adapter.d.ts.map +1 -0
  40. package/data/build/dist/dsh-capabilities/host/workspace-pending-questions-adapter.js +103 -0
  41. package/data/build/dist/dsh-capabilities/host/workspace-pending-questions-adapter.js.map +1 -0
  42. package/data/build/dist/dsh-capabilities/host/workspace-session-control-adapter.d.ts +26 -0
  43. package/data/build/dist/dsh-capabilities/host/workspace-session-control-adapter.d.ts.map +1 -0
  44. package/data/build/dist/dsh-capabilities/host/workspace-session-control-adapter.js +86 -0
  45. package/data/build/dist/dsh-capabilities/host/workspace-session-control-adapter.js.map +1 -0
  46. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  47. package/data/build/dist/dsh-capabilities/matrix.js +3 -0
  48. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  49. package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -1
  50. package/data/build/dist/dsh-capabilities/routes.js +9 -0
  51. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  52. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  53. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
  54. package/data/build/dist/dsh-capabilities/types.js.map +1 -1
  55. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
  56. package/data/build/dist/host/cli-adapters/claude-model-options.js +13 -2
  57. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
  58. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  59. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +1 -0
  60. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  61. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  62. package/data/build/dist/host/cli-adapters/feature.js +5 -1
  63. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  64. package/data/build/dist/host/cli-adapters/magpie-usage.d.ts +13 -2
  65. package/data/build/dist/host/cli-adapters/magpie-usage.d.ts.map +1 -1
  66. package/data/build/dist/host/cli-adapters/magpie-usage.js +180 -13
  67. package/data/build/dist/host/cli-adapters/magpie-usage.js.map +1 -1
  68. package/data/build/dist/host/features/index.d.ts +1 -0
  69. package/data/build/dist/host/features/index.d.ts.map +1 -1
  70. package/data/build/dist/host/features/index.js +3 -0
  71. package/data/build/dist/host/features/index.js.map +1 -1
  72. package/data/build/dist/host/features/workspace-mcp.d.ts +9 -0
  73. package/data/build/dist/host/features/workspace-mcp.d.ts.map +1 -0
  74. package/data/build/dist/host/features/workspace-mcp.js +197 -0
  75. package/data/build/dist/host/features/workspace-mcp.js.map +1 -0
  76. package/data/build/dist/host/index.d.ts.map +1 -1
  77. package/data/build/dist/host/index.js +6 -2
  78. package/data/build/dist/host/index.js.map +1 -1
  79. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  80. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  81. package/data/build/dist/host/native-session-bridge.js +30 -0
  82. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  83. package/data/build/dist/host/rpc.d.ts +4 -1
  84. package/data/build/dist/host/rpc.d.ts.map +1 -1
  85. package/data/build/dist/host/rpc.js +57 -9
  86. package/data/build/dist/host/rpc.js.map +1 -1
  87. package/data/build/dist/host/session-handle-eviction.d.ts +4 -2
  88. package/data/build/dist/host/session-handle-eviction.d.ts.map +1 -1
  89. package/data/build/dist/host/session-handle-eviction.js +10 -9
  90. package/data/build/dist/host/session-handle-eviction.js.map +1 -1
  91. package/data/build/dist/host/terminal/terminal-process-service.d.ts +22 -0
  92. package/data/build/dist/host/terminal/terminal-process-service.d.ts.map +1 -1
  93. package/data/build/dist/host/terminal/terminal-process-service.js +102 -0
  94. package/data/build/dist/host/terminal/terminal-process-service.js.map +1 -1
  95. package/data/build/dist/host/terminal/terminal-service.d.ts +5 -1
  96. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  97. package/data/build/dist/host/terminal/terminal-service.js +32 -0
  98. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  99. package/data/build/dist/host/workspace-mcp/api-key-store.d.ts +16 -0
  100. package/data/build/dist/host/workspace-mcp/api-key-store.d.ts.map +1 -0
  101. package/data/build/dist/host/workspace-mcp/api-key-store.js +65 -0
  102. package/data/build/dist/host/workspace-mcp/api-key-store.js.map +1 -0
  103. package/data/build/dist/host/workspace-mcp/tools.d.ts +54 -0
  104. package/data/build/dist/host/workspace-mcp/tools.d.ts.map +1 -0
  105. package/data/build/dist/host/workspace-mcp/tools.js +800 -0
  106. package/data/build/dist/host/workspace-mcp/tools.js.map +1 -0
  107. package/data/build/dist/host/workspace-mcp/transport.d.ts +35 -0
  108. package/data/build/dist/host/workspace-mcp/transport.d.ts.map +1 -0
  109. package/data/build/dist/host/workspace-mcp/transport.js +575 -0
  110. package/data/build/dist/host/workspace-mcp/transport.js.map +1 -0
  111. package/data/build/dist/shared/contracts/magpie-management.d.ts +15 -1
  112. package/data/build/dist/shared/contracts/magpie-management.d.ts.map +1 -1
  113. package/data/build/dist/shared/contracts/subscription.d.ts +7 -0
  114. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  115. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  116. package/data/build/dist/shared/contracts/terminal.d.ts +2 -0
  117. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  118. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  119. package/data/build/dist/shared/contracts/version.js +1 -1
  120. package/package.json +1 -1
  121. package/profile/README.md +2 -2
  122. package/profile/package.json +2 -2
  123. package/profile/version.json +1 -1
  124. package/version.json +1 -1
@@ -0,0 +1,320 @@
1
+ import { createElement, useEffect, useState } from 'react';
2
+ import { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js';
3
+ import { resolveCodingNsTranslator, useCodingNsTranslator } from '../locale.js';
4
+ import { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsNoteStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js';
5
+ import { uiFontSize } from '../font-scale.js';
6
+ const fallbackT = resolveCodingNsTranslator();
7
+ export const workspaceMcpFeature = {
8
+ descriptor: {
9
+ name: 'workspaceMcp',
10
+ version: '0.1.0',
11
+ enabledByDefault: false,
12
+ dependencies: [],
13
+ runtime: 'client',
14
+ ui: {
15
+ label: fallbackT('feature.workspaceMcp.label'),
16
+ description: fallbackT('feature.workspaceMcp.description'),
17
+ labelKey: 'feature.workspaceMcp.label',
18
+ descriptionKey: 'feature.workspaceMcp.description',
19
+ order: 60,
20
+ defaultOpen: false,
21
+ },
22
+ },
23
+ start() { },
24
+ settingsPanel: WorkspaceMcpPanel,
25
+ };
26
+ const WORKSPACE_MCP_CAPABILITIES = [
27
+ { name: 'workspace_list', permissionKey: 'workspaceMcp.capability.workspaceList.permission', descriptionKey: 'workspaceMcp.capability.workspaceList.description', parametersKey: 'workspaceMcp.capability.workspaceList.parameters', remarksKey: 'workspaceMcp.capability.workspaceList.remarks' },
28
+ { name: 'session_list', permissionKey: 'workspaceMcp.capability.sessionList.permission', descriptionKey: 'workspaceMcp.capability.sessionList.description', parametersKey: 'workspaceMcp.capability.sessionList.parameters', remarksKey: 'workspaceMcp.capability.sessionList.remarks' },
29
+ { name: 'session_create', permissionKey: 'workspaceMcp.capability.sessionCreate.permission', descriptionKey: 'workspaceMcp.capability.sessionCreate.description', parametersKey: 'workspaceMcp.capability.sessionCreate.parameters', remarksKey: 'workspaceMcp.capability.sessionCreate.remarks' },
30
+ { name: 'session_continue', permissionKey: 'workspaceMcp.capability.sessionContinue.permission', descriptionKey: 'workspaceMcp.capability.sessionContinue.description', parametersKey: 'workspaceMcp.capability.sessionContinue.parameters', remarksKey: 'workspaceMcp.capability.sessionContinue.remarks' },
31
+ { name: 'session_questions', permissionKey: 'workspaceMcp.capability.sessionQuestions.permission', descriptionKey: 'workspaceMcp.capability.sessionQuestions.description', parametersKey: 'workspaceMcp.capability.sessionQuestions.parameters', remarksKey: 'workspaceMcp.capability.sessionQuestions.remarks' },
32
+ { name: 'session_answer', permissionKey: 'workspaceMcp.capability.sessionAnswer.permission', descriptionKey: 'workspaceMcp.capability.sessionAnswer.description', parametersKey: 'workspaceMcp.capability.sessionAnswer.parameters', remarksKey: 'workspaceMcp.capability.sessionAnswer.remarks' },
33
+ { name: 'session_request_permission', permissionKey: 'workspaceMcp.capability.sessionRequestPermission.permission', descriptionKey: 'workspaceMcp.capability.sessionRequestPermission.description', parametersKey: 'workspaceMcp.capability.sessionRequestPermission.parameters', remarksKey: 'workspaceMcp.capability.sessionRequestPermission.remarks' },
34
+ { name: 'session_permission_status', permissionKey: 'workspaceMcp.capability.sessionPermissionStatus.permission', descriptionKey: 'workspaceMcp.capability.sessionPermissionStatus.description', parametersKey: 'workspaceMcp.capability.sessionPermissionStatus.parameters', remarksKey: 'workspaceMcp.capability.sessionPermissionStatus.remarks' },
35
+ { name: 'terminal_list', permissionKey: 'workspaceMcp.capability.terminalList.permission', descriptionKey: 'workspaceMcp.capability.terminalList.description', parametersKey: 'workspaceMcp.capability.terminalList.parameters', remarksKey: 'workspaceMcp.capability.terminalList.remarks' },
36
+ { name: 'terminal_read', permissionKey: 'workspaceMcp.capability.terminalRead.permission', descriptionKey: 'workspaceMcp.capability.terminalRead.description', parametersKey: 'workspaceMcp.capability.terminalRead.parameters', remarksKey: 'workspaceMcp.capability.terminalRead.remarks' },
37
+ { name: 'terminal_write', permissionKey: 'workspaceMcp.capability.terminalWrite.permission', descriptionKey: 'workspaceMcp.capability.terminalWrite.description', parametersKey: 'workspaceMcp.capability.terminalWrite.parameters', remarksKey: 'workspaceMcp.capability.terminalWrite.remarks' },
38
+ ];
39
+ const REASON_KEYS = {
40
+ 'api-key-missing': 'workspaceMcp.reason.keyMissing',
41
+ 'api-key-not-configured': 'workspaceMcp.reason.keyMissing',
42
+ 'key-store-failed': 'workspaceMcp.reason.keyStoreFailed',
43
+ disabled: 'workspaceMcp.reason.disabled',
44
+ 'listen-failed': 'workspaceMcp.reason.listenFailed',
45
+ 'listener-error': 'workspaceMcp.reason.listenFailed',
46
+ 'startup-failed': 'workspaceMcp.reason.listenFailed',
47
+ };
48
+ function WorkspaceMcpPanel({ services, enabled, notify }) {
49
+ const t = useCodingNsTranslator(services.locale);
50
+ const [status, setStatus] = useState(null);
51
+ const [loading, setLoading] = useState(true);
52
+ const [failed, setFailed] = useState(false);
53
+ const [refreshCount, setRefreshCount] = useState(0);
54
+ const [busy, setBusy] = useState(false);
55
+ const [generatedKey, setGeneratedKey] = useState(null);
56
+ const [capabilitiesOpen, setCapabilitiesOpen] = useState(false);
57
+ useEffect(() => {
58
+ let active = true;
59
+ setLoading(true);
60
+ setFailed(false);
61
+ void services.rpc.call(CODINGNS_RPC_CHANNEL, 'workspaceMcp/status', {}).then((result) => {
62
+ if (!result.ok)
63
+ throw new Error('Workspace MCP status request failed');
64
+ const next = normalizeStatus(result.value);
65
+ if (next === null)
66
+ throw new Error('Invalid Workspace MCP status');
67
+ if (active)
68
+ setStatus(next);
69
+ }).catch(() => {
70
+ if (active) {
71
+ setStatus(null);
72
+ setFailed(true);
73
+ }
74
+ }).finally(() => {
75
+ if (active)
76
+ setLoading(false);
77
+ });
78
+ return () => { active = false; };
79
+ }, [services.rpc, enabled, refreshCount]);
80
+ useEffect(() => {
81
+ if (!capabilitiesOpen)
82
+ return;
83
+ const closeOnEscape = (event) => {
84
+ if (event.key === 'Escape')
85
+ setCapabilitiesOpen(false);
86
+ };
87
+ globalThis.addEventListener('keydown', closeOnEscape);
88
+ return () => globalThis.removeEventListener('keydown', closeOnEscape);
89
+ }, [capabilitiesOpen]);
90
+ const reasonKey = status?.reason === null || status?.reason === undefined
91
+ ? null
92
+ : Object.prototype.hasOwnProperty.call(REASON_KEYS, status.reason)
93
+ ? REASON_KEYS[status.reason] ?? 'workspaceMcp.reason.other'
94
+ : 'workspaceMcp.reason.other';
95
+ const url = safeWorkspaceMcpUrl(status?.url);
96
+ const generateKey = async () => {
97
+ setBusy(true);
98
+ setGeneratedKey(null);
99
+ try {
100
+ const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'workspaceMcp/generate-key', {});
101
+ if (!result.ok || !isRecord(result.value) || typeof result.value.apiKey !== 'string') {
102
+ throw new Error(result.ok ? 'Invalid Workspace MCP key response' : result.error.message);
103
+ }
104
+ setGeneratedKey(result.value.apiKey);
105
+ setRefreshCount((count) => count + 1);
106
+ notify({ kind: 'success', message: t('workspaceMcp.keyGenerated') });
107
+ }
108
+ catch (error) {
109
+ notify({ kind: 'error', message: error instanceof Error ? error.message : String(error) });
110
+ }
111
+ finally {
112
+ setBusy(false);
113
+ }
114
+ };
115
+ const copyKey = async () => {
116
+ if (generatedKey === null)
117
+ return;
118
+ try {
119
+ await navigator.clipboard.writeText(generatedKey);
120
+ notify({ kind: 'success', message: t('workspaceMcp.keyCopied') });
121
+ }
122
+ catch {
123
+ notify({ kind: 'error', message: t('workspaceMcp.copyFailed') });
124
+ }
125
+ };
126
+ const installPrompt = t('workspaceMcp.installPromptText');
127
+ const copyInstallPrompt = async () => {
128
+ try {
129
+ await navigator.clipboard.writeText(installPrompt);
130
+ notify({ kind: 'success', message: t('workspaceMcp.installPromptCopied') });
131
+ }
132
+ catch {
133
+ notify({ kind: 'error', message: t('workspaceMcp.copyFailed') });
134
+ }
135
+ };
136
+ const compactButtonStyle = {
137
+ ...dshSettingsButtonStyle,
138
+ flex: '1 1 0',
139
+ minWidth: 0,
140
+ minHeight: 32,
141
+ padding: '6px 9px',
142
+ fontSize: uiFontSize(12),
143
+ lineHeight: 1.25,
144
+ whiteSpace: 'normal',
145
+ };
146
+ return createElement('div', {
147
+ style: { display: 'flex', flexDirection: 'column', gap: 12 },
148
+ }, createElement('div', { style: dshSettingsNoteStyle }, createElement('strong', { style: { display: 'block', marginBottom: 4 } }, t('workspaceMcp.setupTitle')), createElement('span', undefined, t('workspaceMcp.setupInstruction'))), createElement('div', { style: { display: 'flex', flexWrap: 'nowrap', gap: 8, minWidth: 0 } }, createElement('button', {
149
+ type: 'button',
150
+ style: compactButtonStyle,
151
+ onClick: () => setCapabilitiesOpen(true),
152
+ }, t('workspaceMcp.capabilityDescription')), createElement('button', {
153
+ type: 'button', disabled: busy || loading,
154
+ onClick: () => void generateKey(), style: compactButtonStyle,
155
+ }, busy ? t('workspaceMcp.generating') : t(status?.apiKeyConfigured ? 'workspaceMcp.rotateKey' : 'workspaceMcp.generateKey')), createElement('button', {
156
+ type: 'button',
157
+ disabled: loading || busy,
158
+ onClick: () => setRefreshCount((count) => count + 1),
159
+ style: compactButtonStyle,
160
+ }, t('workspaceMcp.refresh'))), generatedKey === null ? null : createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8, alignItems: 'center' } }, createElement('input', {
161
+ type: 'text', readOnly: true, value: generatedKey, autoComplete: 'off', spellCheck: false,
162
+ 'aria-label': t('workspaceMcp.generatedKey'), style: { ...dshSettingsFieldStyle, flex: '1 1 260px', minWidth: 0 },
163
+ onFocus: (event) => event.currentTarget.select(),
164
+ }), createElement('button', { type: 'button', onClick: () => void copyKey(), style: dshSettingsButtonStyle }, t('workspaceMcp.copyKey')), createElement('span', { style: { flexBasis: '100%', color: dshThemeColor.warning, fontSize: uiFontSize(12), lineHeight: 1.5 } }, t('workspaceMcp.keyShownOnce'))), createElement('div', { 'aria-live': 'polite', style: { display: 'flex', flexDirection: 'column', gap: 6, fontSize: uiFontSize(12), lineHeight: 1.5, overflowWrap: 'anywhere' } }, createElement('strong', undefined, t('workspaceMcp.statusTitle')), loading ? createElement('span', undefined, t('workspaceMcp.loading')) : null, failed ? createElement('span', { role: 'alert', style: { color: dshThemeColor.error } }, t('workspaceMcp.statusFailed')) : null, status !== null && !loading ? createElement('span', undefined, t('workspaceMcp.apiKeyStatus', { status: t(status.apiKeyConfigured ? 'workspaceMcp.configured' : 'workspaceMcp.notConfigured') })) : null, status !== null && !loading ? createElement('span', undefined, t('workspaceMcp.enabledStatus', { status: t(status.enabled ? 'workspaceMcp.on' : 'workspaceMcp.off') })) : null, status !== null && !loading ? createElement('span', undefined, t('workspaceMcp.listeningStatus', { status: t(status.listening ? 'workspaceMcp.on' : 'workspaceMcp.off') })) : null, status !== null && !loading && url !== null ? createElement('span', undefined, createElement('span', { style: { color: dshThemeColor.labelSecondary } }, `${t('workspaceMcp.url')}: `), createElement('code', undefined, url)) : null, reasonKey !== null && status !== null && !loading ? createElement('span', { style: { color: dshThemeColor.labelSecondary } }, t(reasonKey)) : null), createElement('div', { style: { display: 'flex', flexDirection: 'column', gap: 8, paddingTop: 12, borderTop: `1px solid ${dshThemeColor.border}` } }, createElement('strong', { style: { fontSize: uiFontSize(13) } }, t('workspaceMcp.installPromptTitle')), createElement('span', { style: { color: dshThemeColor.labelSecondary, fontSize: uiFontSize(12), lineHeight: 1.5 } }, t('workspaceMcp.installPromptHint')), createElement('pre', {
165
+ style: {
166
+ margin: 0,
167
+ padding: 10,
168
+ maxHeight: 112,
169
+ overflow: 'auto',
170
+ whiteSpace: 'pre-wrap',
171
+ overflowWrap: 'anywhere',
172
+ border: `1px solid ${dshThemeColor.border}`,
173
+ borderRadius: 6,
174
+ color: dshThemeColor.labelSecondary,
175
+ background: dshThemeColor.pageBackground,
176
+ fontSize: uiFontSize(11),
177
+ lineHeight: 1.45,
178
+ },
179
+ }, installPrompt), createElement('button', {
180
+ type: 'button',
181
+ onClick: () => void copyInstallPrompt(),
182
+ style: { ...dshSettingsButtonStyle, alignSelf: 'flex-end', minHeight: 32, padding: '6px 10px', fontSize: uiFontSize(12) },
183
+ }, t('workspaceMcp.copyInstallPrompt'))), capabilitiesOpen ? createWorkspaceMcpCapabilitiesModal(t, () => setCapabilitiesOpen(false)) : null);
184
+ }
185
+ function createWorkspaceMcpCapabilitiesModal(t, onClose) {
186
+ return createElement('div', {
187
+ role: 'presentation',
188
+ onClick: onClose,
189
+ style: {
190
+ position: 'fixed',
191
+ inset: 0,
192
+ zIndex: 2000,
193
+ display: 'flex',
194
+ alignItems: 'center',
195
+ justifyContent: 'center',
196
+ padding: 16,
197
+ background: 'rgba(0, 0, 0, 0.62)',
198
+ boxSizing: 'border-box',
199
+ },
200
+ 'data-workspace-mcp-capabilities': true,
201
+ }, createElement('div', {
202
+ role: 'dialog',
203
+ 'aria-modal': true,
204
+ 'aria-labelledby': 'codingns-workspace-mcp-capability-title',
205
+ onClick: (event) => event.stopPropagation(),
206
+ style: {
207
+ display: 'flex',
208
+ flexDirection: 'column',
209
+ width: 'min(960px, 100%)',
210
+ maxHeight: 'min(820px, calc(100dvh - 32px))',
211
+ overflow: 'hidden',
212
+ border: `1px solid ${dshThemeColor.border}`,
213
+ borderRadius: 12,
214
+ background: dshThemeColor.menuBackground,
215
+ color: dshThemeColor.labelPrimary,
216
+ boxShadow: '0 20px 70px rgba(0, 0, 0, 0.45)',
217
+ },
218
+ }, createElement('div', {
219
+ style: {
220
+ display: 'flex',
221
+ alignItems: 'flex-start',
222
+ justifyContent: 'space-between',
223
+ gap: 16,
224
+ padding: '18px 20px 14px',
225
+ borderBottom: `1px solid ${dshThemeColor.border}`,
226
+ },
227
+ }, createElement('div', { style: { minWidth: 0 } }, createElement('h2', {
228
+ id: 'codingns-workspace-mcp-capability-title',
229
+ style: { margin: 0, fontSize: uiFontSize(18), lineHeight: 1.3 },
230
+ }, t('workspaceMcp.capabilityTitle')), createElement('p', {
231
+ style: { margin: '6px 0 0', color: dshThemeColor.labelSecondary, fontSize: uiFontSize(12), lineHeight: 1.5 },
232
+ }, t('workspaceMcp.capabilitySubtitle'))), createElement('button', {
233
+ type: 'button',
234
+ 'aria-label': t('workspaceMcp.closeCapabilities'),
235
+ onClick: onClose,
236
+ style: { ...dshSettingsButtonStyle, minWidth: 36, padding: '8px 10px', fontSize: uiFontSize(18), lineHeight: 1 },
237
+ }, '×')), createElement('div', {
238
+ style: {
239
+ padding: 14,
240
+ overflowY: 'auto',
241
+ overflowX: 'auto',
242
+ overscrollBehavior: 'contain',
243
+ },
244
+ }, createElement('table', {
245
+ style: {
246
+ width: '100%',
247
+ minWidth: 900,
248
+ borderCollapse: 'collapse',
249
+ tableLayout: 'fixed',
250
+ fontSize: uiFontSize(13),
251
+ lineHeight: 1.5,
252
+ },
253
+ }, createElement('colgroup', undefined, createElement('col', { style: { width: 170 } }), createElement('col', { style: { width: 190 } }), createElement('col', { style: { width: 230 } }), createElement('col', { style: { width: 185 } }), createElement('col', { style: { width: 235 } })), createElement('thead', undefined, createElement('tr', undefined, ...[
254
+ 'workspaceMcp.capabilityName',
255
+ 'workspaceMcp.capabilityPermission',
256
+ 'workspaceMcp.capabilityDescriptionField',
257
+ 'workspaceMcp.capabilityParameters',
258
+ 'workspaceMcp.capabilityRemarks',
259
+ ].map((key) => createElement('th', {
260
+ key,
261
+ scope: 'col',
262
+ style: {
263
+ padding: '10px 12px',
264
+ textAlign: 'left',
265
+ verticalAlign: 'top',
266
+ color: dshThemeColor.labelSecondary,
267
+ fontSize: uiFontSize(12),
268
+ fontWeight: 650,
269
+ borderBottom: `1px solid ${dshThemeColor.border}`,
270
+ background: dshThemeColor.pageBackground,
271
+ },
272
+ }, t(key))))), createElement('tbody', undefined, ...WORKSPACE_MCP_CAPABILITIES.map((capability, index) => createElement('tr', {
273
+ key: capability.name,
274
+ style: { background: index % 2 === 0 ? 'rgba(255, 255, 255, 0.025)' : 'transparent' },
275
+ }, createElement('td', { style: capabilityCellStyle }, createElement('code', { style: { overflowWrap: 'anywhere' } }, capability.name)), createElement('td', { style: capabilityCellStyle }, t(capability.permissionKey)), createElement('td', { style: capabilityCellStyle }, t(capability.descriptionKey)), createElement('td', { style: capabilityCellStyle }, createElement('code', { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' } }, t(capability.parametersKey))), createElement('td', { style: capabilityCellStyle }, t(capability.remarksKey))))))), createElement('div', {
276
+ style: { display: 'flex', justifyContent: 'flex-end', padding: '12px 20px 16px', borderTop: `1px solid ${dshThemeColor.border}` },
277
+ }, createElement('button', { type: 'button', onClick: onClose, style: dshSettingsPrimaryButtonStyle }, t('workspaceMcp.closeCapabilities')))));
278
+ }
279
+ const capabilityCellStyle = {
280
+ padding: '11px 12px',
281
+ textAlign: 'left',
282
+ verticalAlign: 'top',
283
+ overflowWrap: 'anywhere',
284
+ borderBottom: `1px solid ${dshThemeColor.border}`,
285
+ };
286
+ function normalizeStatus(value) {
287
+ if (!isRecord(value)
288
+ || typeof value.apiKeyConfigured !== 'boolean'
289
+ || typeof value.enabled !== 'boolean'
290
+ || typeof value.listening !== 'boolean'
291
+ || (value.url !== null && typeof value.url !== 'string')
292
+ || (value.reason !== null && typeof value.reason !== 'string'))
293
+ return null;
294
+ return {
295
+ apiKeyConfigured: value.apiKeyConfigured,
296
+ enabled: value.enabled,
297
+ listening: value.listening,
298
+ url: value.url,
299
+ reason: value.reason,
300
+ };
301
+ }
302
+ function safeWorkspaceMcpUrl(value) {
303
+ if (value === null || value === undefined)
304
+ return null;
305
+ try {
306
+ const url = new URL(value);
307
+ if (url.protocol !== 'http:' || url.hostname !== '127.0.0.1'
308
+ || url.search !== '' || url.hash !== '' || url.pathname !== '/mcp'
309
+ || value !== `${url.origin}/mcp`)
310
+ return null;
311
+ return url.toString();
312
+ }
313
+ catch {
314
+ return null;
315
+ }
316
+ }
317
+ function isRecord(value) {
318
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
319
+ }
320
+ //# sourceMappingURL=workspace-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-mcp.js","sourceRoot":"","sources":["../../../../../src/client/features/workspace-mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../../../src/client/locale.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAoBjE,kDAAkD;AAClD,eAAO,MAAM,kBAAkB,EAAG,UAAmB,CAAA;AAErD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,QAAQ,EAAE,MAAM,CAAA;KACjB;CACF;AAED,sCAAsC;AACtC,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,CAAA;AACnG,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;AA88BlD,oCAAoC;AACpC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,IAAI,CAE/D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAMhF;AAYD,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAErF"}
1
+ {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../../../src/client/locale.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAoBjE,kDAAkD;AAClD,eAAO,MAAM,kBAAkB,EAAG,UAAmB,CAAA;AAErD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,QAAQ,EAAE,MAAM,CAAA;KACjB;CACF;AAED,sCAAsC;AACtC,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,CAAA;AACnG,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;AA8nClD,oCAAoC;AACpC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,IAAI,CAE/D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAMhF;AAYD,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAErF"}
@@ -51,6 +51,94 @@ const CORE_EN = {
51
51
  'feature.cliAdapters.description': 'View installed external Agents, versions, command paths, available models, and enable them independently. External Agent context panels keep only the occupancy percentage and totals.',
52
52
  'feature.workspaceSession.label': 'Workspace session enhancement',
53
53
  'feature.workspaceSession.description': 'Show Agent logos, archived-session entries, workspace hiding controls, subscription or usage information, local quick sessions, and an optional remembered conversation/right-sidebar width ratio.',
54
+ 'feature.workspaceMcp.label': 'Workspace MCP server',
55
+ 'feature.workspaceMcp.description': 'Expose managed workspace tools to local MCP clients through an authenticated Host listener.',
56
+ 'workspaceMcp.setupTitle': 'MCP access key',
57
+ 'workspaceMcp.setupInstruction': 'Generate a key to save it on the Host and enable the local MCP listener.',
58
+ 'workspaceMcp.generateKey': 'Generate key and enable',
59
+ 'workspaceMcp.rotateKey': 'Rotate key',
60
+ 'workspaceMcp.generating': 'Generating…',
61
+ 'workspaceMcp.generatedKey': 'Generated Workspace MCP API key',
62
+ 'workspaceMcp.keyGenerated': 'Workspace MCP key generated and module enabled.',
63
+ 'workspaceMcp.copyKey': 'Copy key',
64
+ 'workspaceMcp.keyCopied': 'Workspace MCP key copied.',
65
+ 'workspaceMcp.copyFailed': 'Could not copy the key. Select and copy it manually.',
66
+ 'workspaceMcp.keyShownOnce': 'This key is shown only now. Copy it into your MCP client before closing or refreshing this panel.',
67
+ 'workspaceMcp.capabilityDescription': 'MCP capability description',
68
+ 'workspaceMcp.capabilityTitle': 'Supported MCP capabilities',
69
+ 'workspaceMcp.capabilitySubtitle': 'The list below describes the fixed Workspace MCP tool catalog and its access boundaries.',
70
+ 'workspaceMcp.capabilityName': 'Name',
71
+ 'workspaceMcp.capabilityPermission': 'Permission',
72
+ 'workspaceMcp.capabilityDescriptionField': 'Description',
73
+ 'workspaceMcp.capabilityParameters': 'Invocation parameters',
74
+ 'workspaceMcp.capabilityRemarks': 'Remarks',
75
+ 'workspaceMcp.closeCapabilities': 'Close',
76
+ 'workspaceMcp.installPromptTitle': 'Install the Agent Skill',
77
+ 'workspaceMcp.installPromptHint': 'Copy this prompt to your Agent. It will install the root SKILL.md into that Agent’s personal skills directory.',
78
+ 'workspaceMcp.copyInstallPrompt': 'Copy install prompt',
79
+ 'workspaceMcp.installPromptCopied': 'Agent Skill installation prompt copied.',
80
+ 'workspaceMcp.installPromptText': 'Fetch https://github.com/jingyi0605/Codingns4DSH/blob/main/SKILL.md and install it into your personal Agent Skills directory using your documented Skill installation method.',
81
+ 'workspaceMcp.capability.workspaceList.permission': 'Read managed workspace metadata',
82
+ 'workspaceMcp.capability.workspaceList.description': 'Lists managed workspaces available to the local Host.',
83
+ 'workspaceMcp.capability.workspaceList.parameters': '{}',
84
+ 'workspaceMcp.capability.workspaceList.remarks': 'Returns names and active session counts; filesystem roots are never exposed.',
85
+ 'workspaceMcp.capability.sessionList.permission': 'Read bounded session metadata',
86
+ 'workspaceMcp.capability.sessionList.description': 'Lists sessions belonging to managed workspaces.',
87
+ 'workspaceMcp.capability.sessionList.parameters': '{ workspaceId?, limit?, offset? }',
88
+ 'workspaceMcp.capability.sessionList.remarks': 'Results are paginated and contain metadata only, without full conversation history.',
89
+ 'workspaceMcp.capability.sessionCreate.permission': 'Create a managed session and optionally queue a prompt',
90
+ 'workspaceMcp.capability.sessionCreate.description': 'Creates a native DSH session and can select an installed adapter/model.',
91
+ 'workspaceMcp.capability.sessionCreate.parameters': '{ workspaceId, adapterId?, modelId?, prompt? }',
92
+ 'workspaceMcp.capability.sessionCreate.remarks': 'External adapter sessions require an initial prompt; uncertain outcomes include the created session ID.',
93
+ 'workspaceMcp.capability.sessionContinue.permission': 'Queue a message in an existing session',
94
+ 'workspaceMcp.capability.sessionContinue.description': 'Continues one exact managed session without replacing its identity.',
95
+ 'workspaceMcp.capability.sessionContinue.parameters': '{ sessionId, message }',
96
+ 'workspaceMcp.capability.sessionContinue.remarks': 'The session is revalidated immediately before prompt admission.',
97
+ 'workspaceMcp.capability.sessionQuestions.permission': 'Read unresolved native questions',
98
+ 'workspaceMcp.capability.sessionQuestions.description': 'Lists questions currently awaiting an answer in a managed session.',
99
+ 'workspaceMcp.capability.sessionQuestions.parameters': '{ sessionId }',
100
+ 'workspaceMcp.capability.sessionQuestions.remarks': 'Question content and options are bounded; archived or unrelated sessions are rejected.',
101
+ 'workspaceMcp.capability.sessionAnswer.permission': 'Answer one unresolved native question',
102
+ 'workspaceMcp.capability.sessionAnswer.description': 'Submits validated answers through the native DSH question mechanism.',
103
+ 'workspaceMcp.capability.sessionAnswer.parameters': '{ sessionId, callId, answer }',
104
+ 'workspaceMcp.capability.sessionAnswer.remarks': 'The call ID must come from the current question list and answers are checked against its options.',
105
+ 'workspaceMcp.capability.sessionRequestPermission.permission': 'Request human approval',
106
+ 'workspaceMcp.capability.sessionRequestPermission.description': 'Asks the native DSH approval UI to decide an operation.',
107
+ 'workspaceMcp.capability.sessionRequestPermission.parameters': '{ sessionId, toolName, reason, callId? }',
108
+ 'workspaceMcp.capability.sessionRequestPermission.remarks': 'Requires an active DSH turn; the MCP client cannot approve its own request.',
109
+ 'workspaceMcp.capability.sessionPermissionStatus.permission': 'Read an owned approval outcome',
110
+ 'workspaceMcp.capability.sessionPermissionStatus.description': 'Reads the status of an approval request created by this MCP feature.',
111
+ 'workspaceMcp.capability.sessionPermissionStatus.parameters': '{ sessionId, requestId }',
112
+ 'workspaceMcp.capability.sessionPermissionStatus.remarks': 'Only DSH-issued request IDs retained by the live feature are queryable.',
113
+ 'workspaceMcp.capability.terminalList.permission': 'Read live terminal metadata',
114
+ 'workspaceMcp.capability.terminalList.description': 'Lists terminal instances attached to one managed session.',
115
+ 'workspaceMcp.capability.terminalList.parameters': '{ workspaceId, sessionId }',
116
+ 'workspaceMcp.capability.terminalList.remarks': 'Only live terminals in the specified workspace/session scope are returned.',
117
+ 'workspaceMcp.capability.terminalRead.permission': 'Read terminal output',
118
+ 'workspaceMcp.capability.terminalRead.description': 'Returns a bounded output snapshot from one live terminal.',
119
+ 'workspaceMcp.capability.terminalRead.parameters': '{ workspaceId, sessionId, terminalId, limitBytes? }',
120
+ 'workspaceMcp.capability.terminalRead.remarks': 'Output is limited to 64 KiB and is never read from an unrelated terminal.',
121
+ 'workspaceMcp.capability.terminalWrite.permission': 'Write terminal input',
122
+ 'workspaceMcp.capability.terminalWrite.description': 'Writes bounded text to one existing live terminal process.',
123
+ 'workspaceMcp.capability.terminalWrite.parameters': '{ workspaceId, sessionId, terminalId, data }',
124
+ 'workspaceMcp.capability.terminalWrite.remarks': 'Input is limited to 16 KiB, rejects NUL bytes, and cannot create arbitrary processes.',
125
+ 'workspaceMcp.statusTitle': 'Host status',
126
+ 'workspaceMcp.loading': 'Reading Workspace MCP status…',
127
+ 'workspaceMcp.statusFailed': 'Unable to read Workspace MCP status from the Host.',
128
+ 'workspaceMcp.apiKeyStatus': 'API key: {status}',
129
+ 'workspaceMcp.enabledStatus': 'Module: {status}',
130
+ 'workspaceMcp.listeningStatus': 'Listener: {status}',
131
+ 'workspaceMcp.configured': 'configured',
132
+ 'workspaceMcp.notConfigured': 'not configured',
133
+ 'workspaceMcp.on': 'on',
134
+ 'workspaceMcp.off': 'off',
135
+ 'workspaceMcp.url': 'Endpoint',
136
+ 'workspaceMcp.refresh': 'Refresh status',
137
+ 'workspaceMcp.reason.keyMissing': 'Generate a Workspace MCP API key to start the listener.',
138
+ 'workspaceMcp.reason.keyStoreFailed': 'The Host could not access the Workspace MCP key file.',
139
+ 'workspaceMcp.reason.disabled': 'The Workspace MCP module is disabled.',
140
+ 'workspaceMcp.reason.listenFailed': 'The local MCP listener could not start.',
141
+ 'workspaceMcp.reason.other': 'The Host reported an additional status reason.',
54
142
  'feature.assistant.label': 'Global smart assistant (Testing)',
55
143
  'feature.assistant.description': 'Summarize progress across selected workspaces and route voice or text instructions to an explicit target session. After enabling this module, fully quit and restart DSH Desktop.',
56
144
  'voice.globalAssistant': 'Global voice assistant (Testing)',
@@ -511,6 +599,94 @@ const CORE_ZH = {
511
599
  'feature.cliAdapters.description': '管理外部 Agent',
512
600
  'feature.workspaceSession.label': '工作区会话增强',
513
601
  'feature.workspaceSession.description': '增强工作区会话体验',
602
+ 'feature.workspaceMcp.label': '工作区 MCP 服务',
603
+ 'feature.workspaceMcp.description': '通过 Host 本机认证监听器向 MCP 客户端提供受管理工作区工具。',
604
+ 'workspaceMcp.setupTitle': 'MCP 访问密钥',
605
+ 'workspaceMcp.setupInstruction': '生成密钥后会保存在 Host 并自动启用本机 MCP 监听器。',
606
+ 'workspaceMcp.generateKey': '生成密钥并启用',
607
+ 'workspaceMcp.rotateKey': '轮换密钥',
608
+ 'workspaceMcp.generating': '正在生成…',
609
+ 'workspaceMcp.generatedKey': '生成的 Workspace MCP API Key',
610
+ 'workspaceMcp.keyGenerated': 'Workspace MCP 密钥已生成,模块已启用。',
611
+ 'workspaceMcp.copyKey': '复制密钥',
612
+ 'workspaceMcp.keyCopied': 'Workspace MCP 密钥已复制。',
613
+ 'workspaceMcp.copyFailed': '无法复制密钥,请手动选择并复制。',
614
+ 'workspaceMcp.keyShownOnce': '密钥仅在此时显示。关闭或刷新面板前,请先复制到 MCP 客户端。',
615
+ 'workspaceMcp.capabilityDescription': 'MCP 能力说明',
616
+ 'workspaceMcp.capabilityTitle': '支持的 MCP 能力',
617
+ 'workspaceMcp.capabilitySubtitle': '以下列表说明 Workspace MCP 的固定工具目录及其访问边界。',
618
+ 'workspaceMcp.capabilityName': '名称',
619
+ 'workspaceMcp.capabilityPermission': '权限',
620
+ 'workspaceMcp.capabilityDescriptionField': '描述',
621
+ 'workspaceMcp.capabilityParameters': '调用参数',
622
+ 'workspaceMcp.capabilityRemarks': '备注',
623
+ 'workspaceMcp.closeCapabilities': '关闭',
624
+ 'workspaceMcp.installPromptTitle': '安装 Agent Skill',
625
+ 'workspaceMcp.installPromptHint': '复制此提示词并发送给 Agent,它会将仓库根目录的 SKILL.md 安装到该 Agent 的个人 Skills 目录。',
626
+ 'workspaceMcp.copyInstallPrompt': '复制安装提示词',
627
+ 'workspaceMcp.installPromptCopied': 'Agent Skill 安装提示词已复制。',
628
+ 'workspaceMcp.installPromptText': '获取 https://github.com/jingyi0605/Codingns4DSH/blob/main/SKILL.md,并使用你已记录的 Skill 安装方式,将其安装到你自己的 Agent 个人 Skills 目录。',
629
+ 'workspaceMcp.capability.workspaceList.permission': '读取受管理工作区元数据',
630
+ 'workspaceMcp.capability.workspaceList.description': '列出当前 Host 可管理的工作区。',
631
+ 'workspaceMcp.capability.workspaceList.parameters': '{}',
632
+ 'workspaceMcp.capability.workspaceList.remarks': '只返回名称和活动会话数,不暴露文件系统根目录。',
633
+ 'workspaceMcp.capability.sessionList.permission': '读取有界会话元数据',
634
+ 'workspaceMcp.capability.sessionList.description': '列出受管理工作区中的会话。',
635
+ 'workspaceMcp.capability.sessionList.parameters': '{ workspaceId?, limit?, offset? }',
636
+ 'workspaceMcp.capability.sessionList.remarks': '结果支持分页,只返回元数据,不返回完整对话历史。',
637
+ 'workspaceMcp.capability.sessionCreate.permission': '创建受管理会话并可排队发送初始提示',
638
+ 'workspaceMcp.capability.sessionCreate.description': '创建原生 DSH 会话,并可选择已安装的适配器和模型。',
639
+ 'workspaceMcp.capability.sessionCreate.parameters': '{ workspaceId, adapterId?, modelId?, prompt? }',
640
+ 'workspaceMcp.capability.sessionCreate.remarks': '外部适配器会话必须提供初始提示;不确定结果会返回已创建的会话 ID。',
641
+ 'workspaceMcp.capability.sessionContinue.permission': '向已有会话排队发送消息',
642
+ 'workspaceMcp.capability.sessionContinue.description': '继续指定的受管理会话,不替换其身份。',
643
+ 'workspaceMcp.capability.sessionContinue.parameters': '{ sessionId, message }',
644
+ 'workspaceMcp.capability.sessionContinue.remarks': '消息接纳前会重新校验会话归属和可用性。',
645
+ 'workspaceMcp.capability.sessionQuestions.permission': '读取未解决的原生问题',
646
+ 'workspaceMcp.capability.sessionQuestions.description': '列出受管理会话中等待回答的问题。',
647
+ 'workspaceMcp.capability.sessionQuestions.parameters': '{ sessionId }',
648
+ 'workspaceMcp.capability.sessionQuestions.remarks': '问题内容和选项有大小限制;归档或无关会话会被拒绝。',
649
+ 'workspaceMcp.capability.sessionAnswer.permission': '回答一个未解决的原生问题',
650
+ 'workspaceMcp.capability.sessionAnswer.description': '通过 DSH 原生问题机制提交经过校验的答案。',
651
+ 'workspaceMcp.capability.sessionAnswer.parameters': '{ sessionId, callId, answer }',
652
+ 'workspaceMcp.capability.sessionAnswer.remarks': 'callId 必须来自当前问题列表,答案会按原生选项校验。',
653
+ 'workspaceMcp.capability.sessionRequestPermission.permission': '请求人工审批',
654
+ 'workspaceMcp.capability.sessionRequestPermission.description': '通过 DSH 原生审批界面请求对某项操作作出决定。',
655
+ 'workspaceMcp.capability.sessionRequestPermission.parameters': '{ sessionId, toolName, reason, callId? }',
656
+ 'workspaceMcp.capability.sessionRequestPermission.remarks': '必须存在活动 DSH 回合;MCP 客户端不能批准自己的请求。',
657
+ 'workspaceMcp.capability.sessionPermissionStatus.permission': '读取已拥有的审批结果',
658
+ 'workspaceMcp.capability.sessionPermissionStatus.description': '读取当前 MCP 模块创建的审批请求状态。',
659
+ 'workspaceMcp.capability.sessionPermissionStatus.parameters': '{ sessionId, requestId }',
660
+ 'workspaceMcp.capability.sessionPermissionStatus.remarks': '只能查询当前模块保留的 DSH 原生请求 ID。',
661
+ 'workspaceMcp.capability.terminalList.permission': '读取活动终端元数据',
662
+ 'workspaceMcp.capability.terminalList.description': '列出一个受管理会话附属的终端实例。',
663
+ 'workspaceMcp.capability.terminalList.parameters': '{ workspaceId, sessionId }',
664
+ 'workspaceMcp.capability.terminalList.remarks': '只返回指定工作区和会话范围内的活动终端。',
665
+ 'workspaceMcp.capability.terminalRead.permission': '读取终端输出',
666
+ 'workspaceMcp.capability.terminalRead.description': '读取一个活动终端的有界输出快照。',
667
+ 'workspaceMcp.capability.terminalRead.parameters': '{ workspaceId, sessionId, terminalId, limitBytes? }',
668
+ 'workspaceMcp.capability.terminalRead.remarks': '输出上限为 64 KiB,不会读取其他终端。',
669
+ 'workspaceMcp.capability.terminalWrite.permission': '写入终端输入',
670
+ 'workspaceMcp.capability.terminalWrite.description': '向一个已有的活动终端进程写入有界文本。',
671
+ 'workspaceMcp.capability.terminalWrite.parameters': '{ workspaceId, sessionId, terminalId, data }',
672
+ 'workspaceMcp.capability.terminalWrite.remarks': '输入上限为 16 KiB,拒绝 NUL 字节,不能创建任意进程。',
673
+ 'workspaceMcp.statusTitle': 'Host 状态',
674
+ 'workspaceMcp.loading': '正在读取工作区 MCP 状态…',
675
+ 'workspaceMcp.statusFailed': '无法从 Host 读取工作区 MCP 状态。',
676
+ 'workspaceMcp.apiKeyStatus': 'API Key:{status}',
677
+ 'workspaceMcp.enabledStatus': '模块:{status}',
678
+ 'workspaceMcp.listeningStatus': '监听器:{status}',
679
+ 'workspaceMcp.configured': '已配置',
680
+ 'workspaceMcp.notConfigured': '未配置',
681
+ 'workspaceMcp.on': '已开启',
682
+ 'workspaceMcp.off': '已关闭',
683
+ 'workspaceMcp.url': '端点',
684
+ 'workspaceMcp.refresh': '刷新状态',
685
+ 'workspaceMcp.reason.keyMissing': '请生成 Workspace MCP API Key 以启动监听器。',
686
+ 'workspaceMcp.reason.keyStoreFailed': 'Host 无法访问 Workspace MCP 密钥文件。',
687
+ 'workspaceMcp.reason.disabled': '工作区 MCP 模块已关闭。',
688
+ 'workspaceMcp.reason.listenFailed': '本机 MCP 监听器无法启动。',
689
+ 'workspaceMcp.reason.other': 'Host 返回了其他状态原因。',
514
690
  'feature.assistant.label': '全局智能助理(测试中)',
515
691
  'feature.assistant.description': '汇总受管工作区进展,并把语音或文字指令派发到明确的目标会话。启用该模块后,请彻底重启 DSH Desktop。',
516
692
  'voice.globalAssistant': '全局语音助理(测试中)',