@lemoncat7/dsh-ssh 1.6.0 → 1.8.0

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 (150) hide show
  1. package/ARCHITECTURE.md +9 -0
  2. package/README.md +18 -2
  3. package/docs/dialog-consistency.md +26 -0
  4. package/docs/releases/1.7.0.md +11 -0
  5. package/docs/releases/1.8.0.md +13 -0
  6. package/lib/activity-panel.d.ts.map +1 -1
  7. package/lib/activity-panel.js +14 -8
  8. package/lib/activity-panel.js.map +1 -1
  9. package/lib/adaptive-workspace.d.ts.map +1 -1
  10. package/lib/adaptive-workspace.js +5 -2
  11. package/lib/adaptive-workspace.js.map +1 -1
  12. package/lib/api.d.ts.map +1 -1
  13. package/lib/api.js +17 -1
  14. package/lib/api.js.map +1 -1
  15. package/lib/client.d.ts.map +1 -1
  16. package/lib/client.js +320 -188
  17. package/lib/client.js.map +4 -4
  18. package/lib/commands-panel.d.ts.map +1 -1
  19. package/lib/commands-panel.js +28 -11
  20. package/lib/commands-panel.js.map +1 -1
  21. package/lib/confirmation-dialog.d.ts +12 -0
  22. package/lib/confirmation-dialog.d.ts.map +1 -0
  23. package/lib/confirmation-dialog.js +41 -0
  24. package/lib/confirmation-dialog.js.map +1 -0
  25. package/lib/connector.d.ts.map +1 -1
  26. package/lib/connector.js +6 -4
  27. package/lib/connector.js.map +1 -1
  28. package/lib/docked-panel-compat.d.ts +1 -1
  29. package/lib/docked-panel-compat.d.ts.map +1 -1
  30. package/lib/docked-panel-compat.js +3 -2
  31. package/lib/docked-panel-compat.js.map +1 -1
  32. package/lib/domain.d.ts +8 -0
  33. package/lib/domain.d.ts.map +1 -1
  34. package/lib/domain.js.map +1 -1
  35. package/lib/file-entry-delete-dialog.d.ts.map +1 -1
  36. package/lib/file-entry-delete-dialog.js +5 -2
  37. package/lib/file-entry-delete-dialog.js.map +1 -1
  38. package/lib/file-transfer-workspace.d.ts.map +1 -1
  39. package/lib/file-transfer-workspace.js +48 -30
  40. package/lib/file-transfer-workspace.js.map +1 -1
  41. package/lib/ftp-profile-editor.d.ts.map +1 -1
  42. package/lib/ftp-profile-editor.js +19 -12
  43. package/lib/ftp-profile-editor.js.map +1 -1
  44. package/lib/gist-sync.d.ts +4 -2
  45. package/lib/gist-sync.d.ts.map +1 -1
  46. package/lib/gist-sync.js +49 -12
  47. package/lib/gist-sync.js.map +1 -1
  48. package/lib/group-proxy-editor.d.ts +10 -0
  49. package/lib/group-proxy-editor.d.ts.map +1 -0
  50. package/lib/group-proxy-editor.js +33 -0
  51. package/lib/group-proxy-editor.js.map +1 -0
  52. package/lib/group-proxy.d.ts +7 -0
  53. package/lib/group-proxy.d.ts.map +1 -0
  54. package/lib/group-proxy.js +29 -0
  55. package/lib/group-proxy.js.map +1 -0
  56. package/lib/html-file-preview.d.ts.map +1 -1
  57. package/lib/html-file-preview.js +4 -1
  58. package/lib/html-file-preview.js.map +1 -1
  59. package/lib/i18n.d.ts +17 -0
  60. package/lib/i18n.d.ts.map +1 -0
  61. package/lib/i18n.js +36 -0
  62. package/lib/i18n.js.map +1 -0
  63. package/lib/locales/messages.d.ts +2726 -0
  64. package/lib/locales/messages.d.ts.map +1 -0
  65. package/lib/locales/messages.js +2689 -0
  66. package/lib/locales/messages.js.map +1 -0
  67. package/lib/markdown-preview-editor.d.ts.map +1 -1
  68. package/lib/markdown-preview-editor.js +7 -1
  69. package/lib/markdown-preview-editor.js.map +1 -1
  70. package/lib/native-directory-button.d.ts.map +1 -1
  71. package/lib/native-directory-button.js +6 -3
  72. package/lib/native-directory-button.js.map +1 -1
  73. package/lib/preview-refresh-control.d.ts.map +1 -1
  74. package/lib/preview-refresh-control.js +4 -1
  75. package/lib/preview-refresh-control.js.map +1 -1
  76. package/lib/profile-editor.d.ts.map +1 -1
  77. package/lib/profile-editor.js +14 -8
  78. package/lib/profile-editor.js.map +1 -1
  79. package/lib/project-session-dialog.d.ts.map +1 -1
  80. package/lib/project-session-dialog.js +7 -4
  81. package/lib/project-session-dialog.js.map +1 -1
  82. package/lib/remote-path-input.d.ts.map +1 -1
  83. package/lib/remote-path-input.js +10 -7
  84. package/lib/remote-path-input.js.map +1 -1
  85. package/lib/remote-workspace-tree.d.ts +1 -0
  86. package/lib/remote-workspace-tree.d.ts.map +1 -1
  87. package/lib/remote-workspace-tree.js +19 -21
  88. package/lib/remote-workspace-tree.js.map +1 -1
  89. package/lib/resizable-split.d.ts.map +1 -1
  90. package/lib/resizable-split.js +4 -1
  91. package/lib/resizable-split.js.map +1 -1
  92. package/lib/sftp-client.d.ts +2 -1
  93. package/lib/sftp-client.d.ts.map +1 -1
  94. package/lib/sftp-client.js +55 -31
  95. package/lib/sftp-client.js.map +1 -1
  96. package/lib/ssh-locale-binding.d.ts +9 -0
  97. package/lib/ssh-locale-binding.d.ts.map +1 -0
  98. package/lib/ssh-locale-binding.js +29 -0
  99. package/lib/ssh-locale-binding.js.map +1 -0
  100. package/lib/store.d.ts +4 -0
  101. package/lib/store.d.ts.map +1 -1
  102. package/lib/store.js +13 -0
  103. package/lib/store.js.map +1 -1
  104. package/lib/terminal-bootstrap-echo.d.ts +15 -0
  105. package/lib/terminal-bootstrap-echo.d.ts.map +1 -0
  106. package/lib/terminal-bootstrap-echo.js +62 -0
  107. package/lib/terminal-bootstrap-echo.js.map +1 -0
  108. package/lib/terminal-directory.d.ts +3 -0
  109. package/lib/terminal-directory.d.ts.map +1 -0
  110. package/lib/terminal-directory.js +28 -0
  111. package/lib/terminal-directory.js.map +1 -0
  112. package/lib/terminal-session.d.ts +2 -1
  113. package/lib/terminal-session.d.ts.map +1 -1
  114. package/lib/terminal-session.js +22 -7
  115. package/lib/terminal-session.js.map +1 -1
  116. package/lib/terminal-shell-integration.d.ts +6 -0
  117. package/lib/terminal-shell-integration.d.ts.map +1 -0
  118. package/lib/terminal-shell-integration.js +53 -0
  119. package/lib/terminal-shell-integration.js.map +1 -0
  120. package/lib/terminal-workspace.d.ts +2 -1
  121. package/lib/terminal-workspace.d.ts.map +1 -1
  122. package/lib/terminal-workspace.js +10 -5
  123. package/lib/terminal-workspace.js.map +1 -1
  124. package/lib/terminal.d.ts +4 -0
  125. package/lib/terminal.d.ts.map +1 -1
  126. package/lib/terminal.js +31 -1
  127. package/lib/terminal.js.map +1 -1
  128. package/lib/ui-components.d.ts +3 -1
  129. package/lib/ui-components.d.ts.map +1 -1
  130. package/lib/ui-components.js +19 -10
  131. package/lib/ui-components.js.map +1 -1
  132. package/lib/use-file-preview.d.ts.map +1 -1
  133. package/lib/use-file-preview.js +2 -1
  134. package/lib/use-file-preview.js.map +1 -1
  135. package/lib/use-markdown-draft.d.ts.map +1 -1
  136. package/lib/use-markdown-draft.js +6 -5
  137. package/lib/use-markdown-draft.js.map +1 -1
  138. package/lib/use-ssh-locale.d.ts +4 -0
  139. package/lib/use-ssh-locale.d.ts.map +1 -0
  140. package/lib/use-ssh-locale.js +7 -0
  141. package/lib/use-ssh-locale.js.map +1 -0
  142. package/lib/use-workspace-refresh.d.ts +3 -0
  143. package/lib/use-workspace-refresh.d.ts.map +1 -0
  144. package/lib/use-workspace-refresh.js +44 -0
  145. package/lib/use-workspace-refresh.js.map +1 -0
  146. package/lib/workspace-refresh.d.ts +14 -0
  147. package/lib/workspace-refresh.d.ts.map +1 -0
  148. package/lib/workspace-refresh.js +36 -0
  149. package/lib/workspace-refresh.js.map +1 -0
  150. package/package.json +1 -1
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useSshLocale } from './use-ssh-locale.js';
3
+ import { t } from './i18n.js';
2
4
  import { useMemo, useState } from 'react';
