@lemoncat7/dsh-ssh 1.1.7 → 1.2.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.
- package/ARCHITECTURE.md +62 -0
- package/README.md +25 -17
- package/lib/activity-panel.d.ts +17 -0
- package/lib/activity-panel.d.ts.map +1 -0
- package/lib/activity-panel.js +160 -0
- package/lib/activity-panel.js.map +1 -0
- package/lib/adaptive-workspace.d.ts +22 -0
- package/lib/adaptive-workspace.d.ts.map +1 -0
- package/lib/adaptive-workspace.js +37 -0
- package/lib/adaptive-workspace.js.map +1 -0
- package/lib/api.js +93 -6
- package/lib/api.js.map +1 -1
- package/lib/client-api.d.ts +20 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js +13 -0
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +3709 -21040
- package/lib/client.js.map +4 -4
- package/lib/domain.d.ts +17 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +15 -0
- package/lib/domain.js.map +1 -1
- package/lib/profile-editor.d.ts +16 -0
- package/lib/profile-editor.d.ts.map +1 -0
- package/lib/profile-editor.js +143 -0
- package/lib/profile-editor.js.map +1 -0
- package/lib/project-session-dialog.d.ts +15 -0
- package/lib/project-session-dialog.d.ts.map +1 -0
- package/lib/project-session-dialog.js +60 -0
- package/lib/project-session-dialog.js.map +1 -0
- package/lib/remote-workspace-tree.d.ts +28 -0
- package/lib/remote-workspace-tree.d.ts.map +1 -0
- package/lib/remote-workspace-tree.js +127 -0
- package/lib/remote-workspace-tree.js.map +1 -0
- package/lib/resizable-split.d.ts +10 -0
- package/lib/resizable-split.d.ts.map +1 -0
- package/lib/resizable-split.js +115 -0
- package/lib/resizable-split.js.map +1 -0
- package/lib/session-access-channel.d.ts +6 -0
- package/lib/session-access-channel.d.ts.map +1 -0
- package/lib/session-access-channel.js +10 -0
- package/lib/session-access-channel.js.map +1 -0
- package/lib/session-access.d.ts +15 -0
- package/lib/session-access.d.ts.map +1 -0
- package/lib/session-access.js +99 -0
- package/lib/session-access.js.map +1 -0
- package/lib/sftp-client.d.ts +5 -1
- package/lib/sftp-client.d.ts.map +1 -1
- package/lib/sftp-client.js +85 -31
- package/lib/sftp-client.js.map +1 -1
- package/lib/store.d.ts +3 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +35 -3
- package/lib/store.js.map +1 -1
- package/lib/terminal.d.ts +2 -0
- package/lib/terminal.d.ts.map +1 -1
- package/lib/terminal.js +10 -2
- package/lib/terminal.js.map +1 -1
- package/lib/ui-components.d.ts +25 -0
- package/lib/ui-components.d.ts.map +1 -0
- package/lib/ui-components.js +27 -0
- package/lib/ui-components.js.map +1 -0
- package/lib/workspace-ownership.d.ts +5 -0
- package/lib/workspace-ownership.d.ts.map +1 -0
- package/lib/workspace-ownership.js +18 -0
- package/lib/workspace-ownership.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface DialogProps {
|
|
3
|
+
title: string;
|
|
4
|
+
subtitle?: string | undefined;
|
|
5
|
+
className?: string | undefined;
|
|
6
|
+
onClose(): void;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare function Dialog({ title, subtitle, className, onClose, children }: DialogProps): JSX.Element;
|
|
10
|
+
export declare function Field({ label, hint, children }: {
|
|
11
|
+
label: string;
|
|
12
|
+
hint?: string | undefined;
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}): JSX.Element;
|
|
15
|
+
export declare function Segment({ active, onClick, children }: {
|
|
16
|
+
active: boolean;
|
|
17
|
+
onClick(): void;
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
}): JSX.Element;
|
|
20
|
+
export declare function EmptyState(): JSX.Element;
|
|
21
|
+
export declare function ServerGlyph(): JSX.Element;
|
|
22
|
+
export declare function errorMessage(error: unknown): string;
|
|
23
|
+
export declare function shortId(id: string): string;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=ui-components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-components.d.ts","sourceRoot":"","sources":["../src/ui-components.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG7C,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,IAAI,IAAI,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAUlG;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAE/H;AAED,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,IAAI,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAE7H;AAED,wBAAgB,UAAU,IAAI,GAAG,CAAC,OAAO,CAExC;AAED,wBAAgB,WAAW,IAAI,GAAG,CAAC,OAAO,CAEzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from 'react';
|
|
3
|
+
import { IconCloseOutline16, IconDataOutline16, Modal } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
export function Dialog({ title, subtitle, className, onClose, children }) {
|
|
5
|
+
const titleId = useId();
|
|
6
|
+
const descriptionId = useId();
|
|
7
|
+
return _jsx(Modal, { open: true, onClose: onClose, title: title, closeLabel: "\u5173\u95ED", headless: true, className: `dsh-ssh-dialog-modal${className === undefined ? '' : ` ${className}-modal`}`, children: _jsxs("section", { className: `dsh-ssh-dialog dsh-ssh-scroll-surface${className === undefined ? '' : ` ${className}`}`, "aria-labelledby": titleId, "aria-describedby": subtitle === undefined ? undefined : descriptionId, children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("h2", { id: titleId, children: title }), subtitle && _jsx("p", { id: descriptionId, children: subtitle })] }), _jsx("button", { type: "button", className: "dsh-ssh-icon-button", onClick: onClose, "aria-label": "\u5173\u95ED", children: _jsx(IconCloseOutline16, { size: 16 }) })] }), children] }) });
|
|
8
|
+
}
|
|
9
|
+
export function Field({ label, hint, children }) {
|
|
10
|
+
return _jsxs("label", { className: "dsh-ssh-field", children: [_jsx("span", { children: label }), children, hint && _jsx("small", { children: hint })] });
|
|
11
|
+
}
|
|
12
|
+
export function Segment({ active, onClick, children }) {
|
|
13
|
+
return _jsx("button", { type: "button", role: "tab", className: active ? 'is-active' : '', "aria-selected": active, onClick: onClick, children: children });
|
|
14
|
+
}
|
|
15
|
+
export function EmptyState() {
|
|
16
|
+
return _jsxs("div", { className: "dsh-ssh-empty-state", children: [_jsx("span", { children: _jsx(ServerGlyph, {}) }), _jsx("h1", { children: "\u8FDE\u63A5\u4F60\u7684\u7B2C\u4E00\u53F0\u8FDC\u7AEF\u4E3B\u673A" }), _jsx("p", { children: "\u4F7F\u7528\u201C\u4E3B\u673A\u4E0E\u9879\u76EE\u201D\u65C1\u7684\u6DFB\u52A0\u6309\u94AE\u4FDD\u5B58 SSH \u914D\u7F6E\uFF0C\u968F\u540E\u5373\u53EF\u6253\u5F00\u7EC8\u7AEF\u3001\u5EFA\u7ACB\u7AEF\u53E3\u8F6C\u53D1\uFF0C\u5E76\u6309\u4F1A\u8BDD\u6388\u6743\u7ED9 AI\u3002" })] });
|
|
17
|
+
}
|
|
18
|
+
export function ServerGlyph() {
|
|
19
|
+
return _jsx("span", { className: "dsh-ssh-server-glyph", children: _jsx(IconDataOutline16, { size: 17 }) });
|
|
20
|
+
}
|
|
21
|
+
export function errorMessage(error) {
|
|
22
|
+
return error instanceof Error ? error.message : String(error);
|
|
23
|
+
}
|
|
24
|
+
export function shortId(id) {
|
|
25
|
+
return id.length <= 16 ? id : `${id.slice(0, 8)}…${id.slice(-5)}`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ui-components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-components.js","sourceRoot":"","sources":["../src/ui-components.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAA;AAUpG,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAe;IACnF,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IACvB,MAAM,aAAa,GAAG,KAAK,EAAE,CAAA;IAE7B,OAAO,KAAC,KAAK,IAAC,IAAI,QAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAC,cAAI,EAAC,QAAQ,QAAC,SAAS,EAAE,uBAAuB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,QAAQ,EAAE,YAClK,mBAAS,SAAS,EAAE,wCAAwC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,EAAE,qBAAmB,OAAO,sBAAoB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,aAC1M,6BAAQ,2BAAM,aAAI,EAAE,EAAE,OAAO,YAAG,KAAK,GAAM,EAAC,QAAQ,IAAI,YAAG,EAAE,EAAE,aAAa,YAAG,QAAQ,GAAK,IAAQ,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAE,OAAO,gBAAa,cAAI,YAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,EAAE,GAAI,GAAS,IAAS,EAC7O,QAAQ,IACD,GACJ,CAAA;AACV,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAqE;IAChH,OAAO,iBAAO,SAAS,EAAC,eAAe,aAAC,yBAAO,KAAK,GAAQ,EAAC,QAAQ,EAAE,IAAI,IAAI,0BAAQ,IAAI,GAAS,IAAS,CAAA;AAC/G,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAA6D;IAC9G,OAAO,iBAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,mBAAiB,MAAM,EAAE,OAAO,EAAE,OAAO,YAAG,QAAQ,GAAU,CAAA;AAC5I,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,eAAK,SAAS,EAAC,qBAAqB,aAAC,yBAAM,KAAC,WAAW,KAAG,GAAO,EAAA,8FAAoB,EAAA,2SAA2D,IAAM,CAAA;AAC/J,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,eAAM,SAAS,EAAC,sBAAsB,YAAC,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,GAAI,GAAO,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,OAAO,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACnE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Claim the conversation workspace while remaining compatible with installed plugin versions. */
|
|
2
|
+
export declare function activatePluginWorkspace(pluginId: string): void;
|
|
3
|
+
/** Close this workspace when another plugin claims the conversation area. */
|
|
4
|
+
export declare function observePluginWorkspace(pluginId: string, close: () => void): () => void;
|
|
5
|
+
//# sourceMappingURL=workspace-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-ownership.d.ts","sourceRoot":"","sources":["../src/workspace-ownership.ts"],"names":[],"mappings":"AAMA,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI9D;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAOtF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const WORKSPACE_ACTIVATE_EVENT = '@lemoncat7/dsh-plugin-ui/workspace-activate';
|
|
2
|
+
/** Claim the conversation workspace while remaining compatible with installed plugin versions. */
|
|
3
|
+
export function activatePluginWorkspace(pluginId) {
|
|
4
|
+
window.dispatchEvent(new CustomEvent(WORKSPACE_ACTIVATE_EVENT, {
|
|
5
|
+
detail: { pluginId },
|
|
6
|
+
}));
|
|
7
|
+
}
|
|
8
|
+
/** Close this workspace when another plugin claims the conversation area. */
|
|
9
|
+
export function observePluginWorkspace(pluginId, close) {
|
|
10
|
+
const onActivate = (event) => {
|
|
11
|
+
const detail = event.detail;
|
|
12
|
+
if (detail?.pluginId !== pluginId)
|
|
13
|
+
close();
|
|
14
|
+
};
|
|
15
|
+
window.addEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate);
|
|
16
|
+
return () => window.removeEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=workspace-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-ownership.js","sourceRoot":"","sources":["../src/workspace-ownership.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,6CAA6C,CAAA;AAM9E,kGAAkG;AAClG,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAA0B,wBAAwB,EAAE;QACtF,MAAM,EAAE,EAAE,QAAQ,EAAE;KACrB,CAAC,CAAC,CAAA;AACL,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAiB;IACxE,MAAM,UAAU,GAAG,CAAC,KAAY,EAAQ,EAAE;QACxC,MAAM,MAAM,GAAI,KAA8C,CAAC,MAAM,CAAA;QACrE,IAAI,MAAM,EAAE,QAAQ,KAAK,QAAQ;YAAE,KAAK,EAAE,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAA;IAC7D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAA;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemoncat7/dsh-ssh",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Secure SSH profiles, browser terminals, proxies, port forwarding, and session-scoped AI access for DeepSeek Harness",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"lib/**/*.map",
|
|
34
34
|
"cordis.patch.yml",
|
|
35
35
|
"README.md",
|
|
36
|
+
"ARCHITECTURE.md",
|
|
36
37
|
"LICENSE"
|
|
37
38
|
],
|
|
38
39
|
"dsh": {
|
|
@@ -87,7 +88,6 @@
|
|
|
87
88
|
"@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
|
|
88
89
|
"@deepseek-ai/dsh-terminal": "0.1.1-rc.2",
|
|
89
90
|
"@deepseek-ai/dsh-tools": "0.1.1-rc.2",
|
|
90
|
-
"@lemoncat7/dsh-plugin-ui": "file:../dsh-plugin-ui",
|
|
91
91
|
"@types/node": "^24.0.0",
|
|
92
92
|
"@types/react": "18.3.28",
|
|
93
93
|
"@types/ssh2": "^1.15.5",
|