@lemoncat7/dsh-ssh 1.1.8 → 1.3.0-alpha.9

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 (126) hide show
  1. package/ARCHITECTURE.md +77 -0
  2. package/README.md +39 -18
  3. package/lib/activity-panel.d.ts +17 -0
  4. package/lib/activity-panel.d.ts.map +1 -0
  5. package/lib/activity-panel.js +160 -0
  6. package/lib/activity-panel.js.map +1 -0
  7. package/lib/adaptive-workspace.d.ts.map +1 -1
  8. package/lib/adaptive-workspace.js +19 -4
  9. package/lib/adaptive-workspace.js.map +1 -1
  10. package/lib/api.d.ts +8 -0
  11. package/lib/api.d.ts.map +1 -1
  12. package/lib/api.js +306 -14
  13. package/lib/api.js.map +1 -1
  14. package/lib/client-api.d.ts +86 -0
  15. package/lib/client-api.d.ts.map +1 -1
  16. package/lib/client-api.js +27 -0
  17. package/lib/client-api.js.map +1 -1
  18. package/lib/client.d.ts.map +1 -1
  19. package/lib/client.js +4070 -21049
  20. package/lib/client.js.map +4 -4
  21. package/lib/connector.js +2 -2
  22. package/lib/connector.js.map +1 -1
  23. package/lib/credentials.d.ts +9 -0
  24. package/lib/credentials.d.ts.map +1 -1
  25. package/lib/credentials.js +16 -0
  26. package/lib/credentials.js.map +1 -1
  27. package/lib/domain.d.ts +58 -1
  28. package/lib/domain.d.ts.map +1 -1
  29. package/lib/domain.js +47 -0
  30. package/lib/domain.js.map +1 -1
  31. package/lib/endpoint-session-manager.d.ts +16 -0
  32. package/lib/endpoint-session-manager.d.ts.map +1 -0
  33. package/lib/endpoint-session-manager.js +70 -0
  34. package/lib/endpoint-session-manager.js.map +1 -0
  35. package/lib/file-transfer-manager.d.ts +50 -0
  36. package/lib/file-transfer-manager.d.ts.map +1 -0
  37. package/lib/file-transfer-manager.js +257 -0
  38. package/lib/file-transfer-manager.js.map +1 -0
  39. package/lib/file-transfer-tools.d.ts +6 -0
  40. package/lib/file-transfer-tools.d.ts.map +1 -0
  41. package/lib/file-transfer-tools.js +143 -0
  42. package/lib/file-transfer-tools.js.map +1 -0
  43. package/lib/file-transfer-workspace.d.ts +10 -0
  44. package/lib/file-transfer-workspace.d.ts.map +1 -0
  45. package/lib/file-transfer-workspace.js +299 -0
  46. package/lib/file-transfer-workspace.js.map +1 -0
  47. package/lib/ftp-adapter.d.ts +18 -0
  48. package/lib/ftp-adapter.d.ts.map +1 -0
  49. package/lib/ftp-adapter.js +240 -0
  50. package/lib/ftp-adapter.js.map +1 -0
  51. package/lib/ftp-profile-editor.d.ts +9 -0
  52. package/lib/ftp-profile-editor.d.ts.map +1 -0
  53. package/lib/ftp-profile-editor.js +89 -0
  54. package/lib/ftp-profile-editor.js.map +1 -0
  55. package/lib/index.d.ts.map +1 -1
  56. package/lib/index.js +17 -2
  57. package/lib/index.js.map +1 -1
  58. package/lib/network-dialer.d.ts +12 -0
  59. package/lib/network-dialer.d.ts.map +1 -0
  60. package/lib/network-dialer.js +27 -0
  61. package/lib/network-dialer.js.map +1 -0
  62. package/lib/profile-editor.d.ts +16 -0
  63. package/lib/profile-editor.d.ts.map +1 -0
  64. package/lib/profile-editor.js +143 -0
  65. package/lib/profile-editor.js.map +1 -0
  66. package/lib/project-session-dialog.d.ts +15 -0
  67. package/lib/project-session-dialog.d.ts.map +1 -0
  68. package/lib/project-session-dialog.js +60 -0
  69. package/lib/project-session-dialog.js.map +1 -0
  70. package/lib/proxy.d.ts +3 -3
  71. package/lib/proxy.d.ts.map +1 -1
  72. package/lib/proxy.js +11 -7
  73. package/lib/proxy.js.map +1 -1
  74. package/lib/remote-file-systems.d.ts +9 -0
  75. package/lib/remote-file-systems.d.ts.map +1 -0
  76. package/lib/remote-file-systems.js +23 -0
  77. package/lib/remote-file-systems.js.map +1 -0
  78. package/lib/remote-files.d.ts +51 -0
  79. package/lib/remote-files.d.ts.map +1 -0
  80. package/lib/remote-files.js +36 -0
  81. package/lib/remote-files.js.map +1 -0
  82. package/lib/remote-workspace-tree.d.ts +28 -0
  83. package/lib/remote-workspace-tree.d.ts.map +1 -0
  84. package/lib/remote-workspace-tree.js +117 -0
  85. package/lib/remote-workspace-tree.js.map +1 -0
  86. package/lib/resizable-split.d.ts +10 -0
  87. package/lib/resizable-split.d.ts.map +1 -0
  88. package/lib/resizable-split.js +115 -0
  89. package/lib/resizable-split.js.map +1 -0
  90. package/lib/session-access-channel.d.ts +6 -0
  91. package/lib/session-access-channel.d.ts.map +1 -0
  92. package/lib/session-access-channel.js +10 -0
  93. package/lib/session-access-channel.js.map +1 -0
  94. package/lib/session-access.d.ts +18 -0
  95. package/lib/session-access.d.ts.map +1 -0
  96. package/lib/session-access.js +102 -0
  97. package/lib/session-access.js.map +1 -0
  98. package/lib/sftp-adapter.d.ts +13 -0
  99. package/lib/sftp-adapter.d.ts.map +1 -0
  100. package/lib/sftp-adapter.js +28 -0
  101. package/lib/sftp-adapter.js.map +1 -0
  102. package/lib/sftp-client.d.ts +5 -1
  103. package/lib/sftp-client.d.ts.map +1 -1
  104. package/lib/sftp-client.js +85 -31
  105. package/lib/sftp-client.js.map +1 -1
  106. package/lib/sftp.d.ts +7 -0
  107. package/lib/sftp.d.ts.map +1 -1
  108. package/lib/sftp.js +215 -6
  109. package/lib/sftp.js.map +1 -1
  110. package/lib/store.d.ts +5 -1
  111. package/lib/store.d.ts.map +1 -1
  112. package/lib/store.js +83 -3
  113. package/lib/store.js.map +1 -1
  114. package/lib/terminal.d.ts +2 -0
  115. package/lib/terminal.d.ts.map +1 -1
  116. package/lib/terminal.js +10 -2
  117. package/lib/terminal.js.map +1 -1
  118. package/lib/tools.d.ts +3 -1
  119. package/lib/tools.d.ts.map +1 -1
  120. package/lib/tools.js +4 -1
  121. package/lib/tools.js.map +1 -1
  122. package/lib/ui-components.d.ts +25 -0
  123. package/lib/ui-components.d.ts.map +1 -0
  124. package/lib/ui-components.js +27 -0
  125. package/lib/ui-components.js.map +1 -0
  126. package/package.json +8 -2
