@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.
- package/ARCHITECTURE.md +9 -0
- package/README.md +18 -2
- package/docs/dialog-consistency.md +26 -0
- package/docs/releases/1.7.0.md +11 -0
- package/docs/releases/1.8.0.md +13 -0
- package/lib/activity-panel.d.ts.map +1 -1
- package/lib/activity-panel.js +14 -8
- package/lib/activity-panel.js.map +1 -1
- package/lib/adaptive-workspace.d.ts.map +1 -1
- package/lib/adaptive-workspace.js +5 -2
- package/lib/adaptive-workspace.js.map +1 -1
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +17 -1
- package/lib/api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +320 -188
- package/lib/client.js.map +4 -4
- package/lib/commands-panel.d.ts.map +1 -1
- package/lib/commands-panel.js +28 -11
- package/lib/commands-panel.js.map +1 -1
- package/lib/confirmation-dialog.d.ts +12 -0
- package/lib/confirmation-dialog.d.ts.map +1 -0
- package/lib/confirmation-dialog.js +41 -0
- package/lib/confirmation-dialog.js.map +1 -0
- package/lib/connector.d.ts.map +1 -1
- package/lib/connector.js +6 -4
- package/lib/connector.js.map +1 -1
- package/lib/docked-panel-compat.d.ts +1 -1
- package/lib/docked-panel-compat.d.ts.map +1 -1
- package/lib/docked-panel-compat.js +3 -2
- package/lib/docked-panel-compat.js.map +1 -1
- package/lib/domain.d.ts +8 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/file-entry-delete-dialog.d.ts.map +1 -1
- package/lib/file-entry-delete-dialog.js +5 -2
- package/lib/file-entry-delete-dialog.js.map +1 -1
- package/lib/file-transfer-workspace.d.ts.map +1 -1
- package/lib/file-transfer-workspace.js +48 -30
- package/lib/file-transfer-workspace.js.map +1 -1
- package/lib/ftp-profile-editor.d.ts.map +1 -1
- package/lib/ftp-profile-editor.js +19 -12
- package/lib/ftp-profile-editor.js.map +1 -1
- package/lib/gist-sync.d.ts +4 -2
- package/lib/gist-sync.d.ts.map +1 -1
- package/lib/gist-sync.js +49 -12
- package/lib/gist-sync.js.map +1 -1
- package/lib/group-proxy-editor.d.ts +10 -0
- package/lib/group-proxy-editor.d.ts.map +1 -0
- package/lib/group-proxy-editor.js +33 -0
- package/lib/group-proxy-editor.js.map +1 -0
- package/lib/group-proxy.d.ts +7 -0
- package/lib/group-proxy.d.ts.map +1 -0
- package/lib/group-proxy.js +29 -0
- package/lib/group-proxy.js.map +1 -0
- package/lib/html-file-preview.d.ts.map +1 -1
- package/lib/html-file-preview.js +4 -1
- package/lib/html-file-preview.js.map +1 -1
- package/lib/i18n.d.ts +17 -0
- package/lib/i18n.d.ts.map +1 -0
- package/lib/i18n.js +36 -0
- package/lib/i18n.js.map +1 -0
- package/lib/locales/messages.d.ts +2726 -0
- package/lib/locales/messages.d.ts.map +1 -0
- package/lib/locales/messages.js +2689 -0
- package/lib/locales/messages.js.map +1 -0
- package/lib/markdown-preview-editor.d.ts.map +1 -1
- package/lib/markdown-preview-editor.js +7 -1
- package/lib/markdown-preview-editor.js.map +1 -1
- package/lib/native-directory-button.d.ts.map +1 -1
- package/lib/native-directory-button.js +6 -3
- package/lib/native-directory-button.js.map +1 -1
- package/lib/preview-refresh-control.d.ts.map +1 -1
- package/lib/preview-refresh-control.js +4 -1
- package/lib/preview-refresh-control.js.map +1 -1
- package/lib/profile-editor.d.ts.map +1 -1
- package/lib/profile-editor.js +14 -8
- package/lib/profile-editor.js.map +1 -1
- package/lib/project-session-dialog.d.ts.map +1 -1
- package/lib/project-session-dialog.js +7 -4
- package/lib/project-session-dialog.js.map +1 -1
- package/lib/remote-path-input.d.ts.map +1 -1
- package/lib/remote-path-input.js +10 -7
- package/lib/remote-path-input.js.map +1 -1
- package/lib/remote-workspace-tree.d.ts +1 -0
- package/lib/remote-workspace-tree.d.ts.map +1 -1
- package/lib/remote-workspace-tree.js +19 -21
- package/lib/remote-workspace-tree.js.map +1 -1
- package/lib/resizable-split.d.ts.map +1 -1
- package/lib/resizable-split.js +4 -1
- package/lib/resizable-split.js.map +1 -1
- package/lib/sftp-client.d.ts +2 -1
- package/lib/sftp-client.d.ts.map +1 -1
- package/lib/sftp-client.js +55 -31
- package/lib/sftp-client.js.map +1 -1
- package/lib/ssh-locale-binding.d.ts +9 -0
- package/lib/ssh-locale-binding.d.ts.map +1 -0
- package/lib/ssh-locale-binding.js +29 -0
- package/lib/ssh-locale-binding.js.map +1 -0
- package/lib/store.d.ts +4 -0
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +13 -0
- package/lib/store.js.map +1 -1
- package/lib/terminal-bootstrap-echo.d.ts +15 -0
- package/lib/terminal-bootstrap-echo.d.ts.map +1 -0
- package/lib/terminal-bootstrap-echo.js +62 -0
- package/lib/terminal-bootstrap-echo.js.map +1 -0
- package/lib/terminal-directory.d.ts +3 -0
- package/lib/terminal-directory.d.ts.map +1 -0
- package/lib/terminal-directory.js +28 -0
- package/lib/terminal-directory.js.map +1 -0
- package/lib/terminal-session.d.ts +2 -1
- package/lib/terminal-session.d.ts.map +1 -1
- package/lib/terminal-session.js +22 -7
- package/lib/terminal-session.js.map +1 -1
- package/lib/terminal-shell-integration.d.ts +6 -0
- package/lib/terminal-shell-integration.d.ts.map +1 -0
- package/lib/terminal-shell-integration.js +53 -0
- package/lib/terminal-shell-integration.js.map +1 -0
- package/lib/terminal-workspace.d.ts +2 -1
- package/lib/terminal-workspace.d.ts.map +1 -1
- package/lib/terminal-workspace.js +10 -5
- package/lib/terminal-workspace.js.map +1 -1
- package/lib/terminal.d.ts +4 -0
- package/lib/terminal.d.ts.map +1 -1
- package/lib/terminal.js +31 -1
- package/lib/terminal.js.map +1 -1
- package/lib/ui-components.d.ts +3 -1
- package/lib/ui-components.d.ts.map +1 -1
- package/lib/ui-components.js +19 -10
- package/lib/ui-components.js.map +1 -1
- package/lib/use-file-preview.d.ts.map +1 -1
- package/lib/use-file-preview.js +2 -1
- package/lib/use-file-preview.js.map +1 -1
- package/lib/use-markdown-draft.d.ts.map +1 -1
- package/lib/use-markdown-draft.js +6 -5
- package/lib/use-markdown-draft.js.map +1 -1
- package/lib/use-ssh-locale.d.ts +4 -0
- package/lib/use-ssh-locale.d.ts.map +1 -0
- package/lib/use-ssh-locale.js +7 -0
- package/lib/use-ssh-locale.js.map +1 -0
- package/lib/use-workspace-refresh.d.ts +3 -0
- package/lib/use-workspace-refresh.d.ts.map +1 -0
- package/lib/use-workspace-refresh.js +44 -0
- package/lib/use-workspace-refresh.js.map +1 -0
- package/lib/workspace-refresh.d.ts +14 -0
- package/lib/workspace-refresh.d.ts.map +1 -0
- package/lib/workspace-refresh.js +36 -0
- package/lib/workspace-refresh.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-ssh-locale.js","sourceRoot":"","sources":["../src/use-ssh-locale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAkB,MAAM,WAAW,CAAA;AAErD,+FAA+F;AAC/F,MAAM,UAAU,YAAY;IAC1B,OAAO,oBAAoB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;AAChG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-workspace-refresh.d.ts","sourceRoot":"","sources":["../src/use-workspace-refresh.ts"],"names":[],"mappings":"AAiBA,wBAAgB,gBAAgB,IAAI,IAAI,CAAY;AAEpD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAoBhF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { api } from './client-api.js';
|
|
3
|
+
import { WorkspaceRefresh } from './workspace-refresh.js';
|
|
4
|
+
const monitor = new WorkspaceRefresh(async () => {
|
|
5
|
+
const controller = new AbortController();
|
|
6
|
+
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
7
|
+
try {
|
|
8
|
+
const { revision } = await api('/workspace-revision', { cache: 'no-store', signal: controller.signal });
|
|
9
|
+
if (typeof revision !== 'string')
|
|
10
|
+
throw new Error('Invalid workspace revision');
|
|
11
|
+
return revision;
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
clearTimeout(timeout);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
let users = 0;
|
|
18
|
+
let timer;
|
|
19
|
+
const check = () => { if (!document.hidden)
|
|
20
|
+
void monitor.check(); };
|
|
21
|
+
export function refreshWorkspace() { check(); }
|
|
22
|
+
export function useWorkspaceRefresh(refresh) {
|
|
23
|
+
const callback = useRef(refresh);
|
|
24
|
+
callback.current = refresh;
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const unsubscribe = monitor.subscribe(() => callback.current());
|
|
27
|
+
if (++users === 1) {
|
|
28
|
+
timer = setInterval(check, 5000);
|
|
29
|
+
document.addEventListener('visibilitychange', check);
|
|
30
|
+
window.addEventListener('focus', check);
|
|
31
|
+
}
|
|
32
|
+
check();
|
|
33
|
+
return () => {
|
|
34
|
+
unsubscribe();
|
|
35
|
+
if (--users === 0) {
|
|
36
|
+
clearInterval(timer);
|
|
37
|
+
timer = undefined;
|
|
38
|
+
document.removeEventListener('visibilitychange', check);
|
|
39
|
+
window.removeEventListener('focus', check);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=use-workspace-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-workspace-refresh.js","sourceRoot":"","sources":["../src/use-workspace-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,KAAK,IAAI,EAAE;IAC9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAuB,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7H,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/E,OAAO,QAAQ,CAAA;IACjB,CAAC;YAAS,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAAC,CAAC;AACrC,CAAC,CAAC,CAAA;AACF,IAAI,KAAK,GAAG,CAAC,CAAA;AACb,IAAI,KAAiD,CAAA;AACrD,MAAM,KAAK,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;IAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC,CAAA;AAExE,MAAM,UAAU,gBAAgB,KAAW,KAAK,EAAE,CAAA,CAAC,CAAC;AAEpD,MAAM,UAAU,mBAAmB,CAAC,OAAsC;IACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/D,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAChC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;YACpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;QACD,KAAK,EAAE,CAAA;QACP,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAA;YACb,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;gBAClB,aAAa,CAAC,KAAK,CAAC,CAAC;gBAAC,KAAK,GAAG,SAAS,CAAA;gBACvC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;gBACvD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Listener = () => Promise<boolean | void>;
|
|
2
|
+
/** One cheap version check shared by all mounted workspace consumers. */
|
|
3
|
+
export declare class WorkspaceRefresh {
|
|
4
|
+
private readonly readRevision;
|
|
5
|
+
private readonly listeners;
|
|
6
|
+
private revision;
|
|
7
|
+
private running;
|
|
8
|
+
constructor(readRevision: () => Promise<string>);
|
|
9
|
+
subscribe(listener: Listener): () => void;
|
|
10
|
+
check(): Promise<void>;
|
|
11
|
+
private poll;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=workspace-refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-refresh.d.ts","sourceRoot":"","sources":["../src/workspace-refresh.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAE7C,yEAAyE;AACzE,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,YAAY;IAHzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAA2B;gBACb,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAEhE,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOR,IAAI;CASnB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** One cheap version check shared by all mounted workspace consumers. */
|
|
2
|
+
export class WorkspaceRefresh {
|
|
3
|
+
readRevision;
|
|
4
|
+
listeners = new Set();
|
|
5
|
+
revision;
|
|
6
|
+
running;
|
|
7
|
+
constructor(readRevision) {
|
|
8
|
+
this.readRevision = readRevision;
|
|
9
|
+
}
|
|
10
|
+
subscribe(listener) {
|
|
11
|
+
this.listeners.add(listener);
|
|
12
|
+
return () => { this.listeners.delete(listener); if (!this.listeners.size)
|
|
13
|
+
this.revision = undefined; };
|
|
14
|
+
}
|
|
15
|
+
check() {
|
|
16
|
+
if (this.running)
|
|
17
|
+
return this.running;
|
|
18
|
+
if (!this.listeners.size)
|
|
19
|
+
return Promise.resolve();
|
|
20
|
+
this.running = this.poll().finally(() => { this.running = undefined; });
|
|
21
|
+
return this.running;
|
|
22
|
+
}
|
|
23
|
+
async poll() {
|
|
24
|
+
try {
|
|
25
|
+
const next = await this.readRevision();
|
|
26
|
+
if (!this.listeners.size || next === this.revision)
|
|
27
|
+
return;
|
|
28
|
+
const results = await Promise.allSettled([...this.listeners].map(listener => listener()));
|
|
29
|
+
// Failed refreshes are retried on the next check, even if the version is unchanged.
|
|
30
|
+
if (this.listeners.size && results.every(result => result.status === 'fulfilled' && result.value !== false))
|
|
31
|
+
this.revision = next;
|
|
32
|
+
}
|
|
33
|
+
catch { /* Background checks must not replace editors with network errors. */ }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=workspace-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-refresh.js","sourceRoot":"","sources":["../src/workspace-refresh.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,OAAO,gBAAgB;IAIE;IAHZ,SAAS,GAAG,IAAI,GAAG,EAAY,CAAA;IACxC,QAAQ,CAAoB;IAC5B,OAAO,CAA2B;IAC1C,YAA6B,YAAmC;QAAnC,iBAAY,GAAZ,YAAY,CAAuB;IAAG,CAAC;IAEpE,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA,CAAC,CAAC,CAAA;IACvG,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAA;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA,CAAC,CAAC,CAAC,CAAA;QACtE,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YACzF,oFAAoF;YACpF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACnI,CAAC;QAAC,MAAM,CAAC,CAAC,qEAAqE,CAAC,CAAC;IACnF,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemoncat7/dsh-ssh",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Secure SSH, FTP/FTPS/SFTP file transfer, browser terminals, proxies, port forwarding, and session-scoped AI access for DeepSeek Harness",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|