@lemoncat7/dsh-ssh 1.14.2 → 1.16.20
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/README.md +10 -3
- package/docs/releases/1.15.0.md +16 -0
- package/docs/releases/1.16.0.md +19 -0
- package/docs/releases/1.16.1.md +7 -0
- package/docs/releases/1.16.10.md +8 -0
- package/docs/releases/1.16.11.md +5 -0
- package/docs/releases/1.16.12.md +9 -0
- package/docs/releases/1.16.13.md +7 -0
- package/docs/releases/1.16.14.md +7 -0
- package/docs/releases/1.16.15.md +5 -0
- package/docs/releases/1.16.16.md +5 -0
- package/docs/releases/1.16.17.md +5 -0
- package/docs/releases/1.16.18.md +5 -0
- package/docs/releases/1.16.19.md +21 -0
- package/docs/releases/1.16.2.md +7 -0
- package/docs/releases/1.16.20.md +7 -0
- package/docs/releases/1.16.3.md +11 -0
- package/docs/releases/1.16.4.md +10 -0
- package/docs/releases/1.16.5.md +9 -0
- package/docs/releases/1.16.6.md +7 -0
- package/docs/releases/1.16.7.md +7 -0
- package/docs/releases/1.16.8.md +19 -0
- package/docs/releases/1.16.9.md +7 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +29 -1
- package/lib/api.js.map +1 -1
- package/lib/client-api.d.ts +1 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +381 -140
- package/lib/client.js.map +4 -4
- package/lib/commands-panel.js +1 -1
- package/lib/commands-panel.js.map +1 -1
- package/lib/domain.d.ts +3 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +2 -0
- package/lib/domain.js.map +1 -1
- package/lib/file-transfer-workspace.d.ts.map +1 -1
- package/lib/file-transfer-workspace.js +4 -4
- package/lib/file-transfer-workspace.js.map +1 -1
- package/lib/host-action-menu.d.ts +10 -0
- package/lib/host-action-menu.d.ts.map +1 -0
- package/lib/host-action-menu.js +32 -0
- package/lib/host-action-menu.js.map +1 -0
- package/lib/host-select.d.ts +9 -0
- package/lib/host-select.d.ts.map +1 -0
- package/lib/host-select.js +92 -0
- package/lib/host-select.js.map +1 -0
- package/lib/locales/messages.d.ts +256 -0
- package/lib/locales/messages.d.ts.map +1 -1
- package/lib/locales/messages.js +64 -0
- package/lib/locales/messages.js.map +1 -1
- package/lib/profile-editor.d.ts.map +1 -1
- package/lib/profile-editor.js +4 -1
- package/lib/profile-editor.js.map +1 -1
- package/lib/remote-workspace-tree.d.ts +4 -0
- package/lib/remote-workspace-tree.d.ts.map +1 -1
- package/lib/remote-workspace-tree.js +97 -34
- package/lib/remote-workspace-tree.js.map +1 -1
- package/lib/settings-pane.js +1 -1
- package/lib/settings-pane.js.map +1 -1
- package/lib/sftp-client.d.ts +3 -1
- package/lib/sftp-client.d.ts.map +1 -1
- package/lib/sftp-client.js +11 -10
- package/lib/sftp-client.js.map +1 -1
- package/lib/sftp-path-mapping.d.ts +9 -0
- package/lib/sftp-path-mapping.d.ts.map +1 -0
- package/lib/sftp-path-mapping.js +36 -0
- package/lib/sftp-path-mapping.js.map +1 -0
- package/lib/sftp.js +1 -1
- package/lib/sftp.js.map +1 -1
- package/lib/split-icon.d.ts +4 -0
- package/lib/split-icon.d.ts.map +1 -0
- package/lib/split-icon.js +5 -0
- package/lib/split-icon.js.map +1 -0
- package/lib/sync-panel.js +1 -1
- package/lib/sync-panel.js.map +1 -1
- package/lib/terminal-bootstrap-echo.d.ts +1 -1
- package/lib/terminal-bootstrap-echo.d.ts.map +1 -1
- package/lib/terminal-bootstrap-echo.js +57 -19
- package/lib/terminal-bootstrap-echo.js.map +1 -1
- package/lib/terminal-desk-state.d.ts +71 -0
- package/lib/terminal-desk-state.d.ts.map +1 -0
- package/lib/terminal-desk-state.js +205 -0
- package/lib/terminal-desk-state.js.map +1 -0
- package/lib/terminal-desk.d.ts +16 -0
- package/lib/terminal-desk.d.ts.map +1 -0
- package/lib/terminal-desk.js +197 -0
- package/lib/terminal-desk.js.map +1 -0
- package/lib/terminal-session.d.ts +5 -1
- package/lib/terminal-session.d.ts.map +1 -1
- package/lib/terminal-session.js +52 -18
- package/lib/terminal-session.js.map +1 -1
- package/lib/terminal-transport.d.ts.map +1 -1
- package/lib/terminal-transport.js +7 -4
- package/lib/terminal-transport.js.map +1 -1
- package/lib/terminal-workspace-state.d.ts +45 -0
- package/lib/terminal-workspace-state.d.ts.map +1 -0
- package/lib/terminal-workspace-state.js +110 -0
- package/lib/terminal-workspace-state.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 +43 -19
- package/lib/terminal-workspace.js.map +1 -1
- package/lib/terminal.d.ts +10 -3
- package/lib/terminal.d.ts.map +1 -1
- package/lib/terminal.js +33 -4
- package/lib/terminal.js.map +1 -1
- package/lib/vault-password-dialog.d.ts +7 -0
- package/lib/vault-password-dialog.d.ts.map +1 -0
- package/lib/vault-password-dialog.js +80 -0
- package/lib/vault-password-dialog.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,41 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** A comparison-only view. Raw bytes are retained until an exact bootstrap match. */
|
|
2
|
+
function echoView(raw) {
|
|
3
|
+
let text = '', incomplete = raw.length;
|
|
4
|
+
const offsets = [];
|
|
5
|
+
for (let i = 0; i < raw.length;) {
|
|
6
|
+
// Readline can force a right-margin wrap by writing an extra blank then CR.
|
|
7
|
+
// CRLF is an ordinary newline and must not consume a real preceding space.
|
|
8
|
+
if (raw[i] === ' ' && raw[i + 1] === '\r') {
|
|
9
|
+
if (i + 2 === raw.length) {
|
|
10
|
+
incomplete = i;
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
if (raw[i + 2] !== '\n') {
|
|
14
|
+
i += 2;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (raw[i] === '\x1b') {
|
|
19
|
+
const tail = raw.slice(i);
|
|
20
|
+
const csi = /^\x1b\[[0-?]*[ -/]*[@-~]/.exec(tail);
|
|
21
|
+
if (csi) {
|
|
22
|
+
i += csi[0].length;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (tail === '\x1b' || /^\x1b\[[0-?]*[ -/]*$/.test(tail)) {
|
|
26
|
+
incomplete = i;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (raw[i] !== '\r' && raw[i] !== '\n') {
|
|
31
|
+
text += raw[i];
|
|
32
|
+
offsets.push(i);
|
|
33
|
+
}
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
return { text, offsets, incomplete };
|
|
37
|
+
}
|
|
38
|
+
/** Removes only exact, uniquely tagged bootstrap echoes, never execution output.
|
|
2
39
|
* A mismatch/timeout is fail-open: original bytes are displayed unchanged.
|
|
3
40
|
*/
|
|
4
41
|
export class TerminalBootstrapEcho {
|
|
@@ -20,35 +57,36 @@ export class TerminalBootstrapEcho {
|
|
|
20
57
|
this.pending += text;
|
|
21
58
|
let output = '';
|
|
22
59
|
while (!this.done) {
|
|
23
|
-
const
|
|
24
|
-
const
|
|
60
|
+
const view = echoView(this.pending);
|
|
61
|
+
const start = view.text.indexOf(this.start);
|
|
62
|
+
const completed = view.text.indexOf(this.completed);
|
|
25
63
|
if (completed >= 0 && (start < 0 || completed < start)) {
|
|
26
|
-
|
|
64
|
+
const begin = view.offsets[completed], end = view.offsets[completed + this.completed.length - 1] + 1;
|
|
65
|
+
output += this.pending.slice(0, begin) + this.pending.slice(end);
|
|
27
66
|
this.pending = '';
|
|
28
67
|
this.done = true;
|
|
29
68
|
return output;
|
|
30
69
|
}
|
|
31
70
|
if (start < 0) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
while (keep > 0 && !this.start.startsWith(this.pending.slice(-keep)) && !this.completed.startsWith(this.pending.slice(-keep)))
|
|
71
|
+
let keep = Math.min(Math.max(this.start.length, this.completed.length) - 1, view.text.length);
|
|
72
|
+
while (keep > 0 && !this.start.startsWith(view.text.slice(-keep)) && !this.completed.startsWith(view.text.slice(-keep)))
|
|
35
73
|
keep--;
|
|
36
|
-
|
|
37
|
-
|
|
74
|
+
const cutoff = keep ? view.offsets[view.text.length - keep] : view.incomplete;
|
|
75
|
+
output += this.pending.slice(0, cutoff);
|
|
76
|
+
this.pending = this.pending.slice(cutoff);
|
|
38
77
|
return output;
|
|
39
78
|
}
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
79
|
+
const begin = view.offsets[start];
|
|
80
|
+
const end = view.text.indexOf(this.end, start + this.start.length);
|
|
81
|
+
if (end < 0) {
|
|
82
|
+
output += this.pending.slice(0, begin);
|
|
83
|
+
this.pending = this.pending.slice(begin);
|
|
44
84
|
return output + (this.pending.length > 65_536 ? this.flush() : '');
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// PTYs may wrap with CR/LF and readline may insert CSI styling sequences.
|
|
48
|
-
const normalized = candidate.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, '').replace(/[\r\n]/g, '');
|
|
49
|
-
if (normalized !== this.command)
|
|
85
|
+
}
|
|
86
|
+
if (view.text.slice(start, end + this.end.length) !== this.command)
|
|
50
87
|
return output + this.flush();
|
|
51
|
-
|
|
88
|
+
output += this.pending.slice(0, begin);
|
|
89
|
+
this.pending = this.pending.slice(view.offsets[end + this.end.length - 1] + 1);
|
|
52
90
|
}
|
|
53
91
|
return output;
|
|
54
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-bootstrap-echo.js","sourceRoot":"","sources":["../src/terminal-bootstrap-echo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAGH;IAAkC;IAAgC;IAA8B;IAFrH,OAAO,GAAG,EAAE,CAAA;IACZ,IAAI,GAAG,KAAK,CAAA;IACpB,YAA6B,OAAe,EAAmB,KAAa,EAAmB,GAAW,EAAmB,SAAiB;QAAjH,YAAO,GAAP,OAAO,CAAQ;QAAmB,UAAK,GAAL,KAAK,CAAQ;QAAmB,QAAG,GAAH,GAAG,CAAQ;QAAmB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElJ,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QAC1B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAA;QACpB,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"terminal-bootstrap-echo.js","sourceRoot":"","sources":["../src/terminal-bootstrap-echo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { BrowserTerminalHandle } from './terminal-workspace-state.js';
|
|
2
|
+
export interface DeskTarget {
|
|
3
|
+
profileId: string;
|
|
4
|
+
path: string;
|
|
5
|
+
label?: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface DeskPane extends DeskTarget {
|
|
8
|
+
id: number;
|
|
9
|
+
directory?: string | undefined;
|
|
10
|
+
handle: BrowserTerminalHandle;
|
|
11
|
+
autoConnect: boolean;
|
|
12
|
+
phase: 'idle' | 'connecting' | 'connected' | 'error';
|
|
13
|
+
}
|
|
14
|
+
export type DeskLayout = number | {
|
|
15
|
+
direction: 'horizontal' | 'vertical';
|
|
16
|
+
first: DeskLayout;
|
|
17
|
+
second: DeskLayout;
|
|
18
|
+
};
|
|
19
|
+
export interface DeskTab extends DeskTarget {
|
|
20
|
+
id: number;
|
|
21
|
+
panes: DeskPane[];
|
|
22
|
+
layout: DeskLayout;
|
|
23
|
+
focused: number;
|
|
24
|
+
filesOnly: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface PaneRect {
|
|
27
|
+
id: number;
|
|
28
|
+
left: number;
|
|
29
|
+
top: number;
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
}
|
|
33
|
+
/** Horizontal means side by side; vertical means top and bottom. Existing leaves never move in the DOM. */
|
|
34
|
+
export declare function deskPaneRects(layout: DeskLayout, rect?: {
|
|
35
|
+
left: number;
|
|
36
|
+
top: number;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
}): PaneRect[];
|
|
40
|
+
export type DeskLayoutMode = 'single' | 'horizontal' | 'vertical' | 'grid';
|
|
41
|
+
export declare function deskLayoutSize(mode: DeskLayoutMode): number;
|
|
42
|
+
export declare function deskLayoutMode(tab: DeskTab): DeskLayoutMode;
|
|
43
|
+
export declare class TerminalDeskState {
|
|
44
|
+
readonly scope: string;
|
|
45
|
+
tabs: DeskTab[];
|
|
46
|
+
activeId: number;
|
|
47
|
+
private changing;
|
|
48
|
+
private serial;
|
|
49
|
+
private revision;
|
|
50
|
+
private listeners;
|
|
51
|
+
private readonly key;
|
|
52
|
+
constructor(scope: string);
|
|
53
|
+
get activeTab(): DeskTab | undefined;
|
|
54
|
+
get currentPane(): DeskPane | undefined;
|
|
55
|
+
subscribe: (listener: () => void) => (() => void);
|
|
56
|
+
snapshot: () => number;
|
|
57
|
+
save: () => void;
|
|
58
|
+
private makePane;
|
|
59
|
+
open(target: DeskTarget, fresh?: boolean, connect?: boolean): DeskTab;
|
|
60
|
+
focus(id: number): void;
|
|
61
|
+
focusPane(tabId: number, paneId: number): void;
|
|
62
|
+
setFilesOnly(value: boolean): void;
|
|
63
|
+
/** Reductions require an explicit keep list and the pane snapshot shown in the confirmation dialog. */
|
|
64
|
+
applyLayout(tabId: number, mode: DeskLayoutMode, remove: (id: string) => Promise<void>, keepIds?: number[], expectedIds?: number[]): Promise<unknown[]>;
|
|
65
|
+
setPhase(id: number, phase: DeskPane['phase']): void;
|
|
66
|
+
setDirectory(id: number, directory: string | undefined): void;
|
|
67
|
+
private removePanes;
|
|
68
|
+
close(ids: number[], remove: (id: string) => Promise<void>): Promise<unknown[]>;
|
|
69
|
+
}
|
|
70
|
+
export declare function terminalDesk(scope: string): TerminalDeskState;
|
|
71
|
+
//# sourceMappingURL=terminal-desk-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-desk-state.d.ts","sourceRoot":"","sources":["../src/terminal-desk-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { BrowserTerminalHandle, readTerminalStorage, writeTerminalStorage, readWorkbenchState } from './terminal-workspace-state.js';
|
|
2
|
+
/** Horizontal means side by side; vertical means top and bottom. Existing leaves never move in the DOM. */
|
|
3
|
+
export function deskPaneRects(layout, rect = { left: 0, top: 0, width: 100, height: 100 }) {
|
|
4
|
+
if (typeof layout === 'number')
|
|
5
|
+
return [{ id: layout, ...rect }];
|
|
6
|
+
const horizontal = layout.direction === 'horizontal';
|
|
7
|
+
const first = { ...rect, ...(horizontal ? { width: rect.width / 2 } : { height: rect.height / 2 }) };
|
|
8
|
+
const second = { ...first, ...(horizontal ? { left: rect.left + first.width } : { top: rect.top + first.height }) };
|
|
9
|
+
return [...deskPaneRects(layout.first, first), ...deskPaneRects(layout.second, second)];
|
|
10
|
+
}
|
|
11
|
+
export function deskLayoutSize(mode) { return mode === 'single' ? 1 : mode === 'grid' ? 4 : 2; }
|
|
12
|
+
function fixedLayout(ids, mode) {
|
|
13
|
+
if (ids.length === 1)
|
|
14
|
+
return ids[0];
|
|
15
|
+
if (mode === 'grid' || ids.length > 2)
|
|
16
|
+
return { direction: 'vertical', first: { direction: 'horizontal', first: ids[0], second: ids[1] }, second: { direction: 'horizontal', first: ids[2] ?? 0, second: ids[3] ?? 0 } };
|
|
17
|
+
return { direction: mode === 'vertical' ? 'vertical' : 'horizontal', first: ids[0], second: ids[1] };
|
|
18
|
+
}
|
|
19
|
+
export function deskLayoutMode(tab) {
|
|
20
|
+
return tab.panes.length === 1 ? 'single' : tab.panes.length > 2 ? 'grid' : typeof tab.layout !== 'number' && tab.layout.direction === 'vertical' ? 'vertical' : 'horizontal';
|
|
21
|
+
}
|
|
22
|
+
function pruneLayout(raw, remaining, seen = new Set(), depth = 0) {
|
|
23
|
+
if (typeof raw === 'number') {
|
|
24
|
+
if (!remaining.has(raw) || seen.has(raw))
|
|
25
|
+
return;
|
|
26
|
+
seen.add(raw);
|
|
27
|
+
return raw;
|
|
28
|
+
}
|
|
29
|
+
if (!raw || depth > 8 || !['horizontal', 'vertical'].includes(raw.direction))
|
|
30
|
+
return;
|
|
31
|
+
const first = pruneLayout(raw.first, remaining, seen, depth + 1), second = pruneLayout(raw.second, remaining, seen, depth + 1);
|
|
32
|
+
return first === undefined ? second : second === undefined ? first : { direction: raw.direction, first, second };
|
|
33
|
+
}
|
|
34
|
+
export class TerminalDeskState {
|
|
35
|
+
scope;
|
|
36
|
+
tabs = [];
|
|
37
|
+
activeId = 0;
|
|
38
|
+
changing = new Set();
|
|
39
|
+
serial = 0;
|
|
40
|
+
revision = 0;
|
|
41
|
+
listeners = new Set();
|
|
42
|
+
key;
|
|
43
|
+
constructor(scope) {
|
|
44
|
+
this.scope = scope;
|
|
45
|
+
this.key = 'dsh-ssh:terminal-desk:v2:' + scope;
|
|
46
|
+
const saved = readTerminalStorage(this.key), legacy = readTerminalStorage('dsh-ssh:terminal-desk:v1:' + scope);
|
|
47
|
+
let rows = [], active = saved?.activeId;
|
|
48
|
+
if (Array.isArray(saved?.tabs))
|
|
49
|
+
rows = saved.tabs;
|
|
50
|
+
else {
|
|
51
|
+
let previous = [];
|
|
52
|
+
if (Array.isArray(legacy?.tabs)) {
|
|
53
|
+
previous = legacy.tabs;
|
|
54
|
+
active = legacy.view?.focused;
|
|
55
|
+
}
|
|
56
|
+
else
|
|
57
|
+
for (const host of readWorkbenchState(scope).hosts) {
|
|
58
|
+
const old = readTerminalStorage('dsh-ssh:terminals:v1:' + JSON.stringify([scope, host]));
|
|
59
|
+
if (Array.isArray(old?.tabs))
|
|
60
|
+
previous.push(...old.tabs.map((tab) => ({ ...tab, id: ++this.serial, profileId: host })));
|
|
61
|
+
}
|
|
62
|
+
// Each old tab stays independent, including tabs previously displayed side by side.
|
|
63
|
+
rows = previous.map(tab => ({ ...tab, panes: [tab], layout: tab.id, focused: tab.id, filesOnly: false }));
|
|
64
|
+
}
|
|
65
|
+
const tabIds = new Set(), paneIds = new Set();
|
|
66
|
+
for (const row of rows.slice(0, 32)) {
|
|
67
|
+
if (!Number.isSafeInteger(row?.id) || row.id < 1 || tabIds.has(row.id) || typeof row.profileId !== 'string' || typeof row.path !== 'string' || !Array.isArray(row.panes))
|
|
68
|
+
continue;
|
|
69
|
+
const panes = [];
|
|
70
|
+
for (const pane of row.panes.slice(0, 4)) {
|
|
71
|
+
if (!Number.isSafeInteger(pane?.id) || pane.id < 1 || paneIds.has(pane.id) || typeof pane.path !== 'string')
|
|
72
|
+
continue;
|
|
73
|
+
paneIds.add(pane.id);
|
|
74
|
+
panes.push({ id: pane.id, profileId: row.profileId, path: pane.path, label: typeof pane.label === 'string' ? pane.label : undefined, directory: typeof pane.directory === 'string' ? pane.directory : undefined, handle: new BrowserTerminalHandle(typeof pane.terminalId === 'string' ? pane.terminalId : undefined, this.save), autoConnect: false, phase: 'idle' });
|
|
75
|
+
}
|
|
76
|
+
if (!panes.length)
|
|
77
|
+
continue;
|
|
78
|
+
tabIds.add(row.id);
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
let layout = pruneLayout(row.layout, new Set(panes.map(pane => pane.id)), seen);
|
|
81
|
+
for (const pane of panes)
|
|
82
|
+
if (!seen.has(pane.id))
|
|
83
|
+
layout = layout === undefined ? pane.id : { direction: 'horizontal', first: layout, second: pane.id };
|
|
84
|
+
this.tabs.push({ id: row.id, profileId: row.profileId, path: row.path, label: typeof row.label === 'string' ? row.label : undefined, panes, layout: layout, focused: panes.some(pane => pane.id === row.focused) ? row.focused : panes[0].id, filesOnly: row.filesOnly === true });
|
|
85
|
+
}
|
|
86
|
+
for (const tab of this.tabs) {
|
|
87
|
+
const order = deskPaneRects(tab.layout).sort((a, b) => a.top - b.top || a.left - b.left).map(rect => rect.id);
|
|
88
|
+
tab.panes.sort((a, b) => order.indexOf(a.id) - order.indexOf(b.id));
|
|
89
|
+
tab.layout = fixedLayout(tab.panes.map(pane => pane.id), deskLayoutMode(tab));
|
|
90
|
+
}
|
|
91
|
+
this.serial = Math.max(0, ...tabIds, ...paneIds);
|
|
92
|
+
this.activeId = tabIds.has(active) ? active : this.tabs[0]?.id ?? 0;
|
|
93
|
+
this.save();
|
|
94
|
+
}
|
|
95
|
+
get activeTab() { return this.tabs.find(tab => tab.id === this.activeId); }
|
|
96
|
+
get currentPane() { const tab = this.activeTab; return tab?.panes.find(pane => pane.id === tab.focused); }
|
|
97
|
+
subscribe = (listener) => { this.listeners.add(listener); return () => this.listeners.delete(listener); };
|
|
98
|
+
snapshot = () => this.revision;
|
|
99
|
+
save = () => {
|
|
100
|
+
writeTerminalStorage(this.key, { tabs: this.tabs.map(tab => ({ ...tab, panes: tab.panes.map(({ handle, phase, autoConnect, ...pane }) => ({ ...pane, terminalId: handle.id })) })), activeId: this.activeId });
|
|
101
|
+
this.revision++;
|
|
102
|
+
for (const listener of this.listeners)
|
|
103
|
+
listener();
|
|
104
|
+
};
|
|
105
|
+
makePane(target, connect) { return { ...target, id: ++this.serial, handle: new BrowserTerminalHandle(undefined, this.save), autoConnect: connect, phase: 'idle' }; }
|
|
106
|
+
open(target, fresh = false, connect = true) {
|
|
107
|
+
let tab = !fresh ? [...this.tabs].reverse().find(tab => tab.profileId === target.profileId && tab.path === target.path) : undefined;
|
|
108
|
+
if (!tab) {
|
|
109
|
+
if (this.tabs.length >= 32)
|
|
110
|
+
throw new Error('最多保留 32 个终端标签,请先关闭不再使用的标签。');
|
|
111
|
+
const pane = this.makePane(target, connect);
|
|
112
|
+
tab = { ...target, id: pane.id, panes: [pane], layout: pane.id, focused: pane.id, filesOnly: !connect };
|
|
113
|
+
this.tabs.push(tab);
|
|
114
|
+
}
|
|
115
|
+
this.activeId = tab.id;
|
|
116
|
+
this.save();
|
|
117
|
+
return tab;
|
|
118
|
+
}
|
|
119
|
+
focus(id) { if (!this.tabs.some(tab => tab.id === id))
|
|
120
|
+
return; this.activeId = id; this.save(); }
|
|
121
|
+
focusPane(tabId, paneId) {
|
|
122
|
+
const tab = this.tabs.find(tab => tab.id === tabId);
|
|
123
|
+
if (!tab?.panes.some(pane => pane.id === paneId) || (this.activeId === tabId && tab.focused === paneId))
|
|
124
|
+
return;
|
|
125
|
+
this.activeId = tabId;
|
|
126
|
+
tab.focused = paneId;
|
|
127
|
+
this.save();
|
|
128
|
+
}
|
|
129
|
+
setFilesOnly(value) { if (this.activeTab) {
|
|
130
|
+
this.activeTab.filesOnly = value;
|
|
131
|
+
this.save();
|
|
132
|
+
} }
|
|
133
|
+
/** Reductions require an explicit keep list and the pane snapshot shown in the confirmation dialog. */
|
|
134
|
+
async applyLayout(tabId, mode, remove, keepIds, expectedIds) {
|
|
135
|
+
const tab = this.tabs.find(tab => tab.id === tabId);
|
|
136
|
+
if (!tab || !['single', 'horizontal', 'vertical', 'grid'].includes(mode))
|
|
137
|
+
throw new Error('Terminal layout is unavailable');
|
|
138
|
+
if (this.changing.has(tabId))
|
|
139
|
+
throw new Error('Terminal layout is changing');
|
|
140
|
+
const count = deskLayoutSize(mode), ids = tab.panes.map(pane => pane.id);
|
|
141
|
+
if (count < ids.length && (!expectedIds || expectedIds.length !== ids.length || expectedIds.some((id, index) => id !== ids[index]) || !keepIds || keepIds.length !== count || new Set(keepIds).size !== count || keepIds.some(id => !ids.includes(id))))
|
|
142
|
+
throw new Error('Terminal selection changed; select the panes to keep again');
|
|
143
|
+
this.changing.add(tabId);
|
|
144
|
+
try {
|
|
145
|
+
if (count < ids.length) {
|
|
146
|
+
const errors = await this.removePanes(ids.filter(id => !keepIds.includes(id)), remove);
|
|
147
|
+
if (errors.length)
|
|
148
|
+
return errors;
|
|
149
|
+
}
|
|
150
|
+
const source = tab.panes.find(pane => pane.id === tab.focused) ?? tab.panes[0];
|
|
151
|
+
while (tab.panes.length < count)
|
|
152
|
+
tab.panes.push(this.makePane({ profileId: source.profileId, path: source.directory ?? source.path, label: source.label }, true));
|
|
153
|
+
tab.layout = fixedLayout(tab.panes.map(pane => pane.id), mode);
|
|
154
|
+
tab.filesOnly = false;
|
|
155
|
+
this.save();
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
this.changing.delete(tabId);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
setPhase(id, phase) { const pane = this.tabs.flatMap(tab => tab.panes).find(pane => pane.id === id); if (pane && pane.phase !== phase) {
|
|
163
|
+
pane.phase = phase;
|
|
164
|
+
this.save();
|
|
165
|
+
} }
|
|
166
|
+
setDirectory(id, directory) { const pane = this.tabs.flatMap(tab => tab.panes).find(pane => pane.id === id); if (pane && pane.directory !== directory) {
|
|
167
|
+
pane.directory = directory;
|
|
168
|
+
this.save();
|
|
169
|
+
} }
|
|
170
|
+
async removePanes(ids, remove) {
|
|
171
|
+
const panes = this.tabs.flatMap(tab => tab.panes).filter(pane => ids.includes(pane.id));
|
|
172
|
+
const results = await Promise.allSettled(panes.map(async (pane) => { await pane.handle.close(remove); return pane.id; }));
|
|
173
|
+
const closed = new Set(results.flatMap(result => result.status === 'fulfilled' ? [result.value] : []));
|
|
174
|
+
for (const tab of this.tabs) {
|
|
175
|
+
const mode = deskLayoutMode(tab);
|
|
176
|
+
tab.panes = tab.panes.filter(pane => !closed.has(pane.id));
|
|
177
|
+
if (!tab.panes.length)
|
|
178
|
+
continue;
|
|
179
|
+
tab.layout = fixedLayout(tab.panes.map(pane => pane.id), tab.panes.length > 2 ? 'grid' : mode === 'vertical' ? 'vertical' : 'horizontal');
|
|
180
|
+
if (!tab.panes.some(pane => pane.id === tab.focused))
|
|
181
|
+
tab.focused = tab.panes[0].id;
|
|
182
|
+
}
|
|
183
|
+
const index = this.tabs.findIndex(tab => tab.id === this.activeId);
|
|
184
|
+
this.tabs = this.tabs.filter(tab => tab.panes.length);
|
|
185
|
+
if (!this.activeTab)
|
|
186
|
+
this.activeId = this.tabs[Math.min(Math.max(index, 0), this.tabs.length - 1)]?.id ?? 0;
|
|
187
|
+
this.save();
|
|
188
|
+
return results.flatMap(result => result.status === 'rejected' ? [result.reason] : []);
|
|
189
|
+
}
|
|
190
|
+
async close(ids, remove) {
|
|
191
|
+
if (ids.some(id => this.changing.has(id)))
|
|
192
|
+
return [new Error('Terminal layout is changing')];
|
|
193
|
+
return this.removePanes(this.tabs.filter(tab => ids.includes(tab.id)).flatMap(tab => tab.panes.map(pane => pane.id)), remove);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const desks = new Map();
|
|
197
|
+
export function terminalDesk(scope) {
|
|
198
|
+
let state = desks.get(scope);
|
|
199
|
+
if (!state) {
|
|
200
|
+
state = new TerminalDeskState(scope);
|
|
201
|
+
desks.set(scope, state);
|
|
202
|
+
}
|
|
203
|
+
return state;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=terminal-desk-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-desk-state.js","sourceRoot":"","sources":["../src/terminal-desk-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ProfileView } from './client-api.js';
|
|
2
|
+
import { type DeskTarget } from './terminal-desk-state.js';
|
|
3
|
+
export interface OpenTerminalRequest {
|
|
4
|
+
serial: number;
|
|
5
|
+
target: DeskTarget;
|
|
6
|
+
fresh?: boolean;
|
|
7
|
+
filesOnly?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function TerminalDesk({ scope, profiles, active, request, onManage }: {
|
|
10
|
+
scope: string;
|
|
11
|
+
profiles: ProfileView[];
|
|
12
|
+
active: boolean;
|
|
13
|
+
request?: OpenTerminalRequest | undefined;
|
|
14
|
+
onManage(): void;
|
|
15
|
+
}): JSX.Element;
|
|
16
|
+
//# sourceMappingURL=terminal-desk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-desk.d.ts","sourceRoot":"","sources":["../src/terminal-desk.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqD,KAAK,WAAW,EAA0B,MAAM,iBAAiB,CAAA;AAC7H,OAAO,EAAoF,KAAK,UAAU,EAA+B,MAAM,0BAA0B,CAAA;AAUzK,MAAM,WAAW,mBAAmB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;AACjH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAAC,QAAQ,IAAI,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA8HlN"}
|