@@ -0,0 +1,143 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { IconCheckOutline14, IconChevronDownOutline14, IconChevronUpOutline14, IconPlusOutline16, IconTrashOutline16, IconUserOutline16, } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ import { ApiError, api, profileAddress, } from './client-api.js';
5
+ import { Dialog, Field, errorMessage } from './ui-components.js';
6
+ export function ProfileDeleteDialog({ profile, dependents, onClose, onDeleted }) {
7
+ const [deleting, setDeleting] = useState(false);
8
+ const [error, setError] = useState();
9
+ const remove = async () => {
10
+ if (deleting || dependents.length > 0)
11
+ return;
12
+ setDeleting(true);
13
+ setError(undefined);
14
+ try {
15
+ await api(`/profiles/${encodeURIComponent(profile.id)}`, { method: 'DELETE' });
16
+ onDeleted();
17
+ }
18
+ catch (reason) {
19
+ setError(errorMessage(reason));
20
+ }
21
+ finally {
22
+ setDeleting(false);
23
+ }
24
+ };
25
+ return _jsx(Dialog, { title: `删除 ${profile.name}`, subtitle: profileAddress(profile), onClose: onClose, children: _jsxs("div", { className: "dsh-ssh-delete-profile", children: [_jsx("span", { className: "dsh-ssh-delete-profile-mark", children: _jsx(IconTrashOutline16, { size: 19 }) }), _jsxs("div", { children: [_jsx("strong", { children: "\u8FD9\u4E2A\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500" }), _jsx("p", { children: "\u8FDE\u63A5\u914D\u7F6E\u3001\u8BE5\u4E3B\u673A\u7684\u72EC\u7ACB\u51ED\u636E\u548C\u5173\u8054\u7AEF\u53E3\u8F6C\u53D1\u4F1A\u4E00\u5E76\u5220\u9664\uFF1B\u5B83\u4E5F\u4F1A\u4ECE\u6240\u6709\u4F1A\u8BDD\u6388\u6743\u4E2D\u79FB\u9664\u3002\u5BC6\u94A5\u5E93\u4E2D\u7684\u5171\u4EAB\u51ED\u636E\u4E0D\u4F1A\u5220\u9664\u3002" })] }), dependents.length > 0 && _jsxs("div", { className: "dsh-ssh-delete-profile-block", role: "alert", children: [_jsx("strong", { children: "\u6682\u65F6\u4E0D\u80FD\u5220\u9664" }), _jsxs("p", { children: ["\u4EE5\u4E0B\u8FDE\u63A5\u4ECD\u5C06\u5B83\u4F5C\u4E3A SSH \u8DF3\u677F\uFF1A", dependents.map(item => item.name).join('、'), "\u3002\u8BF7\u5148\u4FEE\u6539\u8FD9\u4E9B\u8FDE\u63A5\u7684\u8DF3\u677F\u94FE\u3002"] })] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: deleting, onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-ssh-danger-button", disabled: deleting || dependents.length > 0, onClick: () => { void remove(); }, children: deleting ? '正在删除…' : '删除主机' })] })] }) });
26
+ }
27
+ export function ProfileEditor({ profile, profiles, vaultEntries, proxyEntries, onClose, onSaved }) {
28
+ const [form, setForm] = useState(() => ({
29
+ name: profile?.name ?? '',
30
+ group: profile?.group ?? '',
31
+ host: profile?.host ?? '',
32
+ port: String(profile?.port ?? 22),
33
+ username: profile?.username ?? '',
34
+ authType: profile?.authType ?? 'password',
35
+ credentialId: profile?.credentialId ?? '',
36
+ proxyType: profile?.proxy.type ?? 'none',
37
+ proxyEntryId: profile?.proxy.type === 'saved' ? profile.proxy.proxyId : '',
38
+ proxyHost: profile?.proxy.type === 'http' || profile?.proxy.type === 'socks5' ? profile.proxy.host : '',
39
+ proxyPort: profile?.proxy.type === 'http' || profile?.proxy.type === 'socks5' ? String(profile.proxy.port) : '1080',
40
+ proxyUsername: profile?.proxy.type === 'http' || profile?.proxy.type === 'socks5' ? profile.proxy.username ?? '' : '',
41
+ jumpProfileIds: profile?.proxy.type === 'jump' ? profile.proxy.profileIds : [],
42
+ tags: profile?.tags.join(', ') ?? '',
43
+ password: '',
44
+ privateKey: '',
45
+ passphrase: '',
46
+ proxyPassword: '',
47
+ hostFingerprint: profile?.hostFingerprint ?? '',
48
+ }));
49
+ const [saving, setSaving] = useState(false);
50
+ const [testing, setTesting] = useState(false);
51
+ const [testState, setTestState] = useState();
52
+ const [pendingFingerprint, setPendingFingerprint] = useState();
53
+ const [error, setError] = useState();
54
+ const field = (name) => ({
55
+ value: form[name],
56
+ onChange: (event) => {
57
+ setForm(value => ({ ...value, [name]: event.target.value }));
58
+ setTestState(undefined);
59
+ setPendingFingerprint(undefined);
60
+ },
61
+ });
62
+ const selectedCredential = vaultEntries.find(entry => entry.id === form.credentialId);
63
+ const buildPayload = (hostFingerprint = form.hostFingerprint) => {
64
+ const proxy = form.proxyType === 'none' ? { type: 'none' }
65
+ : form.proxyType === 'saved' ? { type: 'saved', proxyId: form.proxyEntryId }
66
+ : form.proxyType === 'jump' ? { type: 'jump', profileIds: form.jumpProfileIds }
67
+ : { type: form.proxyType, host: form.proxyHost, port: Number(form.proxyPort), ...(form.proxyUsername.trim() ? { username: form.proxyUsername.trim() } : {}) };
68
+ return {
69
+ profile: {
70
+ name: form.name,
71
+ ...(form.group.trim() ? { group: form.group.trim() } : {}),
72
+ host: form.host,
73
+ port: Number(form.port),
74
+ username: selectedCredential?.username ?? form.username,
75
+ authType: selectedCredential?.authType ?? form.authType,
76
+ ...(form.credentialId ? { credentialId: form.credentialId } : {}),
77
+ ...(hostFingerprint ? { hostFingerprint } : {}),
78
+ proxy,
79
+ keepAliveIntervalMs: profile?.keepAliveIntervalMs ?? 15000,
80
+ connectTimeoutMs: profile?.connectTimeoutMs ?? 15000,
81
+ terminalType: profile?.terminalType ?? 'xterm-256color',
82
+ tags: form.tags.split(',').map(item => item.trim()).filter(Boolean),
83
+ },
84
+ secrets: { password: form.password, privateKey: form.privateKey, passphrase: form.passphrase, proxyPassword: form.proxyPassword },
85
+ };
86
+ };
87
+ const testConnection = async (confirmedFingerprint) => {
88
+ setTesting(true);
89
+ setError(undefined);
90
+ setTestState(undefined);
91
+ setPendingFingerprint(undefined);
92
+ try {
93
+ await api('/profiles/test-draft', { method: 'POST', body: JSON.stringify({ ...buildPayload(confirmedFingerprint), ...(profile === undefined ? {} : { profileId: profile.id }) }) });
94
+ if (confirmedFingerprint !== undefined)
95
+ setForm(current => ({ ...current, hostFingerprint: confirmedFingerprint }));
96
+ setTestState('success');
97
+ }
98
+ catch (reason) {
99
+ if (reason instanceof ApiError && reason.body?.code === 'HOST_KEY_REQUIRED' && typeof reason.body.fingerprint === 'string')
100
+ setPendingFingerprint(reason.body.fingerprint);
101
+ else
102
+ setError(errorMessage(reason));
103
+ }
104
+ finally {
105
+ setTesting(false);
106
+ }
107
+ };
108
+ const submit = async (event) => {
109
+ event.preventDefault();
110
+ setSaving(true);
111
+ setError(undefined);
112
+ try {
113
+ await api(profile === undefined ? '/profiles' : `/profiles/${profile.id}`, { method: profile === undefined ? 'POST' : 'PUT', body: JSON.stringify(buildPayload()) });
114
+ onSaved();
115
+ }
116
+ catch (reason) {
117
+ setError(errorMessage(reason));
118
+ }
119
+ finally {
120
+ setSaving(false);
121
+ }
122
+ };
123
+ return _jsx(Dialog, { title: profile === undefined ? '新建 SSH 连接' : `编辑 ${profile.name}`, subtitle: "\u51ED\u636E\u4FDD\u5B58\u540E\u4E0D\u4F1A\u56DE\u663E", onClose: onClose, children: _jsxs("form", { className: "dsh-ssh-form", onSubmit: event => { void submit(event); }, children: [_jsxs("div", { className: "dsh-ssh-form-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8FDE\u63A5\u4FE1\u606F" }), _jsx("small", { children: "\u4E3B\u673A\u5730\u5740\u4E0E\u663E\u793A\u65B9\u5F0F" })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u540D\u79F0", children: _jsx("input", { required: true, maxLength: 80, placeholder: "\u5F00\u53D1\u670D\u52A1\u5668", ...field('name') }) }), _jsx(Field, { label: "\u5206\u7EC4", children: _jsx("input", { maxLength: 64, placeholder: "\u4F8B\u5982\uFF1A\u751F\u4EA7\u73AF\u5883", ...field('group') }) })] }), _jsxs("div", { className: "dsh-ssh-form-grid is-host", children: [_jsx(Field, { label: "\u4E3B\u673A", children: _jsx("input", { required: true, placeholder: "server.example.com", spellCheck: false, ...field('host') }) }), _jsx(Field, { label: "\u7AEF\u53E3", children: _jsx("input", { required: true, type: "number", inputMode: "numeric", min: "1", max: "65535", ...field('port') }) })] }), _jsx(Field, { label: "\u6807\u7B7E", hint: "\u591A\u4E2A\u6807\u7B7E\u4F7F\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\u3002", children: _jsx("input", { placeholder: "production, linux", ...field('tags') }) })] }), _jsxs("div", { className: "dsh-ssh-form-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8EAB\u4EFD\u8BA4\u8BC1" }), _jsx("small", { children: "\u9009\u62E9\u5171\u4EAB\u51ED\u636E\u6216\u5355\u72EC\u4FDD\u5B58" })] }), _jsx(Field, { label: "\u51ED\u636E\u6765\u6E90", hint: "\u53EF\u4F7F\u7528\u6B64\u8FDE\u63A5\u81EA\u5DF1\u7684\u51ED\u636E\uFF0C\u6216\u5F15\u7528\u5BC6\u94A5\u5E93\u4E2D\u7684\u5E38\u7528\u8D26\u53F7\u3002", children: _jsxs("select", { ...field('credentialId'), children: [_jsx("option", { value: "", children: "\u6B64\u8FDE\u63A5\u72EC\u7ACB\u4FDD\u5B58" }), vaultEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.username] }, entry.id))] }) }), selectedCredential ? _jsxs("div", { className: "dsh-ssh-credential-reference", children: [_jsx("span", { children: _jsx(IconUserOutline16, { size: 16 }) }), _jsxs("span", { children: [_jsx("strong", { children: selectedCredential.name }), _jsxs("small", { children: [selectedCredential.username, " \u00B7 ", selectedCredential.authType === 'password' ? '密码' : '私钥'] })] }), _jsx("em", { children: selectedCredential.credential.configured ? '已就绪' : '缺少凭据' })] }) : _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u7528\u6237\u540D", children: _jsx("input", { required: true, autoComplete: "username", ...field('username') }) }), _jsx(Field, { label: "\u8BA4\u8BC1\u65B9\u5F0F", children: _jsxs("select", { ...field('authType'), children: [_jsx("option", { value: "password", children: "\u5BC6\u7801" }), _jsx("option", { value: "private-key", children: "\u79C1\u94A5" }), _jsx("option", { value: "agent", children: "SSH Agent" })] }) })] }), form.authType === 'password' && _jsx(Field, { label: "\u5BC6\u7801", hint: profile?.credential.source === 'profile' && profile.credential.fields.includes('password') ? '已保存;留空保持不变' : '保存后不可读回', children: _jsx("input", { required: profile === undefined, type: "password", autoComplete: "new-password", placeholder: profile?.credential.source === 'profile' && profile.credential.fields.includes('password') ? '••••••••' : '', ...field('password') }) }), form.authType === 'private-key' && _jsxs(_Fragment, { children: [_jsx(Field, { label: "\u79C1\u94A5", hint: profile?.credential.source === 'profile' && profile.credential.fields.includes('privateKey') ? '已保存;留空保持不变' : '粘贴 OpenSSH/PEM 私钥', children: _jsx("textarea", { required: profile === undefined, rows: 5, spellCheck: false, ...field('privateKey') }) }), _jsx(Field, { label: "\u79C1\u94A5\u53E3\u4EE4", children: _jsx("input", { type: "password", autoComplete: "new-password", ...field('passphrase') }) })] })] })] }), _jsxs("div", { className: "dsh-ssh-form-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8FDE\u63A5\u8DEF\u5F84" }), _jsx("small", { children: "\u76F4\u8FDE\u3001\u4EE3\u7406\u6216\u8DF3\u677F\u94FE" })] }), _jsx(Field, { label: "\u8FDE\u63A5\u65B9\u5F0F", children: _jsxs("select", { ...field('proxyType'), children: [_jsx("option", { value: "none", children: "\u76F4\u8FDE" }), _jsx("option", { value: "saved", children: "\u5E38\u7528\u4EE3\u7406" }), _jsx("option", { value: "http", children: "\u81EA\u5B9A\u4E49 HTTP CONNECT" }), _jsx("option", { value: "socks5", children: "\u81EA\u5B9A\u4E49 SOCKS5" }), _jsx("option", { value: "jump", children: "SSH \u8DF3\u677F" })] }) }), form.proxyType === 'saved' && _jsx(Field, { label: "\u5E38\u7528\u4EE3\u7406", hint: proxyEntries.length === 0 ? '请先在代理库中添加 HTTP 或 SOCKS5 代理。' : '多台主机可引用同一条代理配置。', children: _jsxs("select", { required: true, ...field('proxyEntryId'), children: [_jsx("option", { value: "", children: "\u9009\u62E9\u4EE3\u7406" }), proxyEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.proxyType === 'http' ? 'HTTP' : 'SOCKS5', " \u00B7 ", entry.host, ":", entry.port] }, entry.id))] }) }), (form.proxyType === 'http' || form.proxyType === 'socks5') && _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-ssh-form-grid is-host", children: [_jsx(Field, { label: "\u4EE3\u7406\u4E3B\u673A", children: _jsx("input", { required: true, spellCheck: false, ...field('proxyHost') }) }), _jsx(Field, { label: "\u4EE3\u7406\u7AEF\u53E3", children: _jsx("input", { required: true, type: "number", inputMode: "numeric", min: "1", max: "65535", ...field('proxyPort') }) })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u4EE3\u7406\u7528\u6237\u540D", children: _jsx("input", { autoComplete: "username", ...field('proxyUsername') }) }), _jsx(Field, { label: "\u4EE3\u7406\u5BC6\u7801", children: _jsx("input", { type: "password", autoComplete: "new-password", ...field('proxyPassword') }) })] })] }), form.proxyType === 'jump' && _jsx(JumpChainEditor, { profiles: profiles.filter(item => item.id !== profile?.id), value: form.jumpProfileIds, onChange: jumpProfileIds => setForm(current => ({ ...current, jumpProfileIds })) })] }), pendingFingerprint && _jsxs("div", { className: "dsh-ssh-test-result is-warning", role: "alert", children: [_jsxs("span", { children: [_jsx("strong", { children: "\u9996\u6B21\u8FDE\u63A5\uFF0C\u8BF7\u6838\u5BF9\u4E3B\u673A\u6307\u7EB9" }), _jsx("code", { children: pendingFingerprint })] }), _jsx("button", { type: "button", className: "dsh-ssh-small-primary", disabled: testing, onClick: () => { void testConnection(pendingFingerprint); }, children: "\u786E\u8BA4\u5E76\u91CD\u8BD5" })] }), testState === 'success' && _jsxs("p", { className: "dsh-ssh-test-result is-success", role: "status", children: [_jsx(IconCheckOutline14, { size: 14 }), "\u8FDE\u63A5\u6D4B\u8BD5\u6210\u529F"] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button dsh-ssh-test-button", disabled: saving || testing, onClick: event => { if (event.currentTarget.form?.reportValidity())
124
+ void testConnection(); }, children: testing ? '正在测试…' : '测试连接' }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: saving || testing, onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { className: "dsh-ssh-primary-button", disabled: saving || testing, children: saving ? '正在保存…' : '保存连接' })] })] }) });
125
+ }
126
+ function JumpChainEditor({ profiles, value, onChange }) {
127
+ const add = () => {
128
+ const next = profiles.find(profile => !value.includes(profile.id));
129
+ if (next !== undefined && value.length < 8)
130
+ onChange([...value, next.id]);
131
+ };
132
+ const update = (index, profileId) => onChange(value.map((id, current) => current === index ? profileId : id));
133
+ const move = (index, offset) => {
134
+ const target = index + offset;
135
+ if (target < 0 || target >= value.length)
136
+ return;
137
+ const next = [...value];
138
+ [next[index], next[target]] = [next[target], next[index]];
139
+ onChange(next);
140
+ };
141
+ return _jsxs("fieldset", { className: "dsh-ssh-jump-chain", children: [_jsx("legend", { children: "\u8DF3\u677F\u94FE" }), _jsx("p", { children: "\u8FDE\u63A5\u4F1A\u6309\u4ECE\u4E0A\u5230\u4E0B\u7684\u987A\u5E8F\u9010\u7EA7\u5EFA\u7ACB\u3002" }), _jsx("div", { children: value.map((profileId, index) => _jsxs("div", { className: "dsh-ssh-jump-row", children: [_jsx("em", { children: index + 1 }), _jsxs("select", { required: true, value: profileId, onChange: event => update(index, event.target.value), children: [_jsx("option", { value: "", children: "\u9009\u62E9\u5DF2\u6709\u8FDE\u63A5" }), profiles.filter(profile => profile.id === profileId || !value.includes(profile.id)).map(profile => _jsxs("option", { value: profile.id, children: [profile.name, " \u00B7 ", profile.host] }, profile.id))] }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button", disabled: index === 0, "aria-label": "\u4E0A\u79FB\u8DF3\u677F", onClick: () => move(index, -1), children: _jsx(IconChevronUpOutline14, { size: 14 }) }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button", disabled: index === value.length - 1, "aria-label": "\u4E0B\u79FB\u8DF3\u677F", onClick: () => move(index, 1), children: _jsx(IconChevronDownOutline14, { size: 14 }) }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button is-danger", "aria-label": "\u79FB\u9664\u8DF3\u677F", onClick: () => onChange(value.filter((_, current) => current !== index)), children: _jsx(IconTrashOutline16, { size: 15 }) })] }, `${profileId}-${index}`)) }), value.length === 0 && _jsx("p", { className: "dsh-ssh-jump-empty", children: "\u81F3\u5C11\u6DFB\u52A0\u4E00\u53F0\u8DF3\u677F\u4E3B\u673A\u3002" }), _jsxs("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: value.length >= 8 || profiles.every(profile => value.includes(profile.id)), onClick: add, children: [_jsx(IconPlusOutline16, { size: 15 }), "\u6DFB\u52A0\u8DF3\u677F"] })] });
142
+ }
143
+ //# sourceMappingURL=profile-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-editor.js","sourceRoot":"","sources":["../src/profile-editor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { WorkspaceView } from '@deepseek-ai/dsh-client-runtime/client';
2
+ import type { ProfileView, RemoteProjectView } from './client-api.js';
3
+ interface ProjectSessionDialogProps {
4
+ profile: ProfileView;
5
+ project: RemoteProjectView;
6
+ workspaces: readonly WorkspaceView[];
7
+ currentWorkspaceId?: string | undefined;
8
+ recentWorkspaceId?: string | undefined;
9
+ returnFocus: HTMLButtonElement;
10
+ onClose(): void;
11
+ onCreate(project: RemoteProjectView, workspaceId: string): Promise<void>;
12
+ }
13
+ export declare function ProjectSessionDialog({ profile, project, workspaces, currentWorkspaceId, recentWorkspaceId, returnFocus, onClose, onCreate }: ProjectSessionDialogProps): JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=project-session-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-session-dialog.d.ts","sourceRoot":"","sources":["../src/project-session-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAErE,UAAU,yBAAyB;IACjC,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,EAAE,iBAAiB,CAAA;IAC1B,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,OAAO,IAAI,IAAI,CAAA;IACf,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,yBAAyB,GAAG,GAAG,CAAC,OAAO,CA0CpL"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { IconCloseOutline16, IconFolderClose16, Modal } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ export function ProjectSessionDialog({ profile, project, workspaces, currentWorkspaceId, recentWorkspaceId, returnFocus, onClose, onCreate }) {
5
+ const preferredWorkspaceId = workspaces.some(workspace => String(workspace.workspaceId) === currentWorkspaceId)
6
+ ? currentWorkspaceId
7
+ : workspaces.some(workspace => String(workspace.workspaceId) === recentWorkspaceId) ? recentWorkspaceId : workspaces[0] === undefined ? undefined : String(workspaces[0].workspaceId);
8
+ const [workspaceId, setWorkspaceId] = useState(preferredWorkspaceId);
9
+ const [creating, setCreating] = useState(false);
10
+ const [error, setError] = useState();
11
+ const preferredOptionRef = useRef(null);
12
+ const closeButtonRef = useRef(null);
13
+ useEffect(() => {
14
+ const initialFocus = preferredOptionRef.current ?? closeButtonRef.current;
15
+ initialFocus?.focus();
16
+ return () => { if (returnFocus.isConnected)
17
+ returnFocus.focus(); };
18
+ }, [returnFocus]);
19
+ const close = () => { if (!creating)
20
+ onClose(); };
21
+ const submit = async (event) => {
22
+ event.preventDefault();
23
+ if (workspaceId === undefined)
24
+ return;
25
+ setCreating(true);
26
+ setError(undefined);
27
+ try {
28
+ await onCreate(project, workspaceId);
29
+ }
30
+ catch (reason) {
31
+ setError(message(reason));
32
+ setCreating(false);
33
+ }
34
+ };
35
+ return _jsx(Modal, { open: true, onClose: close, title: "\u9009\u62E9\u4F1A\u8BDD\u5F52\u5C5E\u7A7A\u95F4", closeLabel: "\u5173\u95ED", headless: true, className: "dsh-ssh-session-create-modal", children: _jsxs("section", { className: "dsh-ssh-session-create-shell", onKeyDown: trapDialogFocus, children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("h2", { children: "\u65B0\u5EFA\u8FDC\u7AEF\u4F1A\u8BDD" }), _jsx("p", { children: "\u9009\u62E9\u8FD9\u4E2A\u4F1A\u8BDD\u5728 DSH \u4E2D\u5F52\u5C5E\u7684\u672C\u5730\u9879\u76EE" })] }), _jsx("button", { ref: closeButtonRef, type: "button", className: "dsh-ssh-icon-button", disabled: creating, onClick: close, "aria-label": "\u5173\u95ED", children: _jsx(IconCloseOutline16, { size: 16 }) })] }), _jsxs("form", { onSubmit: event => { void submit(event); }, children: [_jsxs("dl", { className: "dsh-ssh-session-create-target", children: [_jsxs("div", { children: [_jsx("dt", { children: "\u8FDC\u7AEF\u4E3B\u673A" }), _jsxs("dd", { children: [profile.name, _jsxs("small", { children: [profile.username, "@", profile.host, ":", profile.port] })] })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u8FDC\u7AEF\u5DE5\u4F5C\u76EE\u5F55" }), _jsxs("dd", { children: [project.name, _jsx("small", { title: project.path, children: project.path })] })] })] }), _jsxs("fieldset", { className: "dsh-ssh-workspace-picker", children: [_jsx("legend", { children: "\u4F1A\u8BDD\u5F52\u5C5E\u7A7A\u95F4" }), _jsx("p", { children: "\u4F1A\u8BDD\u8BB0\u5F55\u4FDD\u5B58\u5728\u6240\u9009 DSH \u9879\u76EE\u4E2D\uFF0CSSH \u547D\u4EE4\u4E0E\u7EC8\u7AEF\u56FA\u5B9A\u4F7F\u7528\u4E0A\u9762\u7684\u8FDC\u7AEF\u76EE\u5F55\u3002" }), workspaces.length === 0 ? _jsxs("div", { className: "dsh-ssh-workspace-picker-empty", children: [_jsx(IconFolderClose16, { size: 18 }), _jsxs("span", { children: [_jsx("strong", { children: "\u8FD8\u6CA1\u6709\u53EF\u7528\u7684 DSH \u9879\u76EE" }), _jsx("small", { children: "\u8BF7\u5148\u5173\u95ED\u6B64\u7A97\u53E3\uFF0C\u5728 DSH \u5DE6\u4FA7\u7A7A\u95F4\u4E2D\u65B0\u5EFA\u6216\u6DFB\u52A0\u9879\u76EE\u3002" })] })] })
36
+ : _jsx("div", { className: "dsh-ssh-workspace-options dsh-ssh-scroll-surface", role: "radiogroup", "aria-label": "\u9009\u62E9 DSH \u9879\u76EE", children: workspaces.map(workspace => {
37
+ const id = String(workspace.workspaceId);
38
+ const status = id === currentWorkspaceId ? '当前项目' : id === recentWorkspaceId ? '最近使用' : undefined;
39
+ return _jsxs("label", { className: "dsh-ssh-workspace-option", children: [_jsx("input", { ref: id === preferredWorkspaceId ? preferredOptionRef : undefined, className: "sr-only", type: "radio", name: "dsh-ssh-session-workspace", value: id, checked: workspaceId === id, disabled: creating, onChange: () => setWorkspaceId(id) }), _jsxs("span", { children: [_jsx("span", { className: "dsh-ssh-workspace-option-icon", children: _jsx(IconFolderClose16, { size: 16 }) }), _jsxs("span", { className: "dsh-ssh-workspace-option-copy", children: [_jsx("strong", { children: workspace.title }), _jsx("small", { title: workspace.path, children: workspace.path })] }), status && _jsx("em", { children: status }), _jsx("i", { "aria-hidden": "true" })] })] }, id);
40
+ }) })] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: creating, onClick: close, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: "dsh-ssh-primary-button", disabled: creating || workspaceId === undefined, children: creating ? '正在新建…' : '新建并打开' })] })] })] }) });
41
+ }
42
+ function trapDialogFocus(event) {
43
+ if (event.key !== 'Tab')
44
+ return;
45
+ const controls = Array.from(event.currentTarget.querySelectorAll('button:not(:disabled), input:not(:disabled), a[href], [tabindex]:not([tabindex="-1"])')).filter(control => control.getClientRects().length > 0);
46
+ const first = controls[0];
47
+ const last = controls[controls.length - 1];
48
+ if (first === undefined || last === undefined)
49
+ return;
50
+ if (event.shiftKey && document.activeElement === first) {
51
+ event.preventDefault();
52
+ last.focus();
53
+ }
54
+ else if (!event.shiftKey && document.activeElement === last) {
55
+ event.preventDefault();
56
+ first.focus();
57
+ }
58
+ }
59
+ function message(reason) { return reason instanceof Error ? reason.message : String(reason); }
60
+ //# sourceMappingURL=project-session-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-session-dialog.js","sourceRoot":"","sources":["../src/project-session-dialog.tsx"],"names":[],"mappings":"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"}
package/lib/proxy.d.ts CHANGED
@@ -3,7 +3,7 @@ export interface ProxyCredentials {
3
3
  username?: string;
4
4
  password?: string;
5
5
  }
