nterminal 1.3.24 → 1.3.26
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 +2 -1
- package/dist/client/assets/MarkdownPreview-Dz-gstWx.js +1 -0
- package/dist/client/assets/{TranscriptMarkdownBody-D_cxr-gq.js → TranscriptMarkdownBody-wSYk8MdN.js} +1 -1
- package/dist/client/assets/{index-BWGb94RV.js → index-D7G-v5g3.js} +1 -1
- package/dist/client/assets/index-WcP7tpZM.js +59 -0
- package/dist/client/index.html +1 -1
- package/dist/server/agent/agentRoutes.js +6 -1
- package/dist/server/agent/agentRoutes.js.map +1 -1
- package/dist/server/index.js +14 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/activityRoutes.js +3 -2
- package/dist/server/routes/activityRoutes.js.map +1 -1
- package/dist/server/routes/agentManagementRoutes.js +19 -1
- package/dist/server/routes/agentManagementRoutes.js.map +1 -1
- package/dist/server/routes/terminalRoutes.d.ts +4 -1
- package/dist/server/routes/terminalRoutes.js +15 -1
- package/dist/server/routes/terminalRoutes.js.map +1 -1
- package/dist/server/routes/terminalWebSocket.js +4 -0
- package/dist/server/routes/terminalWebSocket.js.map +1 -1
- package/dist/server/storage/terminalLayoutCleanup.d.ts +4 -0
- package/dist/server/storage/terminalLayoutCleanup.js +103 -0
- package/dist/server/storage/terminalLayoutCleanup.js.map +1 -0
- package/dist/server/terminal/TerminalManager.d.ts +23 -1
- package/dist/server/terminal/TerminalManager.js +338 -77
- package/dist/server/terminal/TerminalManager.js.map +1 -1
- package/dist/server/terminal/terminalSessionStore.d.ts +27 -0
- package/dist/server/terminal/terminalSessionStore.js +124 -0
- package/dist/server/terminal/terminalSessionStore.js.map +1 -0
- package/dist/shared/layoutState.d.ts +2 -0
- package/dist/shared/layoutState.js +3 -0
- package/dist/shared/layoutState.js.map +1 -1
- package/dist/shared/protocol.d.ts +2 -0
- package/dist/shared/protocol.js.map +1 -1
- package/docs/configuration.md +53 -0
- package/package.json +1 -1
- package/dist/client/assets/MarkdownPreview--8XdSXg9.js +0 -1
- package/dist/client/assets/index-B82gs1vu.js +0 -59
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, open, readFile, rename, rm } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
// Separate from auth/layout state: frequent terminal output is never persisted.
|
|
5
|
+
// A deletion intent is durable before destroying tmux, so a deleted shell is
|
|
6
|
+
// not recreated after a crash. A surviving shell is preserved: its deletion
|
|
7
|
+
// may have failed while the cancellation could not be written to disk.
|
|
8
|
+
export class TerminalSessionStore {
|
|
9
|
+
filePath;
|
|
10
|
+
socket;
|
|
11
|
+
sessions = null;
|
|
12
|
+
tail = Promise.resolve();
|
|
13
|
+
constructor(filePath, socket) {
|
|
14
|
+
this.filePath = filePath;
|
|
15
|
+
this.socket = socket;
|
|
16
|
+
}
|
|
17
|
+
async init() {
|
|
18
|
+
let raw;
|
|
19
|
+
try {
|
|
20
|
+
raw = await readFile(this.filePath, 'utf8');
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error.code !== 'ENOENT')
|
|
24
|
+
throw error;
|
|
25
|
+
this.sessions = [];
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const value = JSON.parse(raw);
|
|
29
|
+
if (value?.version !== 1 || value.socket !== this.socket || !Array.isArray(value.sessions) ||
|
|
30
|
+
!value.sessions.every(isSavedSession) ||
|
|
31
|
+
new Set(value.sessions.map((entry) => entry.id)).size !== value.sessions.length) {
|
|
32
|
+
throw new Error('Invalid terminal recovery file; refusing to overwrite it');
|
|
33
|
+
}
|
|
34
|
+
this.sessions = value.sessions.map((entry) => ({ ...entry }));
|
|
35
|
+
}
|
|
36
|
+
list() {
|
|
37
|
+
if (!this.sessions)
|
|
38
|
+
throw new Error('Terminal recovery store is not initialized');
|
|
39
|
+
return this.sessions.map(entry => ({ ...entry }));
|
|
40
|
+
}
|
|
41
|
+
async prepareCreation(terminal) {
|
|
42
|
+
await this.saveSnapshots([terminal], true);
|
|
43
|
+
}
|
|
44
|
+
async save(terminals) {
|
|
45
|
+
await this.saveSnapshots(terminals, false);
|
|
46
|
+
}
|
|
47
|
+
async saveSnapshots(terminals, creating) {
|
|
48
|
+
const snapshots = terminals.map(terminal => ({
|
|
49
|
+
id: terminal.id, title: terminal.title, cwd: terminal.cwd,
|
|
50
|
+
cols: terminal.cols, rows: terminal.rows, createdAt: terminal.createdAt, deleting: false, creating
|
|
51
|
+
}));
|
|
52
|
+
if (!snapshots.every(isSavedSession))
|
|
53
|
+
throw new Error('Invalid terminal recovery metadata');
|
|
54
|
+
await this.update(entries => {
|
|
55
|
+
const byId = new Map(entries.map(entry => [entry.id, entry]));
|
|
56
|
+
for (const snapshot of snapshots) {
|
|
57
|
+
if (!byId.get(snapshot.id)?.deleting)
|
|
58
|
+
byId.set(snapshot.id, snapshot);
|
|
59
|
+
}
|
|
60
|
+
return [...byId.values()];
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async setDeleting(id, deleting) {
|
|
64
|
+
await this.update(entries => entries.map(entry => entry.id === id ? { ...entry, deleting } : entry));
|
|
65
|
+
}
|
|
66
|
+
async forget(id) {
|
|
67
|
+
await this.update(entries => entries.filter(entry => entry.id !== id));
|
|
68
|
+
}
|
|
69
|
+
update(change) {
|
|
70
|
+
const operation = this.tail.then(async () => {
|
|
71
|
+
const previous = this.list();
|
|
72
|
+
const next = change(previous);
|
|
73
|
+
if (JSON.stringify(previous) === JSON.stringify(next))
|
|
74
|
+
return;
|
|
75
|
+
await this.write(next);
|
|
76
|
+
this.sessions = next;
|
|
77
|
+
});
|
|
78
|
+
this.tail = operation.catch(() => undefined);
|
|
79
|
+
return operation;
|
|
80
|
+
}
|
|
81
|
+
async write(sessions) {
|
|
82
|
+
const directoryPath = path.dirname(this.filePath);
|
|
83
|
+
await mkdir(directoryPath, { recursive: true, mode: 0o700 });
|
|
84
|
+
const temporary = `${this.filePath}.${randomUUID()}.tmp`;
|
|
85
|
+
try {
|
|
86
|
+
const file = await open(temporary, 'wx', 0o600);
|
|
87
|
+
try {
|
|
88
|
+
await file.writeFile(JSON.stringify({ version: 1, socket: this.socket, sessions }) + '\n');
|
|
89
|
+
await file.sync();
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
await file.close();
|
|
93
|
+
}
|
|
94
|
+
await rename(temporary, this.filePath);
|
|
95
|
+
// Even if directory fsync fails, later writes must not revert a rename
|
|
96
|
+
// that already committed (especially a deletion intent).
|
|
97
|
+
this.sessions = sessions;
|
|
98
|
+
const directory = await open(directoryPath, 'r');
|
|
99
|
+
try {
|
|
100
|
+
await directory.sync();
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await directory.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
await rm(temporary, { force: true });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function isSavedSession(value) {
|
|
112
|
+
if (!value || typeof value !== 'object')
|
|
113
|
+
return false;
|
|
114
|
+
const entry = value;
|
|
115
|
+
return typeof entry.id === 'string' && /^[a-zA-Z0-9_-]{1,128}$/.test(entry.id) &&
|
|
116
|
+
typeof entry.title === 'string' && entry.title.length <= 80 &&
|
|
117
|
+
typeof entry.cwd === 'string' && path.isAbsolute(entry.cwd) && !entry.cwd.includes('\0') &&
|
|
118
|
+
typeof entry.createdAt === 'string' && Number.isFinite(Date.parse(entry.createdAt)) &&
|
|
119
|
+
typeof entry.cols === 'number' && Number.isInteger(entry.cols) && entry.cols > 0 &&
|
|
120
|
+
typeof entry.rows === 'number' && Number.isInteger(entry.rows) && entry.rows > 0 &&
|
|
121
|
+
typeof entry.deleting === 'boolean' &&
|
|
122
|
+
(entry.creating === undefined || typeof entry.creating === 'boolean');
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=terminalSessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalSessionStore.js","sourceRoot":"","sources":["../../../src/server/terminal/terminalSessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,OAAO,oBAAoB;IAIF;IAAmC;IAHxD,QAAQ,GAAkC,IAAI,CAAC;IAC/C,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,YAA6B,QAAgB,EAAmB,MAAc;QAAjD,aAAQ,GAAR,QAAQ,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAElF,KAAK,CAAC,IAAI;QACR,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YACpE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACtF,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;YACrC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAA2B,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1G,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAA2B,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAyB;QAC7C,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAqC;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAqC,EAAE,QAAiB;QAClF,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG;YACzD,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;SACnG,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5F,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,QAAiB;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,MAAM,CAAC,MAAmE;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC9D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAgC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE,MAAM,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3F,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YACjC,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,uEAAuE;YACvE,yDAAyD;YACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC;gBAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;oBAAS,CAAC;gBAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;IACrD,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,KAAsC,CAAC;IACrD,OAAO,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5E,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;QAC3D,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxF,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnF,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAChF,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAChF,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QACnC,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { LayoutNode, TerminalLayoutState, TerminalTabLayout, TerminalWorkspaceLayout } from './types.js';
|
|
2
|
+
import type { TerminalLayoutResponse, TerminalListResponse } from './protocol.js';
|
|
3
|
+
export declare function latestTerminalLayoutResponse(listed: TerminalListResponse, layout: TerminalLayoutResponse): TerminalLayoutResponse;
|
|
2
4
|
export declare const maxDetachedTerminalsPerWorkspace = 100;
|
|
3
5
|
export declare const tooManyDetachedTerminalsError = "too_many_detached_terminals";
|
|
4
6
|
export declare function isTerminalLayoutState(value: unknown): value is TerminalLayoutState;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export function latestTerminalLayoutResponse(listed, layout) {
|
|
2
|
+
return listed.savedLayout && listed.savedLayout.revision > layout.revision ? listed.savedLayout : layout;
|
|
3
|
+
}
|
|
1
4
|
const maxWorkspaces = 128;
|
|
2
5
|
const maxTabsPerWorkspace = 512;
|
|
3
6
|
export const maxDetachedTerminalsPerWorkspace = 100;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutState.js","sourceRoot":"","sources":["../../src/shared/layoutState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layoutState.js","sourceRoot":"","sources":["../../src/shared/layoutState.ts"],"names":[],"mappings":"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"}
|
|
@@ -331,6 +331,8 @@ export interface CreateTerminalRequest {
|
|
|
331
331
|
}
|
|
332
332
|
export interface TerminalListResponse {
|
|
333
333
|
terminals: TerminalSummary[];
|
|
334
|
+
inventoryComplete?: boolean;
|
|
335
|
+
savedLayout?: TerminalLayoutResponse;
|
|
334
336
|
}
|
|
335
337
|
export interface TerminalResponse {
|
|
336
338
|
terminal: TerminalSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/shared/protocol.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/shared/protocol.ts"],"names":[],"mappings":"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"}
|
package/docs/configuration.md
CHANGED
|
@@ -50,6 +50,59 @@ Onboarding writes `.env` for you, including an absolute `NTERMINAL_STATE_PATH` s
|
|
|
50
50
|
| `NTERMINAL_HEALTH_TIMEOUT_SECONDS` | `15` | Startup health-check timeout for the control script. |
|
|
51
51
|
| `NTERMINAL_STOP_TIMEOUT_SECONDS` | `20` | Graceful stop timeout for the control script. |
|
|
52
52
|
|
|
53
|
+
## Pane Recovery
|
|
54
|
+
|
|
55
|
+
When tmux persistence is enabled, NTerminal keeps
|
|
56
|
+
`terminal-sessions.<tmux-socket>.json` next to `NTERMINAL_STATE_PATH` on each
|
|
57
|
+
server. The default path is `~/.nterminal/terminal-sessions.nterminal.json`.
|
|
58
|
+
This file is outside the npm installation and is private to the runtime user.
|
|
59
|
+
Separate preview state directories and tmux sockets keep recovery isolated.
|
|
60
|
+
|
|
61
|
+
Existing live sessions are recorded when the updated server starts; onboarding
|
|
62
|
+
does not need to be repeated. Creation and explicit deletion are durably saved.
|
|
63
|
+
Working directories are checked every 10 seconds without attaching detached
|
|
64
|
+
panes; changed titles and sizes are coalesced over one second. Unchanged metadata
|
|
65
|
+
and terminal output do not cause recovery-file writes.
|
|
66
|
+
|
|
67
|
+
On startup, existing tmux sessions are reattached, not replaced. Missing sessions
|
|
68
|
+
reopen as fresh shells using their saved IDs and working directories, preserving
|
|
69
|
+
the main server's workspace/tab/split references. An unavailable directory or
|
|
70
|
+
failed shell start leaves an exited pane and a `terminal.restore_failed` log,
|
|
71
|
+
without silently falling back to another directory. These startup failures are
|
|
72
|
+
retried after a fresh local tmux inventory, with backoff from 2 to 30 seconds;
|
|
73
|
+
healthy panes remain usable. A successful retry keeps the same pane ID and
|
|
74
|
+
browser subscribers. Ordinary shell exits are not automatically restarted.
|
|
75
|
+
Recovery runs in the background so a slow shell or mount does not delay HTTP
|
|
76
|
+
health checks. Terminal lists remain unavailable until a successful catalog
|
|
77
|
+
read has included every live session and every recoverable placeholder.
|
|
78
|
+
|
|
79
|
+
New panes have a pending creation marker until spawn and the final metadata
|
|
80
|
+
checkpoint succeed. A failed creation with no surviving shell is cleaned up,
|
|
81
|
+
not retried as a new shell on the next boot. If a shell survived an interrupted
|
|
82
|
+
creation, it is adopted instead of replaced.
|
|
83
|
+
|
|
84
|
+
Explicitly deleted shells are not recreated. If deletion was interrupted and
|
|
85
|
+
the shell is still alive, startup preserves it instead of terminating it based
|
|
86
|
+
on an old deletion marker. Failed cancellation writes are retried while the
|
|
87
|
+
server is running; no recovery scheme can persist a cancellation across machine
|
|
88
|
+
loss while storage remains unwritable. An unreadable or corrupt recovery file
|
|
89
|
+
is not overwritten.
|
|
90
|
+
|
|
91
|
+
This does not restore running commands, terminal scrollback, or automatically
|
|
92
|
+
resume an AI conversation. It also does not install a machine-boot service:
|
|
93
|
+
recovery runs when NTerminal starts. Panes lost before this feature recorded
|
|
94
|
+
their metadata cannot be reconstructed from their old IDs alone.
|
|
95
|
+
|
|
96
|
+
When an authenticated client next retrieves a verified complete pane inventory,
|
|
97
|
+
the main removes obsolete pane references from that server's saved layout:
|
|
98
|
+
missing split children collapse, empty tabs are removed, and stale detached IDs
|
|
99
|
+
are discarded. Workspaces (including their default cwd), favorites, credentials,
|
|
100
|
+
and conversation files are preserved. Exited recovery placeholders are also
|
|
101
|
+
preserved; an unavailable cwd may become available later. Offline servers,
|
|
102
|
+
failed/incomplete inventories, and servers not yet upgraded never trigger this
|
|
103
|
+
cleanup. Concurrent layout edits or server replacement cancel stale cleanup.
|
|
104
|
+
Once cleaned, unchanged layouts do not generate more writes.
|
|
105
|
+
|
|
53
106
|
## Localhost Only
|
|
54
107
|
|
|
55
108
|
```env
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as a}from"./index-B82gs1vu.js";import{M as e,r as o}from"./index-BWGb94RV.js";function s({content:r}){return a.jsx(e,{remarkPlugins:[o],children:r})}export{s as default};
|