3
- import { IconChevronLeftOutline14, IconDataOutline16, IconPlusOutline16, IconTrashOutline16, IconWarningOutline16, } from '@deepseek-ai/dsh-client-ui-primitives';
5
+ import { IconChevronLeftOutline14, IconDataOutline16, IconPlusOutline16, IconTrashOutline16, } from '@deepseek-ai/dsh-client-ui-primitives';
4
6
  import { api } from './client-api.js';
5
7
  import { Dialog, Field, SuggestionInput, errorMessage } from './ui-components.js';
6
8
  export function FtpConnectionsDialog({ profiles, vaultEntries, proxyEntries, onClose, onChanged }) {
9
+ useSshLocale();
7
10
  const [editing, setEditing] = useState();
8
11
  const [deleting, setDeleting] = useState();
9
12
  const [error, setError] = useState();
@@ -22,18 +25,22 @@ export function FtpConnectionsDialog({ profiles, vaultEntries, proxyEntries, onC
22
25
  setError(errorMessage(reason));
23
26
  }
24
27
  };
25
- return _jsx(Dialog, { className: "dsh-ssh-ftp-manager-dialog", title: "\u6587\u4EF6\u8FDE\u63A5", subtitle: "\u7BA1\u7406 FTP \u4E0E FTPS\uFF1BSFTP \u76F4\u63A5\u590D\u7528\u5DF2\u6709 SSH \u4E3B\u673A", onClose: onClose, children: _jsxs("div", { className: `dsh-ssh-ftp-manager${detailOpen ? ' has-detail' : ''}`, children: [_jsxs("aside", { className: "dsh-ssh-ftp-manager-list", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("strong", { children: "FTP / FTPS" }), _jsxs("small", { children: [profiles.length, " \u4E2A\u8FDE\u63A5"] })] }), _jsxs("button", { type: "button", className: "dsh-ssh-primary-button", onClick: create, children: [_jsx(IconPlusOutline16, { size: 15 }), "\u65B0\u5EFA"] })] }), profiles.length === 0 ? _jsxs("div", { className: "dsh-ssh-ftp-list-empty", children: [_jsx("span", { children: _jsx(IconDataOutline16, { size: 20 }) }), _jsx("strong", { children: "\u8FD8\u6CA1\u6709\u72EC\u7ACB\u6587\u4EF6\u8FDE\u63A5" }), _jsx("p", { children: "SFTP \u4F1A\u663E\u793A\u5728\u6587\u4EF6\u7A97\u683C\u7684\u8FDE\u63A5\u5217\u8868\u4E2D\uFF1B\u8FD9\u91CC\u53EA\u7BA1\u7406 FTP \u4E0E FTPS\u3002" }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: create, children: "\u65B0\u5EFA FTPS \u8FDE\u63A5" })] }) : _jsx("div", { className: "dsh-ssh-ftp-profile-list", role: "list", children: profiles.map(profile => {
26
- const active = (editing !== 'new' && editing?.id === profile.id) || deleting?.id === profile.id;
27
- return _jsxs("article", { role: "listitem", "data-ssh-interactive": "choice", "aria-selected": active, className: active ? 'is-active' : '', children: [_jsxs("button", { type: "button", className: "dsh-ssh-ftp-profile-main", onClick: () => select(profile), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${profile.protocol}`, children: protocolLabel(profile.protocol) }), _jsxs("span", { children: [_jsx("strong", { title: profile.name, children: profile.name }), _jsxs("small", { title: `${profile.username}@${profile.host}:${profile.port}`, children: [profile.username, "@", profile.host, ":", profile.port] })] }), _jsx("i", { className: (profile.authMode === 'anonymous' || profile.credential.configured) ? 'is-ready' : 'is-missing', children: profile.authMode === 'anonymous' ? '匿名登录' : profile.credential.configured ? '可用' : '缺少密码' })] }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button is-danger", "aria-label": `删除 ${profile.name}`, onClick: () => confirmDelete(profile), children: _jsx(IconTrashOutline16, { size: 15 }) })] }, profile.id);
28
- }) })] }), _jsx("main", { className: "dsh-ssh-ftp-manager-detail", children: deleting !== undefined ? _jsx(DeleteConnection, { profile: deleting, error: error, onBack: () => setDeleting(undefined), onDelete: () => remove(deleting) })
29
- : editing !== undefined ? _jsx(FtpProfileEditor, { value: editing === 'new' ? undefined : editing, profiles: profiles, vaultEntries: vaultEntries, proxyEntries: proxyEntries, onBack: () => setEditing(undefined), onSaved: () => { setEditing(undefined); onChanged(); } }, editing === 'new' ? 'new' : editing.id)
30
- : _jsxs("div", { className: "dsh-ssh-ftp-manager-overview", children: [_jsx("span", { children: _jsx(IconDataOutline16, { size: 22 }) }), _jsx("h3", { children: "\u9009\u62E9\u4E00\u4E2A\u8FDE\u63A5\u8FDB\u884C\u7F16\u8F91" }), _jsx("p", { children: "\u6587\u4EF6\u7A97\u683C\u4F1A\u628A\u8FD9\u91CC\u4FDD\u5B58\u7684 FTP\u3001FTPS \u4E0E SSH \u4E3B\u673A\u63D0\u4F9B\u7684 SFTP \u6C47\u603B\u6210\u8FDE\u63A5\u5217\u8868\u3002" }), _jsxs("dl", { children: [_jsxs("div", { children: [_jsx("dt", { children: "FTPS" }), _jsx("dd", { children: "\u52A0\u5BC6\u63A7\u5236\u4E0E\u6587\u4EF6\u6570\u636E\uFF0C\u9ED8\u8BA4\u4E25\u683C\u6821\u9A8C\u8BC1\u4E66" })] }), _jsxs("div", { children: [_jsx("dt", { children: "FTP" }), _jsx("dd", { children: "\u517C\u5BB9\u65E7\u670D\u52A1\u5668\uFF0C\u4F46\u8D26\u53F7\u548C\u6587\u4EF6\u5185\u5BB9\u4E0D\u52A0\u5BC6" })] }), _jsxs("div", { children: [_jsx("dt", { children: "SFTP" }), _jsx("dd", { children: "\u7531 SSH \u4E3B\u673A\u7BA1\u7406\uFF0C\u4E0D\u5728\u8FD9\u91CC\u91CD\u590D\u914D\u7F6E" })] })] })] }) })] }) });
28
+ if (deleting !== undefined)
29
+ return _jsx(DeleteConnection, { profile: deleting, error: error, onBack: () => setDeleting(undefined), onDelete: () => remove(deleting) }, deleting.id);
30
+ return _jsx(Dialog, { className: "dsh-ssh-ftp-manager-dialog", title: t("file-transfer-workspace.fileConnections"), subtitle: t("ftp-profile-editor.manageFtpAndFtpsSftpReusesExistingSshHosts"), onClose: onClose, children: _jsxs("div", { className: `dsh-ssh-ftp-manager${detailOpen ? ' has-detail' : ''}`, children: [_jsxs("aside", { className: "dsh-ssh-ftp-manager-list", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("strong", { children: "FTP / FTPS" }), _jsxs("small", { children: [profiles.length, " ", t("client.connections")] })] }), _jsxs("button", { type: "button", className: "dsh-ssh-primary-button", onClick: create, children: [_jsx(IconPlusOutline16, { size: 15 }), t("ftp-profile-editor.new")] })] }), profiles.length === 0 ? _jsxs("div", { className: "dsh-ssh-ftp-list-empty", children: [_jsx("span", { children: _jsx(IconDataOutline16, { size: 20 }) }), _jsx("strong", { children: t("ftp-profile-editor.noStandaloneFileConnectionsYet") }), _jsx("p", { children: t("ftp-profile-editor.sftpAppearsInTheFilePaneSConnectionList") }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: create, children: t("ftp-profile-editor.newFtpsConnection") })] }) : _jsx("div", { className: "dsh-ssh-ftp-profile-list", role: "list", children: profiles.map(profile => {
31
+ const active = editing !== 'new' && editing?.id === profile.id;
32
+ return _jsxs("article", { role: "listitem", "data-ssh-interactive": "choice", "aria-selected": active, className: active ? 'is-active' : '', children: [_jsxs("button", { type: "button", className: "dsh-ssh-ftp-profile-main", onClick: () => select(profile), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${profile.protocol}`, children: protocolLabel(profile.protocol) }), _jsxs("span", { children: [_jsx("strong", { title: profile.name, children: profile.name }), _jsxs("small", { title: `${profile.username}@${profile.host}:${profile.port}`, children: [profile.username, "@", profile.host, ":", profile.port] })] }), _jsx("i", { className: (profile.authMode === 'anonymous' || profile.credential.configured) ? 'is-ready' : 'is-missing', children: profile.authMode === 'anonymous' ? t("ftp-profile-editor.anonymous") : profile.credential.configured ? t("client.available") : t("ftp-profile-editor.missingPassword") })] }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button is-danger", "aria-label": t("client.delete2", [profile.name]), onClick: () => confirmDelete(profile), children: _jsx(IconTrashOutline16, { size: 15 }) })] }, profile.id);
33
+ }) })] }), _jsx("main", { className: "dsh-ssh-ftp-manager-detail", children: editing !== undefined ? _jsx(FtpProfileEditor, { value: editing === 'new' ? undefined : editing, profiles: profiles, vaultEntries: vaultEntries, proxyEntries: proxyEntries, onBack: () => setEditing(undefined), onSaved: () => { setEditing(undefined); onChanged(); } }, editing === 'new' ? 'new' : editing.id)
34
+ : _jsxs("div", { className: "dsh-ssh-ftp-manager-overview", children: [_jsx("span", { children: _jsx(IconDataOutline16, { size: 22 }) }), _jsx("h3", { children: t("ftp-profile-editor.selectAConnectionToEdit") }), _jsx("p", { children: t("ftp-profile-editor.theFilePaneCombinesFtpFtpsAndSftpFrom") }), _jsxs("dl", { children: [_jsxs("div", { children: [_jsx("dt", { children: "FTPS" }), _jsx("dd", { children: t("ftp-profile-editor.encryptsControlAndFileDataCertificatesStrictlyValidatedBy") })] }), _jsxs("div", { children: [_jsx("dt", { children: "FTP" }), _jsx("dd", { children: t("ftp-profile-editor.compatibleWithLegacyServersButCredentialsAndFileContent") })] }), _jsxs("div", { children: [_jsx("dt", { children: "SFTP" }), _jsx("dd", { children: t("ftp-profile-editor.managedBySshHostsNoNeedToConfigureIt") })] })] })] }) })] }) });
31
35
  }