6
- export declare function connectHttpProxy(proxyHost: string, proxyPort: number, targetHost: string, targetPort: number, credentials: ProxyCredentials, timeoutMs: number): Promise<Socket>;
7
- export declare function connectSocks5Proxy(proxyHost: string, proxyPort: number, targetHost: string, targetPort: number, credentials: ProxyCredentials, timeoutMs: number): Promise<Socket>;
8
- export declare function connectSocket(host: string, port: number, timeoutMs: number): Promise<Socket>;
6
+ export declare function connectHttpProxy(proxyHost: string, proxyPort: number, targetHost: string, targetPort: number, credentials: ProxyCredentials, timeoutMs: number, signal?: AbortSignal): Promise<Socket>;
7
+ export declare function connectSocks5Proxy(proxyHost: string, proxyPort: number, targetHost: string, targetPort: number, credentials: ProxyCredentials, timeoutMs: number, signal?: AbortSignal): Promise<Socket>;
8
+ export declare function connectSocket(host: string, port: number, timeoutMs: number, signal?: AbortSignal): Promise<Socket>;
9
9
  //# sourceMappingURL=proxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAE1E,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlG"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAE1E,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAYxH"}
package/lib/proxy.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import net from 'node:net';
3
- export async function connectHttpProxy(proxyHost, proxyPort, targetHost, targetPort, credentials, timeoutMs) {
4
- const socket = await connectSocket(proxyHost, proxyPort, timeoutMs);
3
+ export async function connectHttpProxy(proxyHost, proxyPort, targetHost, targetPort, credentials, timeoutMs, signal) {
4
+ const socket = await connectSocket(proxyHost, proxyPort, timeoutMs, signal);
5
5
  const authority = `${targetHost}:${targetPort}`;
6
6
  const headers = [`CONNECT ${authority} HTTP/1.1`, `Host: ${authority}`, 'Proxy-Connection: Keep-Alive'];
7
7
  if (credentials.username !== undefined) {
@@ -17,8 +17,8 @@ export async function connectHttpProxy(proxyHost, proxyPort, targetHost, targetP
17
17
  }
18
18
  return socket;
19
19
  }
20
- export async function connectSocks5Proxy(proxyHost, proxyPort, targetHost, targetPort, credentials, timeoutMs) {
21
- const socket = await connectSocket(proxyHost, proxyPort, timeoutMs);
20
+ export async function connectSocks5Proxy(proxyHost, proxyPort, targetHost, targetPort, credentials, timeoutMs, signal) {
21
+ const socket = await connectSocket(proxyHost, proxyPort, timeoutMs, signal);
22
22
  const useAuth = credentials.username !== undefined;
23
23
  socket.write(Buffer.from(useAuth ? [5, 2, 0, 2] : [5, 1, 0]));
24
24
  const greeting = await readExact(socket, 2, timeoutMs);
@@ -60,13 +60,17 @@ export async function connectSocks5Proxy(proxyHost, proxyPort, targetHost, targe
60
60
  throw closeError(socket, 'SOCKS5 proxy returned an invalid address type');
61
61
  return socket;
62
62
  }
63
- export async function connectSocket(host, port, timeoutMs) {
63
+ export async function connectSocket(host, port, timeoutMs, signal) {
64
+ signal?.throwIfAborted();
64
65
  return new Promise((resolve, reject) => {
65
66
  const socket = net.connect({ host, port });
66
67
  const timer = setTimeout(() => socket.destroy(new Error(`connection to ${host}:${port} timed out`)), timeoutMs);
67
- const cleanup = () => { clearTimeout(timer); socket.off('error', reject); };
68
+ const abort = () => { socket.destroy(signal?.reason instanceof Error ? signal.reason : new Error('connection was aborted')); };
69
+ const cleanup = () => { clearTimeout(timer); signal?.removeEventListener('abort', abort); socket.off('error', failed); };
70
+ const failed = (error) => { cleanup(); reject(error); };
71
+ signal?.addEventListener('abort', abort, { once: true });
68
72
  socket.once('connect', () => { cleanup(); resolve(socket); });
69
- socket.once('error', reject);
73
+ socket.once('error', failed);
70
74
  });
71
75
  }
72
76
  async function readUntil(socket, marker, max, timeoutMs) {
package/lib/proxy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { RemoteEndpointView, RemoteFileSystemAdapter, RemoteFileSystemSession } from './remote-files.js';
2
+ export declare class RemoteFileSystems {
3
+ private readonly byKind;
4
+ constructor(adapters: RemoteFileSystemAdapter[]);
5
+ endpoints(): RemoteEndpointView[];
6
+ endpoint(value: string): RemoteEndpointView | undefined;
7
+ connect(value: string, signal?: AbortSignal): Promise<RemoteFileSystemSession>;
8
+ }
9
+ //# sourceMappingURL=remote-file-systems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-systems.d.ts","sourceRoot":"","sources":["../src/remote-file-systems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAG7G,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBACxD,QAAQ,EAAE,uBAAuB,EAAE;IAI/C,SAAS,IAAI,kBAAkB,EAAE;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAO/E"}
@@ -0,0 +1,23 @@
1
+ import { splitEndpointId } from './remote-files.js';
2
+ export class RemoteFileSystems {
3
+ byKind = new Map();
4
+ constructor(adapters) {
5
+ for (const adapter of adapters)
6
+ this.byKind.set(adapter.kind, adapter);
7
+ }
8
+ endpoints() { return [...this.byKind.values()].flatMap(adapter => adapter.endpoints()); }
9
+ endpoint(value) {
10
+ const parsed = splitEndpointId(value);
11
+ return parsed === undefined ? undefined : this.byKind.get(parsed.kind)?.endpoint(parsed.id);
12
+ }
13
+ connect(value, signal) {
14
+ const parsed = splitEndpointId(value);
15
+ if (parsed === undefined)
16
+ throw Object.assign(new Error(`invalid file endpoint ${value}`), { status: 400 });
17
+ const adapter = this.byKind.get(parsed.kind);
18
+ if (adapter === undefined)
19
+ throw Object.assign(new Error(`file endpoint protocol ${parsed.kind} is unavailable`), { status: 404 });
20
+ return adapter.connect(parsed.id, signal);
21
+ }
22
+ }
23
+ //# sourceMappingURL=remote-file-systems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-systems.js","sourceRoot":"","sources":["../src/remote-file-systems.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,OAAO,iBAAiB;IACX,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAA;IACpE,YAAY,QAAmC;QAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxE,CAAC;IAED,SAAS,KAA2B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA,CAAC,CAAC;IAC9G,QAAQ,CAAC,KAAa;QACpB,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QACrC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC7F,CAAC;IACD,OAAO,CAAC,KAAa,EAAE,MAAoB;QACzC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3G,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,IAAI,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAClI,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC3C,CAAC;CACF"}
@@ -0,0 +1,51 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ export type RemoteEndpointKind = 'sftp' | 'ftp';
3
+ export type RemoteFileKind = 'directory' | 'file' | 'symlink' | 'other';
4
+ export interface RemoteEndpointView {
5
+ id: string;
6
+ kind: RemoteEndpointKind;
7
+ protocol: 'sftp' | 'ftp' | 'ftps-explicit' | 'ftps-implicit';
8
+ name: string;
9
+ group?: string;
10
+ address: string;
11
+ initialPath: string;
12
+ }
13
+ export interface RemoteFileEntry {
14
+ name: string;
15
+ path: string;
16
+ kind: RemoteFileKind;
17
+ size: number;
18
+ modifiedAt: number;
19
+ }
20
+ export interface RemoteDirectoryView {
21
+ path: string;
22
+ parent: string | null;
23
+ entries: RemoteFileEntry[];
24
+ }
25
+ export interface RemoteFileSystemSession {
26
+ readonly endpoint: RemoteEndpointView;
27
+ list(path: string, signal?: AbortSignal): Promise<RemoteDirectoryView>;
28
+ stat(path: string, signal?: AbortSignal): Promise<RemoteFileEntry>;
29
+ download(path: string, destination: Writable, signal?: AbortSignal): Promise<void>;
30
+ upload(path: string, source: Readable, overwrite: boolean, signal?: AbortSignal): Promise<void>;
31
+ ensureDirectory(path: string, signal?: AbortSignal): Promise<void>;
32
+ remove(path: string, recursive: boolean, signal?: AbortSignal): Promise<void>;
33
+ close(): void;
34
+ }
35
+ export interface RemoteFileSystemAdapter {
36
+ readonly kind: RemoteEndpointKind;
37
+ endpoint(id: string): RemoteEndpointView | undefined;
38
+ endpoints(): RemoteEndpointView[];
39
+ connect(id: string, signal?: AbortSignal): Promise<RemoteFileSystemSession>;
40
+ }
41
+ export declare function endpointId(kind: RemoteEndpointKind, id: string): string;
42
+ export declare function splitEndpointId(value: string): {
43
+ kind: RemoteEndpointKind;
44
+ id: string;
45
+ } | undefined;
46
+ export declare function remoteJoin(directory: string, name: string): string;
47
+ export declare function remoteParent(value: string): string | null;
48
+ export declare function remoteName(value: string): string;
49
+ export declare function normalizeRemotePath(value: string): string;
50
+ export declare function sortRemoteEntries(entries: RemoteFileEntry[]): RemoteFileEntry[];
51
+ //# sourceMappingURL=remote-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-files.d.ts","sourceRoot":"","sources":["../src/remote-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import path from 'node:path';
2
+ export function endpointId(kind, id) { return `${kind}:${id}`; }
3
+ export function splitEndpointId(value) {
4
+ const separator = value.indexOf(':');
5
+ if (separator < 1)
6
+ return undefined;
7
+ const kind = value.slice(0, separator);
8
+ const id = value.slice(separator + 1);
9
+ if ((kind !== 'sftp' && kind !== 'ftp') || id.length === 0)
10
+ return undefined;
11
+ return { kind, id };
12
+ }
13
+ export function remoteJoin(directory, name) {
14
+ return path.posix.join(normalizeRemotePath(directory), name.replaceAll('\\', '/'));
15
+ }
16
+ export function remoteParent(value) {
17
+ const normalized = normalizeRemotePath(value).replace(/\/+$/, '') || '/';
18
+ if (normalized === '/' || /^[A-Za-z]:$/.test(normalized))
19
+ return null;
20
+ const parent = path.posix.dirname(normalized);
21
+ if (/^[A-Za-z]:$/.test(parent))
22
+ return `${parent}/`;
23
+ return parent === normalized ? null : parent;
24
+ }
25
+ export function remoteName(value) { return path.posix.basename(normalizeRemotePath(value)); }
26
+ export function normalizeRemotePath(value) { return value.replaceAll('\\', '/') || '/'; }
27
+ export function sortRemoteEntries(entries) {
28
+ return entries.sort((left, right) => {
29
+ if (left.kind === 'directory' && right.kind !== 'directory')
30
+ return -1;
31
+ if (left.kind !== 'directory' && right.kind === 'directory')
32
+ return 1;
33
+ return left.name.localeCompare(right.name, undefined, { numeric: true, sensitivity: 'base' });
34
+ });
35
+ }
36
+ //# sourceMappingURL=remote-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-files.js","sourceRoot":"","sources":["../src/remote-files.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAgD5B,MAAM,UAAU,UAAU,CAAC,IAAwB,EAAE,EAAU,IAAY,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAA,CAAC,CAAC;AAEnG,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC5E,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,IAAY;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;IACxE,IAAI,UAAU,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,MAAM,GAAG,CAAA;IACnD,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,IAAY,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,CAAC;AAC5G,MAAM,UAAU,mBAAmB,CAAC,KAAa,IAAY,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAA,CAAC,CAAC;AAExG,MAAM,UAAU,iBAAiB,CAAC,OAA0B;IAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,CAAC,CAAC,CAAA;QACtE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,CAAC,CAAA;QACrE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { WorkspaceView } from '@deepseek-ai/dsh-client-runtime/client';
2
+ import { type InjectionView, type ProfileView, type RemoteProjectView } from './client-api.js';
3
+ export interface RemoteTarget {
4
+ profileId: string;
5
+ path: string;
6
+ projectId?: string;
7
+ }
8
+ interface RemoteWorkspaceTreeProps {
9
+ profiles: ProfileView[];
10
+ access: InjectionView | null;
11
+ accessLoading: boolean;
12
+ accessSaving: boolean;
13
+ accessError?: string | undefined;
14
+ workspaces: readonly WorkspaceView[];
15
+ currentWorkspaceId?: string | undefined;
16
+ recentWorkspaceId?: string | undefined;
17
+ selected: RemoteTarget | null;
18
+ onSelect(target: RemoteTarget): void;
19
+ onProfiles(profileIds: string[]): void;
20
+ onDirectory(profileId: string, path?: string, projectId?: string): void;
21
+ onPermission(permission: InjectionView['permission']): void;
22
+ onApproval(value: boolean): void;
23
+ onCreateSession(project: RemoteProjectView, workspaceId: string): Promise<void>;
24
+ onNewProfile(): void;
25
+ }
26
+ export declare function RemoteWorkspaceTree(props: RemoteWorkspaceTreeProps): JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=remote-workspace-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-workspace-tree.d.ts","sourceRoot":"","sources":["../src/remote-workspace-tree.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAK3E,OAAO,EAEL,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAC7D,MAAM,iBAAiB,CAAA;AAIxB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IACpC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACtC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvE,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;IAC3D,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,YAAY,IAAI,IAAI,CAAA;CACrB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,CA2FhF"}