nterminal 1.2.66 → 1.2.68
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/dist/client/assets/MarkdownPreview-DOXE7Rl3.js +1 -0
- package/dist/client/assets/{TranscriptMarkdownBody-Ct0CseQH.js → TranscriptMarkdownBody-BunI06BW.js} +1 -1
- package/dist/client/assets/index-Br4cNNw1.css +1 -0
- package/dist/client/assets/{index-DC8H8aYn.js → index-BwvExbdl.js} +1 -1
- package/dist/client/assets/index-DeiwbfGQ.js +55 -0
- package/dist/client/index.html +2 -2
- package/dist/server/agent/agentRoutes.js +13 -1
- package/dist/server/agent/agentRoutes.js.map +1 -1
- package/dist/server/config.d.ts +2 -0
- package/dist/server/config.js +10 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/index.js +4 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/agentManagementRoutes.js +5 -0
- package/dist/server/routes/agentManagementRoutes.js.map +1 -1
- package/dist/server/routes/authRoutes.js +8 -5
- package/dist/server/routes/authRoutes.js.map +1 -1
- package/dist/server/routes/terminalWebSocket.js +13 -1
- package/dist/server/routes/terminalWebSocket.js.map +1 -1
- package/dist/server/routes/updateRoutes.js +3 -0
- package/dist/server/routes/updateRoutes.js.map +1 -1
- package/dist/server/terminal/PtyAdapter.d.ts +2 -0
- package/dist/server/terminal/TerminalManager.d.ts +9 -1
- package/dist/server/terminal/TerminalManager.js +88 -6
- package/dist/server/terminal/TerminalManager.js.map +1 -1
- package/dist/server/terminal/TmuxPtyAdapter.d.ts +6 -0
- package/dist/server/terminal/TmuxPtyAdapter.js +87 -0
- package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
- package/dist/server/terminal/agentTranscriptStatus.d.ts +11 -0
- package/dist/server/terminal/agentTranscriptStatus.js +187 -0
- package/dist/server/terminal/agentTranscriptStatus.js.map +1 -0
- package/dist/shared/protocol.d.ts +8 -0
- package/dist/shared/protocol.js +27 -6
- package/dist/shared/protocol.js.map +1 -1
- package/dist/shared/types.d.ts +8 -0
- package/package.json +1 -1
- package/dist/client/assets/MarkdownPreview-BBxs32JK.js +0 -1
- package/dist/client/assets/index-CCAlcWtm.js +0 -55
- package/dist/client/assets/index-fCHYZN40.css +0 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { closeSync, fstatSync, openSync, readSync, statSync } from 'node:fs';
|
|
2
|
+
import { StringDecoder } from 'node:string_decoder';
|
|
3
|
+
const TRANSCRIPT_TAIL_BYTES = 512 * 1024;
|
|
4
|
+
const MAX_APPEND_BYTES = 1024 * 1024;
|
|
5
|
+
const statusCache = new Map();
|
|
6
|
+
export function readAgentTranscriptStatus(source) {
|
|
7
|
+
const stat = statSync(source.filePath);
|
|
8
|
+
const cacheKey = sourceIdentity(source);
|
|
9
|
+
const cached = statusCache.get(cacheKey);
|
|
10
|
+
if (cached &&
|
|
11
|
+
cached.dev === stat.dev &&
|
|
12
|
+
cached.ino === stat.ino &&
|
|
13
|
+
cached.size === stat.size &&
|
|
14
|
+
cached.mtimeMs === stat.mtimeMs) {
|
|
15
|
+
return cached.status;
|
|
16
|
+
}
|
|
17
|
+
const status = inspectTranscriptTail(source);
|
|
18
|
+
statusCache.set(cacheKey, { dev: stat.dev, ino: stat.ino, size: stat.size, mtimeMs: stat.mtimeMs, status });
|
|
19
|
+
return status;
|
|
20
|
+
}
|
|
21
|
+
export class AgentTranscriptTracker {
|
|
22
|
+
tracked = new Map();
|
|
23
|
+
readStatus(terminalId, source) {
|
|
24
|
+
const stat = statSync(source.filePath);
|
|
25
|
+
const identity = sourceIdentity(source);
|
|
26
|
+
const current = this.tracked.get(terminalId);
|
|
27
|
+
if (!current ||
|
|
28
|
+
current.identity !== identity ||
|
|
29
|
+
current.dev !== stat.dev ||
|
|
30
|
+
current.ino !== stat.ino ||
|
|
31
|
+
stat.size < current.offset) {
|
|
32
|
+
return this.resetFromTail(terminalId, source, stat);
|
|
33
|
+
}
|
|
34
|
+
if (current.offset === stat.size && current.size === stat.size && current.mtimeMs === stat.mtimeMs) {
|
|
35
|
+
return current.status;
|
|
36
|
+
}
|
|
37
|
+
const appendBytes = stat.size - current.offset;
|
|
38
|
+
if (appendBytes <= 0) {
|
|
39
|
+
return this.resetFromTail(terminalId, source, stat);
|
|
40
|
+
}
|
|
41
|
+
if (appendBytes > MAX_APPEND_BYTES) {
|
|
42
|
+
return this.resetFromTail(terminalId, source, stat);
|
|
43
|
+
}
|
|
44
|
+
const { buffer, bytesRead } = readFileRange(source.filePath, current.offset, appendBytes);
|
|
45
|
+
if (bytesRead === 0) {
|
|
46
|
+
return this.resetFromTail(terminalId, source, stat);
|
|
47
|
+
}
|
|
48
|
+
current.offset += bytesRead;
|
|
49
|
+
current.size = stat.size;
|
|
50
|
+
current.mtimeMs = stat.mtimeMs;
|
|
51
|
+
const text = current.remainder + current.decoder.write(buffer);
|
|
52
|
+
const lines = text.split('\n');
|
|
53
|
+
current.remainder = lines.pop() ?? '';
|
|
54
|
+
current.status = {
|
|
55
|
+
provider: source.provider,
|
|
56
|
+
state: inspectLines(source.provider, current.status.state, lines)
|
|
57
|
+
};
|
|
58
|
+
return current.status;
|
|
59
|
+
}
|
|
60
|
+
reset(terminalId) {
|
|
61
|
+
this.tracked.delete(terminalId);
|
|
62
|
+
}
|
|
63
|
+
resetFromTail(terminalId, source, stat) {
|
|
64
|
+
const tail = readTail(source.filePath, stat.size);
|
|
65
|
+
const status = { provider: source.provider, state: inspectLines(source.provider, 'unknown', tail.lines) };
|
|
66
|
+
this.tracked.set(terminalId, {
|
|
67
|
+
identity: sourceIdentity(source),
|
|
68
|
+
dev: stat.dev,
|
|
69
|
+
ino: stat.ino,
|
|
70
|
+
size: stat.size,
|
|
71
|
+
mtimeMs: stat.mtimeMs,
|
|
72
|
+
offset: stat.size,
|
|
73
|
+
status,
|
|
74
|
+
remainder: tail.remainder,
|
|
75
|
+
decoder: new StringDecoder('utf8')
|
|
76
|
+
});
|
|
77
|
+
return status;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function inspectTranscriptTail(source) {
|
|
81
|
+
const lines = readTail(source.filePath).lines;
|
|
82
|
+
return { provider: source.provider, state: inspectLines(source.provider, 'unknown', lines) };
|
|
83
|
+
}
|
|
84
|
+
function inspectLines(provider, currentState, lines) {
|
|
85
|
+
if (provider === 'codex') {
|
|
86
|
+
return inspectCodexLines(lines, currentState);
|
|
87
|
+
}
|
|
88
|
+
return inspectClaudeLines(lines, currentState);
|
|
89
|
+
}
|
|
90
|
+
function inspectCodexLines(lines, currentState) {
|
|
91
|
+
let state = currentState;
|
|
92
|
+
for (const line of lines) {
|
|
93
|
+
const value = parseJsonLine(line);
|
|
94
|
+
if (!value || value.type !== 'event_msg') {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const payload = isJsonObject(value.payload) ? value.payload : null;
|
|
98
|
+
const payloadType = payload?.type;
|
|
99
|
+
if (payloadType === 'task_started') {
|
|
100
|
+
state = 'working';
|
|
101
|
+
}
|
|
102
|
+
else if (payloadType === 'task_complete') {
|
|
103
|
+
state = 'done';
|
|
104
|
+
}
|
|
105
|
+
else if (payloadType === 'turn_aborted') {
|
|
106
|
+
state = 'idle';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return state;
|
|
110
|
+
}
|
|
111
|
+
function inspectClaudeLines(lines, currentState) {
|
|
112
|
+
let state = currentState;
|
|
113
|
+
for (const line of lines) {
|
|
114
|
+
const value = parseJsonLine(line);
|
|
115
|
+
if (!value || value.type !== 'assistant') {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const message = isJsonObject(value.message) ? value.message : null;
|
|
119
|
+
const stopReason = message?.stop_reason;
|
|
120
|
+
if (stopReason === 'tool_use') {
|
|
121
|
+
state = 'working';
|
|
122
|
+
}
|
|
123
|
+
else if (stopReason === 'end_turn') {
|
|
124
|
+
state = 'done';
|
|
125
|
+
}
|
|
126
|
+
else if (typeof stopReason === 'string' && stopReason.length > 0) {
|
|
127
|
+
state = 'idle';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return state;
|
|
131
|
+
}
|
|
132
|
+
function readTail(filePath, knownSize) {
|
|
133
|
+
const fd = openSync(filePath, 'r');
|
|
134
|
+
try {
|
|
135
|
+
const size = knownSize ?? fstatSync(fd).size;
|
|
136
|
+
const start = Math.max(0, size - TRANSCRIPT_TAIL_BYTES);
|
|
137
|
+
const length = size - start;
|
|
138
|
+
const { buffer } = readRangeFromFd(fd, start, length);
|
|
139
|
+
const text = new StringDecoder('utf8').write(buffer);
|
|
140
|
+
const lines = text.split('\n');
|
|
141
|
+
if (start > 0) {
|
|
142
|
+
lines.shift();
|
|
143
|
+
}
|
|
144
|
+
const remainder = text.endsWith('\n') ? '' : (lines.pop() ?? '');
|
|
145
|
+
return { lines: lines.filter((line) => line.trim().length > 0), remainder };
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
closeSync(fd);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function readFileRange(filePath, offset, length) {
|
|
152
|
+
const fd = openSync(filePath, 'r');
|
|
153
|
+
try {
|
|
154
|
+
return readRangeFromFd(fd, offset, length);
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
closeSync(fd);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function readRangeFromFd(fd, offset, length) {
|
|
161
|
+
const buffer = Buffer.allocUnsafe(length);
|
|
162
|
+
let totalRead = 0;
|
|
163
|
+
while (totalRead < length) {
|
|
164
|
+
const bytesRead = readSync(fd, buffer, totalRead, length - totalRead, offset + totalRead);
|
|
165
|
+
if (bytesRead === 0) {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
totalRead += bytesRead;
|
|
169
|
+
}
|
|
170
|
+
return { buffer: buffer.subarray(0, totalRead), bytesRead: totalRead };
|
|
171
|
+
}
|
|
172
|
+
function sourceIdentity(source) {
|
|
173
|
+
return `${source.provider}\0${source.sessionId}\0${source.filePath}`;
|
|
174
|
+
}
|
|
175
|
+
function parseJsonLine(line) {
|
|
176
|
+
try {
|
|
177
|
+
const value = JSON.parse(line);
|
|
178
|
+
return isJsonObject(value) ? value : null;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function isJsonObject(value) {
|
|
185
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=agentTranscriptStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentTranscriptStatus.js","sourceRoot":"","sources":["../../../src/server/terminal/agentTranscriptStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -309,6 +309,7 @@ export type ClientTerminalMessage = {
|
|
|
309
309
|
type: 'input';
|
|
310
310
|
terminalId: TerminalId;
|
|
311
311
|
data: string;
|
|
312
|
+
cancelScrollbackMode?: boolean;
|
|
312
313
|
} | {
|
|
313
314
|
type: 'refresh_cwd';
|
|
314
315
|
terminalId: TerminalId;
|
|
@@ -317,6 +318,13 @@ export type ClientTerminalMessage = {
|
|
|
317
318
|
terminalId: TerminalId;
|
|
318
319
|
cols: number;
|
|
319
320
|
rows: number;
|
|
321
|
+
} | {
|
|
322
|
+
type: 'scrollback_scroll';
|
|
323
|
+
terminalId: TerminalId;
|
|
324
|
+
lines: number;
|
|
325
|
+
} | {
|
|
326
|
+
type: 'cancel_scrollback';
|
|
327
|
+
terminalId: TerminalId;
|
|
320
328
|
} | {
|
|
321
329
|
type: 'ping';
|
|
322
330
|
nonce: string;
|
package/dist/shared/protocol.js
CHANGED
|
@@ -7,19 +7,40 @@ export function parseClientTerminalMessage(raw) {
|
|
|
7
7
|
}
|
|
8
8
|
const message = parsed;
|
|
9
9
|
if (message.type === 'input' && typeof message.terminalId === 'string' && typeof message.data === 'string') {
|
|
10
|
-
return
|
|
10
|
+
return {
|
|
11
|
+
type: 'input',
|
|
12
|
+
terminalId: message.terminalId,
|
|
13
|
+
data: message.data,
|
|
14
|
+
...(message.cancelScrollbackMode === true ? { cancelScrollbackMode: true } : {})
|
|
15
|
+
};
|
|
11
16
|
}
|
|
12
17
|
if (message.type === 'refresh_cwd' && typeof message.terminalId === 'string') {
|
|
13
|
-
return message;
|
|
18
|
+
return { type: 'refresh_cwd', terminalId: message.terminalId };
|
|
14
19
|
}
|
|
20
|
+
const cols = message.cols;
|
|
21
|
+
const rows = message.rows;
|
|
15
22
|
if (message.type === 'resize' &&
|
|
16
23
|
typeof message.terminalId === 'string' &&
|
|
17
|
-
|
|
18
|
-
Number.isInteger(
|
|
19
|
-
|
|
24
|
+
typeof cols === 'number' &&
|
|
25
|
+
Number.isInteger(cols) &&
|
|
26
|
+
typeof rows === 'number' &&
|
|
27
|
+
Number.isInteger(rows)) {
|
|
28
|
+
return { type: 'resize', terminalId: message.terminalId, cols, rows };
|
|
29
|
+
}
|
|
30
|
+
const lines = message.lines;
|
|
31
|
+
if (message.type === 'scrollback_scroll' &&
|
|
32
|
+
typeof message.terminalId === 'string' &&
|
|
33
|
+
typeof lines === 'number' &&
|
|
34
|
+
Number.isInteger(lines) &&
|
|
35
|
+
lines !== 0 &&
|
|
36
|
+
Math.abs(lines) <= 240) {
|
|
37
|
+
return { type: 'scrollback_scroll', terminalId: message.terminalId, lines };
|
|
38
|
+
}
|
|
39
|
+
if (message.type === 'cancel_scrollback' && typeof message.terminalId === 'string') {
|
|
40
|
+
return { type: 'cancel_scrollback', terminalId: message.terminalId };
|
|
20
41
|
}
|
|
21
42
|
if (message.type === 'ping' && typeof message.nonce === 'string') {
|
|
22
|
-
return message;
|
|
43
|
+
return { type: 'ping', nonce: message.nonce };
|
|
23
44
|
}
|
|
24
45
|
return null;
|
|
25
46
|
}
|
|
@@ -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":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAmYzC,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,MASf,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3G,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IACE,OAAO,CAAC,IAAI,KAAK,QAAQ;YACzB,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YACtC,OAAO,IAAI,KAAK,QAAQ;YACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,OAAO,IAAI,KAAK,QAAQ;YACxB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EACtB,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxE,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IACE,OAAO,CAAC,IAAI,KAAK,mBAAmB;YACpC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YACtC,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YACvB,KAAK,KAAK,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EACtB,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnF,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QACvE,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -12,6 +12,13 @@ export interface TerminalSummary {
|
|
|
12
12
|
exitCode: number | null;
|
|
13
13
|
activity?: 'idle' | 'busy';
|
|
14
14
|
currentCommand?: string | null;
|
|
15
|
+
agentStatus?: {
|
|
16
|
+
provider: 'codex' | 'claude';
|
|
17
|
+
state: 'working' | 'done' | 'idle' | 'unknown';
|
|
18
|
+
};
|
|
19
|
+
capabilities?: {
|
|
20
|
+
tmuxScrollback?: boolean;
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
23
|
export interface AuthSessionStatus {
|
|
17
24
|
passwordSet: boolean;
|
|
@@ -20,6 +27,7 @@ export interface AuthSessionStatus {
|
|
|
20
27
|
deviceTrusted: boolean;
|
|
21
28
|
currentIpWhitelisted: boolean;
|
|
22
29
|
expiresAt: string | null;
|
|
30
|
+
previewMode?: boolean;
|
|
23
31
|
}
|
|
24
32
|
export interface SplitNode {
|
|
25
33
|
type: 'split';
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as a}from"./index-CCAlcWtm.js";import{M as e,r as o}from"./index-DC8H8aYn.js";function s({content:r}){return a.jsx(e,{remarkPlugins:[o],children:r})}export{s as default};
|