32
36
  function DeleteConnection({ profile, error, onBack, onDelete }) {
37
+ useSshLocale();
33
38
  const [deleting, setDeleting] = useState(false);
34
- return _jsxs("div", { className: "dsh-ssh-ftp-delete-panel", children: [_jsxs("button", { type: "button", className: "dsh-ssh-ftp-detail-back", onClick: onBack, children: [_jsx(IconChevronLeftOutline14, { size: 14 }), "\u8FD4\u56DE\u8FDE\u63A5\u5217\u8868"] }), _jsx("span", { className: "dsh-ssh-ftp-delete-mark", children: _jsx(IconWarningOutline16, { size: 20 }) }), _jsxs("h3", { children: ["\u5220\u9664\u201C", profile.name, "\u201D\uFF1F"] }), _jsx("p", { children: "\u5C06\u79FB\u9664\u8BE5 FTP/FTPS \u8FDE\u63A5\u53CA\u5176\u72EC\u7ACB\u4FDD\u5B58\u7684\u5BC6\u7801\uFF0C\u4E0D\u4F1A\u5220\u9664\u8FDC\u7AEF\u670D\u52A1\u5668\u4E0A\u7684\u4EFB\u4F55\u6587\u4EF6\u3002" }), _jsxs("code", { children: [profile.username, "@", profile.host, ":", profile.port] }), 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", onClick: onBack, disabled: deleting, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-ssh-danger-button", disabled: deleting, onClick: () => { setDeleting(true); void onDelete().finally(() => setDeleting(false)); }, children: deleting ? '正在删除…' : '删除连接' })] })] });
39
+ return _jsxs(Dialog, { variant: "confirmation", dismissible: !deleting, title: t('client.delete2', [profile.name]), subtitle: t("ftp-profile-editor.thisRemovesTheFtpFtpsConnectionAndItsSeparately"), onClose: () => { if (!deleting)
40
+ onBack(); }, children: [_jsxs("p", { className: "dsh-ssh-confirmation-target", children: [profile.username, "@", profile.host, ":", profile.port] }), 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", onClick: onBack, disabled: deleting, children: t("client.cancel") }), _jsx("button", { type: "button", className: "dsh-ssh-danger-button", disabled: deleting, onClick: () => { setDeleting(true); void onDelete().finally(() => setDeleting(false)); }, children: deleting ? t("file-entry-delete-dialog.deleting") : t("ftp-profile-editor.deleteConnection") })] })] });
35
41
  }
36
42
  function FtpProfileEditor({ value, profiles, vaultEntries, proxyEntries, onBack, onSaved }) {
43
+ const sshLocale = useSshLocale();
37
44
  const passwordEntries = vaultEntries.filter(entry => entry.authType === 'password');
38
45
  const [form, setForm] = useState({
39
46
  authMode: value?.authMode ?? 'password',
@@ -75,7 +82,7 @@ function FtpProfileEditor({ value, profiles, vaultEntries, proxyEntries, onBack,
75
82
  setTestResult(undefined);
76
83
  try {
77
84
  await api('/ftp-profiles/test-draft', { method: 'POST', body: JSON.stringify({ ...payload(), ...(value === undefined ? {} : { profileId: value.id }) }) });
78
- setTestResult('连接成功,初始目录可读取');
85
+ setTestResult(t("ftp-profile-editor.connectedInitialDirectoryIsReadable"));
79
86
  }
80
87
  catch (reason) {
81
88
  setError(errorMessage(reason));
@@ -85,9 +92,9 @@ function FtpProfileEditor({ value, profiles, vaultEntries, proxyEntries, onBack,
85
92
  }
86
93
  };
87
94
  const protocolChanged = (protocol) => setForm(current => ({ ...current, protocol, port: current.port === '21' || current.port === '990' ? String(protocol === 'ftps-implicit' ? 990 : 21) : current.port }));
88
- const groupOptions = useMemo(() => profiles.flatMap(item => item.group === undefined ? [] : [item.group]), [profiles]);
89
- const tagOptions = useMemo(() => profiles.flatMap(item => item.tags), [profiles]);
90
- return _jsxs("form", { className: "dsh-ssh-ftp-editor-form", onSubmit: event => { void submit(event); }, children: [_jsxs("header", { className: "dsh-ssh-ftp-editor-heading", children: [_jsxs("button", { type: "button", className: "dsh-ssh-ftp-detail-back", onClick: onBack, children: [_jsx(IconChevronLeftOutline14, { size: 14 }), "\u8FD4\u56DE\u8FDE\u63A5\u5217\u8868"] }), _jsxs("span", { children: [_jsx("strong", { children: value === undefined ? '新建文件连接' : value.name }), _jsx("small", { children: value === undefined ? '填写服务器和认证信息' : '修改后可先测试再保存' })] })] }), _jsxs("div", { className: "dsh-ssh-ftp-editor-scroll", children: [_jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8FDE\u63A5\u7C7B\u578B" }), _jsx("small", { children: "\u4F18\u5148\u4F7F\u7528 FTPS\uFF1B\u4EC5\u5728\u670D\u52A1\u5668\u4E0D\u652F\u6301 TLS \u65F6\u9009\u62E9 FTP" })] }), _jsx("div", { className: "dsh-ssh-ftp-protocol-options", role: "radiogroup", "aria-label": "\u8FDE\u63A5\u534F\u8BAE", children: [['ftps-explicit', 'FTPS', '显式 TLS · 推荐'], ['ftps-implicit', 'FTPS-I', '隐式 TLS'], ['ftp', 'FTP', '未加密']].map(option => _jsxs("button", { type: "button", "data-ssh-interactive": "choice", role: "radio", "aria-checked": form.protocol === option[0], className: form.protocol === option[0] ? 'is-active' : '', onClick: () => protocolChanged(option[0]), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${option[0]}`, children: option[1] }), _jsxs("span", { children: [_jsx("strong", { children: option[1] }), _jsx("small", { children: option[2] })] })] }, option[0])) }), form.protocol === 'ftp' && _jsx("p", { className: "dsh-ssh-form-warning", children: "\u666E\u901A FTP \u7684\u8D26\u53F7\u3001\u5BC6\u7801\u548C\u6587\u4EF6\u5185\u5BB9\u5747\u4E0D\u52A0\u5BC6\u3002" })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u670D\u52A1\u5668" }), _jsx("small", { children: "\u540D\u79F0\u7528\u4E8E\u8FDE\u63A5\u5217\u8868\uFF0C\u5206\u7EC4\u4E0E\u6807\u7B7E\u53EF\u590D\u7528\u5DF2\u6709\u9009\u9879" })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u8FDE\u63A5\u540D\u79F0", children: _jsx("input", { autoFocus: value === undefined, required: true, maxLength: 80, value: form.name, onChange: event => setForm({ ...form, name: event.target.value }) }) }), _jsx(Field, { label: "\u5206\u7EC4\uFF08\u53EF\u9009\uFF09", children: _jsx(SuggestionInput, { ariaLabel: "FTP \u5206\u7EC4", maxLength: 64, options: groupOptions, placeholder: "\u9009\u62E9\u5DF2\u6709\u5206\u7EC4\u6216\u8F93\u5165\u65B0\u5206\u7EC4", value: form.group, onChange: group => setForm(current => ({ ...current, group })) }) })] }), _jsxs("div", { className: "dsh-ssh-form-grid is-host", children: [_jsx(Field, { label: "\u670D\u52A1\u5668\u5730\u5740", children: _jsx("input", { required: true, maxLength: 253, spellCheck: false, value: form.host, onChange: event => setForm({ ...form, host: event.target.value }) }) }), _jsx(Field, { label: "\u7AEF\u53E3", children: _jsx("input", { required: true, type: "number", min: "1", max: "65535", value: form.port, onChange: event => setForm({ ...form, port: event.target.value }) }) })] }), _jsx(Field, { label: "\u6807\u7B7E\uFF08\u53EF\u9009\uFF09", hint: "\u53EF\u9009\u62E9\u5DF2\u6709\u6807\u7B7E\u6216\u76F4\u63A5\u8F93\u5165\uFF1B\u591A\u4E2A\u6807\u7B7E\u4F7F\u7528\u9017\u53F7\u5206\u9694\u3002", children: _jsx(SuggestionInput, { ariaLabel: "FTP \u6807\u7B7E", multiple: true, options: tagOptions, placeholder: "\u9009\u62E9\u6216\u8F93\u5165\u6807\u7B7E", value: form.tags, onChange: tags => setForm(current => ({ ...current, tags })) }) })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8EAB\u4EFD\u8BA4\u8BC1" }), _jsx("small", { children: "\u5BC6\u7801\u53EA\u5199\u5165 DSH \u51ED\u636E\u670D\u52A1\uFF0C\u4E0D\u4F1A\u5728\u754C\u9762\u56DE\u663E" })] }), _jsx(Field, { label: "\u767B\u5F55\u65B9\u5F0F", children: _jsxs("select", { value: form.authMode, onChange: event => { setForm({ ...form, authMode: event.target.value }); setTestResult(undefined); }, children: [_jsx("option", { value: "password", children: "\u8D26\u53F7\u5BC6\u7801" }), _jsx("option", { value: "anonymous", children: "\u533F\u540D\u767B\u5F55" })] }) }), form.authMode === 'anonymous' ? _jsx("p", { children: "\u4F7F\u7528 anonymous \u767B\u5F55\uFF0C\u65E0\u9700\u586B\u5199\u8D26\u53F7\u5BC6\u7801\uFF1B\u670D\u52A1\u5668\u5FC5\u987B\u5F00\u653E\u533F\u540D\u8BBF\u95EE\u3002" }) : _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u7528\u6237\u540D", children: _jsx("input", { required: true, maxLength: 128, autoComplete: "username", value: form.username, onChange: event => setForm({ ...form, username: event.target.value }) }) }), _jsx(Field, { label: "\u51ED\u636E\u6765\u6E90", children: _jsxs("select", { value: form.credentialId, onChange: event => setForm({ ...form, credentialId: event.target.value }), children: [_jsx("option", { value: "", children: "\u6B64\u8FDE\u63A5\u5355\u72EC\u4FDD\u5B58\u5BC6\u7801" }), passwordEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.username] }, entry.id))] }) })] }), !form.credentialId && _jsx(Field, { label: "\u5BC6\u7801", hint: value?.credential.configured && value.credential.source === 'profile' ? '已保存;留空保持不变' : '保存后不会回显', children: _jsx("input", { required: value === undefined || value.credential.source !== 'profile' || !value.credential.configured, type: "password", autoComplete: "new-password", value: form.password, onChange: event => setForm({ ...form, password: event.target.value }) }) })] })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: "\u8DEF\u5F84\u4E0E\u7F51\u7EDC" }), _jsx("small", { children: "\u4EE3\u7406\u590D\u7528 SSH \u63D2\u4EF6\u7684\u4EE3\u7406\u5E93\uFF0C\u63A7\u5236\u548C\u6570\u636E\u8FDE\u63A5\u4F7F\u7528\u540C\u4E00\u8DEF\u5F84" })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u521D\u59CB\u76EE\u5F55", children: _jsx("input", { required: true, maxLength: 4096, spellCheck: false, value: form.initialPath, onChange: event => setForm({ ...form, initialPath: event.target.value }) }) }), _jsx(Field, { label: "\u8FDE\u63A5\u4EE3\u7406", children: _jsxs("select", { value: form.proxyId, onChange: event => setForm({ ...form, proxyId: event.target.value }), children: [_jsx("option", { value: "", children: "\u76F4\u8FDE" }), proxyEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.proxyType.toUpperCase()] }, entry.id))] }) })] }), _jsxs("details", { className: "dsh-ssh-form-advanced", children: [_jsx("summary", { children: "\u9AD8\u7EA7\u8FDE\u63A5\u8BBE\u7F6E" }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: "\u8FDE\u63A5\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09", children: _jsx("input", { required: true, type: "number", min: "1000", max: "120000", step: "1000", value: form.connectTimeoutMs, onChange: event => setForm({ ...form, connectTimeoutMs: event.target.value }) }) }), _jsx(Field, { label: "TLS \u670D\u52A1\u5668\u540D\u79F0", hint: "\u8BC1\u4E66\u540D\u79F0\u4E0E\u4E3B\u673A\u4E0D\u540C\u65F6\u586B\u5199", children: _jsx("input", { maxLength: 253, spellCheck: false, value: form.tlsServerName, onChange: event => setForm({ ...form, tlsServerName: event.target.value }) }) })] })] })] }), testResult && _jsx("p", { className: "dsh-ssh-inline-success", role: "status", children: testResult }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error })] }), _jsxs("footer", { className: "dsh-ssh-ftp-editor-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { void test(); }, disabled: testing || saving, children: testing ? '正在测试…' : '测试连接' }), _jsx("span", {}), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: onBack, disabled: saving || testing, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: "dsh-ssh-primary-button", disabled: saving || testing, children: saving ? '正在保存…' : '保存连接' })] })] });
95
+ const groupOptions = useMemo(() => profiles.flatMap(item => item.group === undefined ? [] : [item.group]), [profiles, sshLocale]);
96
+ const tagOptions = useMemo(() => profiles.flatMap(item => item.tags), [profiles, sshLocale]);
97
+ return _jsxs("form", { className: "dsh-ssh-ftp-editor-form", onSubmit: event => { void submit(event); }, children: [_jsxs("header", { className: "dsh-ssh-ftp-editor-heading", children: [_jsxs("button", { type: "button", className: "dsh-ssh-ftp-detail-back", onClick: onBack, children: [_jsx(IconChevronLeftOutline14, { size: 14 }), t("file-transfer-workspace.backToConnectionList")] }), _jsxs("span", { children: [_jsx("strong", { children: value === undefined ? t("ftp-profile-editor.newFileConnection") : value.name }), _jsx("small", { children: value === undefined ? t("ftp-profile-editor.enterServerAndAuthenticationDetails") : t("ftp-profile-editor.afterEditsTestBeforeSaving") })] })] }), _jsxs("div", { className: "dsh-ssh-ftp-editor-scroll", children: [_jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: t("ftp-profile-editor.connectionType") }), _jsx("small", { children: t("ftp-profile-editor.preferFtpsChooseFtpOnlyWhenTheServerLacks") })] }), _jsx("div", { className: "dsh-ssh-ftp-protocol-options", role: "radiogroup", "aria-label": t("ftp-profile-editor.connectionProtocol"), children: [['ftps-explicit', 'FTPS', t("ftp-profile-editor.explicitTlsRecommended")], ['ftps-implicit', 'FTPS-I', t("ftp-profile-editor.implicitTls")], ['ftp', 'FTP', t("ftp-profile-editor.unencrypted")]].map(option => _jsxs("button", { type: "button", "data-ssh-interactive": "choice", role: "radio", "aria-checked": form.protocol === option[0], className: form.protocol === option[0] ? 'is-active' : '', onClick: () => protocolChanged(option[0]), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${option[0]}`, children: option[1] }), _jsxs("span", { children: [_jsx("strong", { children: option[1] }), _jsx("small", { children: option[2] })] })] }, option[0])) }), form.protocol === 'ftp' && _jsx("p", { className: "dsh-ssh-form-warning", children: t("ftp-profile-editor.plainFtpSendsYourAccountPasswordAndFileContent") })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: t("ftp-profile-editor.server") }), _jsx("small", { children: t("ftp-profile-editor.theNameAppearsInTheConnectionListGroupsAnd") })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: t("ftp-profile-editor.connectionName"), children: _jsx("input", { autoFocus: value === undefined, required: true, maxLength: 80, value: form.name, onChange: event => setForm({ ...form, name: event.target.value }) }) }), _jsx(Field, { label: t("ftp-profile-editor.groupOptional"), children: _jsx(SuggestionInput, { ariaLabel: t("ftp-profile-editor.ftpGroups"), maxLength: 64, options: groupOptions, placeholder: t("ftp-profile-editor.selectAnExistingGroupOrEnterANewOne"), value: form.group, onChange: group => setForm(current => ({ ...current, group })) }) })] }), _jsxs("div", { className: "dsh-ssh-form-grid is-host", children: [_jsx(Field, { label: t("ftp-profile-editor.serverAddress"), children: _jsx("input", { required: true, maxLength: 253, spellCheck: false, value: form.host, onChange: event => setForm({ ...form, host: event.target.value }) }) }), _jsx(Field, { label: t("ftp-profile-editor.port"), children: _jsx("input", { required: true, type: "number", min: "1", max: "65535", value: form.port, onChange: event => setForm({ ...form, port: event.target.value }) }) })] }), _jsx(Field, { label: t("ftp-profile-editor.tagsOptional"), hint: t("ftp-profile-editor.pickExistingTagsOrTypeNewOnesSeparateMultiple"), children: _jsx(SuggestionInput, { ariaLabel: t("ftp-profile-editor.ftpTags"), multiple: true, options: tagOptions, placeholder: t("ftp-profile-editor.selectOrEnterTags"), value: form.tags, onChange: tags => setForm(current => ({ ...current, tags })) }) })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: t("ftp-profile-editor.authentication") }), _jsx("small", { children: t("ftp-profile-editor.thePasswordIsWrittenOnlyToTheDshCredential") })] }), _jsx(Field, { label: t("ftp-profile-editor.signInMethod"), children: _jsxs("select", { value: form.authMode, onChange: event => { setForm({ ...form, authMode: event.target.value }); setTestResult(undefined); }, children: [_jsx("option", { value: "password", children: t("ftp-profile-editor.usernameAndPassword") }), _jsx("option", { value: "anonymous", children: t("ftp-profile-editor.anonymous") })] }) }), form.authMode === 'anonymous' ? _jsx("p", { children: t("ftp-profile-editor.signInAsAnonymousWithoutEnteringCredentialsTheServer") }) : _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: t("client.username"), children: _jsx("input", { required: true, maxLength: 128, autoComplete: "username", value: form.username, onChange: event => setForm({ ...form, username: event.target.value }) }) }), _jsx(Field, { label: t("ftp-profile-editor.credentialSource"), children: _jsxs("select", { value: form.credentialId, onChange: event => setForm({ ...form, credentialId: event.target.value }), children: [_jsx("option", { value: "", children: t("ftp-profile-editor.saveThePasswordWithThisConnectionOnly") }), passwordEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.username] }, entry.id))] }) })] }), !form.credentialId && _jsx(Field, { label: t("client.password"), hint: value?.credential.configured && value.credential.source === 'profile' ? t("client.savedLeaveBlankToKeepUnchanged") : t("ftp-profile-editor.notEchoedAfterSaving"), children: _jsx("input", { required: value === undefined || value.credential.source !== 'profile' || !value.credential.configured, type: "password", autoComplete: "new-password", value: form.password, onChange: event => setForm({ ...form, password: event.target.value }) }) })] })] }), _jsxs("section", { className: "dsh-ssh-ftp-editor-section", children: [_jsxs("div", { className: "dsh-ssh-form-section-heading", children: [_jsx("strong", { children: t("ftp-profile-editor.pathAndNetwork") }), _jsx("small", { children: t("ftp-profile-editor.proxyReusesTheSshPluginSProxyLibraryControl") })] }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: t("ftp-profile-editor.initialDirectory"), children: _jsx("input", { required: true, maxLength: 4096, spellCheck: false, value: form.initialPath, onChange: event => setForm({ ...form, initialPath: event.target.value }) }) }), _jsx(Field, { label: t("ftp-profile-editor.connectionProxy"), children: _jsxs("select", { value: form.proxyId, onChange: event => setForm({ ...form, proxyId: event.target.value }), children: [_jsx("option", { value: "", children: t("client.direct") }), proxyEntries.map(entry => _jsxs("option", { value: entry.id, children: [entry.name, " \u00B7 ", entry.proxyType.toUpperCase()] }, entry.id))] }) })] }), _jsxs("details", { className: "dsh-ssh-form-advanced", children: [_jsx("summary", { children: t("ftp-profile-editor.advancedConnectionSettings") }), _jsxs("div", { className: "dsh-ssh-form-grid", children: [_jsx(Field, { label: t("ftp-profile-editor.connectionTimeoutMs"), children: _jsx("input", { required: true, type: "number", min: "1000", max: "120000", step: "1000", value: form.connectTimeoutMs, onChange: event => setForm({ ...form, connectTimeoutMs: event.target.value }) }) }), _jsx(Field, { label: t("ftp-profile-editor.tlsServerName"), hint: t("ftp-profile-editor.fillInWhenTheCertificateNameDiffersFromThe"), children: _jsx("input", { maxLength: 253, spellCheck: false, value: form.tlsServerName, onChange: event => setForm({ ...form, tlsServerName: event.target.value }) }) })] })] })] }), testResult && _jsx("p", { className: "dsh-ssh-inline-success", role: "status", children: testResult }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error })] }), _jsxs("footer", { className: "dsh-ssh-ftp-editor-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { void test(); }, disabled: testing || saving, children: testing ? t("ftp-profile-editor.testing") : t("client.testConnection") }), _jsx("span", {}), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: onBack, disabled: saving || testing, children: t("client.cancel") }), _jsx("button", { type: "submit", className: "dsh-ssh-primary-button", disabled: saving || testing, children: saving ? t("client.saving") : t("ftp-profile-editor.saveConnection") })] })] });
91
98
  }
92
99
  function protocolLabel(protocol) { return protocol === 'ftp' ? 'FTP' : protocol === 'ftps-explicit' ? 'FTPS' : 'FTPS-I'; }
93
100
  //# sourceMappingURL=ftp-profile-editor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ftp-profile-editor.js","sourceRoot":"","sources":["../src/ftp-profile-editor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ftp-profile-editor.js","sourceRoot":"","sources":["../src/ftp-profile-editor.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { type CredentialProvider } from '@deepseek-ai/dsh-credentials';
2
- import { type CredentialEntry, type FtpProfile, type ProxyEntry, type RemoteProject, type SshProfile, type SshCredentialPayload, type SshState } from './domain.js';
2
+ import { type CredentialEntry, type FtpProfile, type ProxyEntry, type RemoteProject, type SshProfile, type SshCredentialPayload, type SshState, type SavedCommand, type GroupProxy } from './domain.js';
3
3
  import { SshCredentialVault } from './credentials.js';
4
4
  import { type GitHubDeviceFlowStart, type GitHubDeviceFlowStatus } from './github-device-auth.js';
5
5
  import { SshStore } from './store.js';
6
- declare const COLLECTION_NAMES: readonly ["profiles", "ftpProfiles", "remoteProjects", "credentialEntries", "proxyEntries"];
6
+ declare const COLLECTION_NAMES: readonly ["profiles", "ftpProfiles", "remoteProjects", "credentialEntries", "proxyEntries", "commands", "groupProxies"];
7
7
  export type GistSyncStrategy = 'smart' | 'local-first' | 'cloud-first';
8
8
  type CollectionName = typeof COLLECTION_NAMES[number];
9
9
  type SecretScope = 'ssh-profile' | 'ftp-profile' | 'vault-entry' | 'proxy-entry';
@@ -38,6 +38,8 @@ export interface PortableSshSnapshot {
38
38
  remoteProjects: RemoteProject[];
39
39
  credentialEntries: CredentialEntry[];
40
40
  proxyEntries: ProxyEntry[];
41
+ commands?: SavedCommand[];
42
+ groupProxies?: GroupProxy[];
41
43
  };
42
44
  tombstones: Record<CollectionName, Record<string, number>>;
43
45
  secrets: EncryptedSecretRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"gist-sync.d.ts","sourceRoot":"","sources":["../src/gist-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gist-sync.d.ts","sourceRoot":"","sources":["../src/gist-sync.ts"],"names":[],"mappings":"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"}
package/lib/gist-sync.js CHANGED
@@ -5,13 +5,15 @@ import { credentialKey } from '@deepseek-ai/dsh-credentials';
5
5
  import { normalizeCredentialEntryDraft, normalizeFtpProfileDraft, normalizeProfileDraft, normalizeProxyEntryDraft, normalizeRemoteProjectDraft, } from './domain.js';
6
6
  import { GitHubDeviceAuthService } from './github-device-auth.js';
7
7
  import { createGitHubHttpTransport } from './github-http.js';
8
+ import { commandDraft } from './commands.js';
9
+ import { parseGroupProxy } from './group-proxy.js';
8
10
  const MAIN_FILE = 'dsh-ssh.config.json';
9
11
  const BACKUP_PREFIX = 'dsh-ssh.backup.';
10
12
  const MAX_GIST_BYTES = 1_048_576;
11
13
  const AUTO_SYNC_DELAY_MS = 3_000;
12
14
  const AUTO_PULL_INTERVAL_MS = 5 * 60_000;
13
15
  const GIST_CREDENTIAL_SCOPE = 'dsh-ssh-gist-sync';
14
- const COLLECTION_NAMES = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries'];
16
+ const COLLECTION_NAMES = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries', 'commands', 'groupProxies'];
15
17
  export class GitHubApiError extends Error {
16
18
  status;
17
19
  detail;
@@ -329,6 +331,15 @@ export class GistSyncService {
329
331
  return this.view();
330
332
  }
331
333
  const remote = parsePortableSnapshot(content);
334
+ const missingCollections = ['commands', 'groupProxies'].filter(name => remote.collections[name] === undefined);
335
+ const legacyRemote = missingCollections.length ? structuredClone(remote) : undefined;
336
+ for (const name of missingCollections) {
337
+ // Missing means an old client/backup, not an explicit deletion.
338
+ ;
339
+ remote.collections[name] = structuredClone(local.collections[name] ?? []);
340
+ remote.tombstones[name] = { ...local.tombstones[name] };
341
+ }
342
+ assertPortableReferences(remote.collections);
332
343
  const remoteDigest = snapshotDigest(remote);
333
344
  const isFreshEmptyDevice = this.metadata.lastSyncedDigest === undefined
334
345
  && !snapshotHasPortableData(local)
@@ -337,19 +348,23 @@ export class GistSyncService {
337
348
  ? 'remote'
338
349
  : resolveSyncDecision(localDigest, remoteDigest, this.metadata.lastSyncedDigest, this.metadata.settings.strategy);
339
350
  if (decision === 'unchanged') {
351
+ if (legacyRemote)
352
+ gist = await this.writeMain(client, gist, remote, legacyRemote);
340
353
  this.complete(remote, remoteDigest, 'unchanged', gist.version, generation);
341
354
  }
342
355
  else if (decision === 'remote') {
343
356
  if (localDigest !== remoteDigest)
344
357
  gist = await this.writeBackup(client, gist, local);
358
+ if (legacyRemote)
359
+ gist = await this.writeMain(client, gist, remote, legacyRemote);
345
360
  await this.apply(remote, passphrase);
346
361
  this.complete(remote, remoteDigest, 'downloaded', gist.version, generation);
347
362
  }
348
363
  else {
349
364
  const result = decision === 'merge' ? mergePortableSnapshots(local, remote, this.metadata.deviceId) : local;
350
365
  const resultDigest = snapshotDigest(result);
351
- if (remoteDigest !== resultDigest) {
352
- gist = await this.writeMain(client, gist, result, remote);
366
+ if (legacyRemote || remoteDigest !== resultDigest) {
367
+ gist = await this.writeMain(client, gist, result, legacyRemote ?? remote);
353
368
  }
354
369
  if (localDigest !== resultDigest)
355
370
  await this.apply(result, passphrase);
@@ -449,11 +464,17 @@ export class GistSyncService {
449
464
  state.remoteProjects = structuredClone(snapshot.collections.remoteProjects);
450
465
  state.credentialEntries = structuredClone(snapshot.collections.credentialEntries);
451
466
  state.proxyEntries = structuredClone(snapshot.collections.proxyEntries);
467
+ if (snapshot.collections.commands !== undefined)
468
+ state.commands = structuredClone(snapshot.collections.commands);
469
+ if (snapshot.collections.groupProxies !== undefined)
470
+ state.groupProxies = structuredClone(snapshot.collections.groupProxies);
452
471
  });
453
472
  await this.replaceSecrets(previous, snapshot, secrets);
454
473
  }
455
474
  finally {
456
475
  this.applying = false;
476
+ // Credential replacement may finish after a UI reader sees the durable collections.
477
+ this.store.markWorkspaceChanged();
457
478
  }
458
479
  }
459
480
  async replaceSecrets(previous, snapshot, secrets) {
@@ -504,14 +525,14 @@ export class GistSyncService {
504
525
  let changed = false;
505
526
  const now = Date.now();
506
527
  for (const name of COLLECTION_NAMES) {
507
- const previousIds = new Set(previous[name].map(item => item.id));
508
- const nextIds = new Set(next[name].map(item => item.id));
528
+ const previousIds = new Set((previous[name] ?? []).map(item => item.id));
529
+ const nextIds = new Set((next[name] ?? []).map(item => item.id));
509
530
  for (const id of previousIds)
510
531
  if (!nextIds.has(id)) {
511
532
  this.metadata.tombstones[name][id] = now;
512
533
  changed = true;
513
534
  }
514
- if (!changed && snapshotCollectionDigest(previous[name]) !== snapshotCollectionDigest(next[name]))
535
+ if (!changed && snapshotCollectionDigest(previous[name] ?? []) !== snapshotCollectionDigest(next[name] ?? []))
515
536
  changed = true;
516
537
  }
517
538
  if (!changed)
@@ -566,6 +587,8 @@ export function createPortableSnapshot(state, deviceId, tombstones = emptyTombst
566
587
  remoteProjects: sortItems(state.remoteProjects),
567
588
  credentialEntries: sortItems(state.credentialEntries),
568
589
  proxyEntries: sortItems(state.proxyEntries),
590
+ commands: sortItems(state.commands ?? []),
591
+ groupProxies: sortItems(state.groupProxies ?? []),
569
592
  },
570
593
  tombstones: cloneTombstones(tombstones),
571
594
  secrets: [],
@@ -608,6 +631,8 @@ export function parsePortableSnapshot(content) {
608
631
  remoteProjects: array(collections.remoteProjects, 'remoteProjects').map(parseRemoteProject),
609
632
  credentialEntries: array(collections.credentialEntries, 'credentialEntries').map(parseCredentialEntry),
610
633
  proxyEntries: array(collections.proxyEntries, 'proxyEntries').map(parseProxyEntry),
634
+ ...(collections.commands === undefined ? {} : { commands: array(collections.commands, 'commands').map(parseSavedCommand) }),
635
+ ...(collections.groupProxies === undefined ? {} : { groupProxies: array(collections.groupProxies, 'groupProxies').map(parseGroupProxy) }),
611
636
  },
612
637
  tombstones: parseTombstones(input.tombstones),
613
638
  secrets: input.secrets === undefined ? [] : array(input.secrets, 'secrets').map(parseEncryptedSecretRecord).sort((a, b) => secretKey(a.scope, a.id).localeCompare(secretKey(b.scope, b.id))),
@@ -620,10 +645,10 @@ export function mergePortableSnapshots(local, remote, deviceId, now = Date.now()
620
645
  const tombstones = emptyTombstones();
621
646
  const collections = {};
622
647
  for (const name of COLLECTION_NAMES) {
623
- const localItems = new Map(local.collections[name].map(item => [item.id, item]));
624
- const remoteItems = new Map(remote.collections[name].map(item => [item.id, item]));
648
+ const localItems = new Map((local.collections[name] ?? []).map(item => [item.id, item]));
649
+ const remoteItems = new Map((remote.collections[name] ?? []).map(item => [item.id, item]));
625
650
  const deleted = { ...local.tombstones[name] };
626
- for (const [id, deletedAt] of Object.entries(remote.tombstones[name]))
651
+ for (const [id, deletedAt] of Object.entries(remote.tombstones[name] ?? {}))
627
652
  deleted[id] = Math.max(deleted[id] ?? 0, deletedAt);
628
653
  tombstones[name] = deleted;
629
654
  const ids = new Set([...localItems.keys(), ...remoteItems.keys(), ...Object.keys(deleted)]);
@@ -639,8 +664,11 @@ export function mergePortableSnapshots(local, remote, deviceId, now = Date.now()
639
664
  collections[name] = sortItems(merged);
640
665
  }
641
666
  const result = { schemaVersion: 1, exportedAt: now, sourceDeviceId: deviceId, collections, tombstones, secrets: [] };
667
+ if ((collections.commands?.length ?? 0) > 500)
668
+ throw new Error('合并后常用命令超过 500 条,请先整理后重试');
642
669
  result.secrets = mergeSecretRecords(local.secrets, remote.secrets, result);
643
670
  repairReferences(result, now);
671
+ assertPortableReferences(result.collections);
644
672
  result.secrets = result.secrets.filter(record => secretOwnerExists(record, result.collections));
645
673
  return result;
646
674
  }
@@ -680,7 +708,7 @@ function normalizeSettings(value) {
680
708
  }
681
709
  function defaultSettings() { return { autoSync: false, strategy: 'smart', backupRetention: 5 }; }
682
710
  function emptyTombstones() {
683
- return { profiles: {}, ftpProfiles: {}, remoteProjects: {}, credentialEntries: {}, proxyEntries: {} };
711
+ return { profiles: {}, ftpProfiles: {}, remoteProjects: {}, credentialEntries: {}, proxyEntries: {}, commands: {}, groupProxies: {} };
684
712
  }
685
713
  function cloneTombstones(value) {
686
714
  return Object.fromEntries(COLLECTION_NAMES.map(name => [name, { ...value[name] }]));
@@ -825,6 +853,10 @@ function parseProxyEntry(value) {
825
853
  const draft = normalizeProxyEntryDraft(input);
826
854
  return { id: text(input.id, 'proxy.id', 1, 100), ...draft, createdAt: timestamp(input.createdAt, 'createdAt'), updatedAt: timestamp(input.updatedAt, 'updatedAt') };
827
855
  }
856
+ function parseSavedCommand(value) {
857
+ const input = asRecord(value, 'saved command');
858
+ return { ...commandDraft(input), id: text(input.id, 'command.id', 1, 100), createdAt: timestamp(input.createdAt, 'createdAt'), updatedAt: timestamp(input.updatedAt, 'updatedAt') };
859
+ }
828
860
  function parseEncryptedSecretRecord(value) {
829
861
  const input = asRecord(value, 'encrypted secret');
830
862
  const scope = input.scope;
@@ -953,8 +985,10 @@ function parseTombstones(value) {
953
985
  return result;
954
986
  }
955
987
  function assertUniqueIds(snapshot) {
988
+ if ((snapshot.collections.commands?.length ?? 0) > 500)
989
+ throw new Error('Gist 常用命令超过 500 条');
956
990
  for (const name of COLLECTION_NAMES) {
957
- const ids = snapshot.collections[name].map(item => item.id);
991
+ const ids = (snapshot.collections[name] ?? []).map(item => item.id);
958
992
  if (new Set(ids).size !== ids.length)
959
993
  throw new Error(`Gist 配置包含重复的 ${name} ID`);
960
994
  }
@@ -968,6 +1002,9 @@ function assertPortableReferences(collections) {
968
1002
  const profiles = new Set(collections.profiles.map(item => item.id));
969
1003
  const credentials = new Set(collections.credentialEntries.map(item => item.id));
970
1004
  const proxies = new Set(collections.proxyEntries.map(item => item.id));
1005
+ for (const group of collections.groupProxies ?? [])
1006
+ if (group.proxyId !== undefined && !proxies.has(group.proxyId))
1007
+ throw new Error(`分组 ${group.name} 引用了缺失的代理,请先处理代理引用后重试同步`);
971
1008
  for (const profile of collections.profiles) {
972
1009
  if (profile.credentialId !== undefined && !credentials.has(profile.credentialId))
973
1010
  throw new Error(`主机 ${profile.name} 引用了缺失的凭据条目`);
@@ -1020,7 +1057,7 @@ function sortItems(items) { return structuredClone(items).sort((a, b) => a.id.lo
1020
1057
  function uniqueIds(...groups) { return [...new Set(groups.flatMap(group => group.map(item => item.id)))]; }
1021
1058
  function snapshotCollectionDigest(items) { return createHash('sha256').update(stableJson(sortItems(items))).digest('hex'); }
1022
1059
  function snapshotHasPortableData(snapshot) {
1023
- return COLLECTION_NAMES.some(name => snapshot.collections[name].length > 0 || Object.keys(snapshot.tombstones[name]).length > 0)
1060
+ return COLLECTION_NAMES.some(name => (snapshot.collections[name]?.length ?? 0) > 0 || Object.keys(snapshot.tombstones[name] ?? {}).length > 0)
1024
1061
  || snapshot.secrets.length > 0;
1025
1062
  }
1026
1063
  function stableJson(value) { return JSON.stringify(stableValue(value)); }