@monotykamary/localterm-server 2.16.5 → 2.17.1

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.
Files changed (38) hide show
  1. package/dist/cdp/cdp-client.d.ts +13 -10
  2. package/dist/cdp/cdp-client.d.ts.map +1 -1
  3. package/dist/cdp/cdp-client.js +13 -10
  4. package/dist/cdp/cdp-client.js.map +1 -1
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/constants.js +8 -9
  7. package/dist/constants.js.map +1 -1
  8. package/dist/index.d.ts +11 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +10 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/protocol.d.ts +4 -2
  13. package/dist/protocol.d.ts.map +1 -1
  14. package/dist/protocol.js +2 -1
  15. package/dist/protocol.js.map +1 -1
  16. package/dist/schemas.d.ts +12 -0
  17. package/dist/schemas.d.ts.map +1 -1
  18. package/dist/schemas.js +26 -2
  19. package/dist/schemas.js.map +1 -1
  20. package/dist/session-manager.d.ts +1 -0
  21. package/dist/session-manager.d.ts.map +1 -1
  22. package/dist/session-manager.js +8 -1
  23. package/dist/session-manager.js.map +1 -1
  24. package/dist/session.d.ts +1 -0
  25. package/dist/session.d.ts.map +1 -1
  26. package/dist/session.js +45 -7
  27. package/dist/session.js.map +1 -1
  28. package/dist/types.d.ts +2 -1
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/utils/terminal-mode-state.d.ts +7 -0
  31. package/dist/utils/terminal-mode-state.d.ts.map +1 -0
  32. package/dist/utils/terminal-mode-state.js +58 -0
  33. package/dist/utils/terminal-mode-state.js.map +1 -0
  34. package/dist/utils/terminal-query-responder.d.ts +13 -0
  35. package/dist/utils/terminal-query-responder.d.ts.map +1 -0
  36. package/dist/utils/terminal-query-responder.js +100 -0
  37. package/dist/utils/terminal-query-responder.js.map +1 -0
  38. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { z } from "zod";
2
- import type { automationLastRunSchema, automationLastRunStatusSchema, automationLifecycleSchema, automationRunLimitSchema, automationRunRecordSchema, automationRunStatusSchema, automationScheduleSchema, automationSchema, automationSessionEventSchema, automationTriggerSchema, automationV1Schema, automationV2Schema, automationWithNextRunSchema, caffeinateModeSchema, clientToServerMessageSchema, createAutomationInputSchema, gitBaseSourceSchema, gitBranchInfoSchema, gitBranchPrLeaseSchema, gitBranchPrMergeableSchema, gitBranchPrSchema, gitBranchPrStateSchema, gitDiffFileListResponseSchema, gitDiffFileMetaSchema, gitDiffFilePatchSchema, gitDiffFileSchema, gitDiffFileStatusSchema, gitDiffModeSchema, gitDiffResponseSchema, gitDiffSummarySchema, gitWorktreeListResponseSchema, gitWorktreeResultSchema, gitWorktreeSchema, gitWorktreeBaseRefSchema, createWorktreeInputSchema, worktreeOpenInCommandSchema, worktreeRepoConfigFileSchema, worktreeRepoConfigSchema, updateWorktreeConfigInputSchema, worktreeIncludeFileInputSchema, worktreeIncludeFileSchema, worktreeSweepResultSchema, launchInputSchema, resetAutomationInputSchema, serverToClientMessageSchema, sessionListItemSchema, sessionsListResponseSchema, sessionActivityStateSchema, triggerInputSchema, updateAutomationInputSchema } from "./schemas.js";
2
+ import type { automationLastRunSchema, automationLastRunStatusSchema, automationLifecycleSchema, automationRunLimitSchema, automationRunRecordSchema, automationRunStatusSchema, automationScheduleSchema, automationSchema, automationSessionEventSchema, automationTriggerSchema, automationV1Schema, automationV2Schema, automationWithNextRunSchema, caffeinateModeSchema, cdpHealthSchema, clientToServerMessageSchema, createAutomationInputSchema, gitBaseSourceSchema, gitBranchInfoSchema, gitBranchPrLeaseSchema, gitBranchPrMergeableSchema, gitBranchPrSchema, gitBranchPrStateSchema, gitDiffFileListResponseSchema, gitDiffFileMetaSchema, gitDiffFilePatchSchema, gitDiffFileSchema, gitDiffFileStatusSchema, gitDiffModeSchema, gitDiffResponseSchema, gitDiffSummarySchema, gitWorktreeListResponseSchema, gitWorktreeResultSchema, gitWorktreeSchema, gitWorktreeBaseRefSchema, createWorktreeInputSchema, worktreeOpenInCommandSchema, worktreeRepoConfigFileSchema, worktreeRepoConfigSchema, updateWorktreeConfigInputSchema, worktreeIncludeFileInputSchema, worktreeIncludeFileSchema, worktreeSweepResultSchema, launchInputSchema, resetAutomationInputSchema, serverToClientMessageSchema, sessionListItemSchema, sessionsListResponseSchema, sessionActivityStateSchema, triggerInputSchema, updateAutomationInputSchema } from "./schemas.js";
3
3
  export interface SpawnPtyInput {
4
4
  cols?: number;
5
5
  rows?: number;
@@ -18,6 +18,7 @@ export interface PendingAutomationRun {
18
18
  export type ClientToServerMessage = z.infer<typeof clientToServerMessageSchema>;
19
19
  export type ServerToClientMessage = z.infer<typeof serverToClientMessageSchema>;
20
20
  export type CaffeinateMode = z.infer<typeof caffeinateModeSchema>;
21
+ export type CdpHealth = z.infer<typeof cdpHealthSchema>;
21
22
  export type AutomationLastRunStatus = z.infer<typeof automationLastRunStatusSchema>;
22
23
  export type AutomationLastRun = z.infer<typeof automationLastRunSchema>;
23
24
  export type AutomationSchedule = z.infer<typeof automationScheduleSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class TerminalModeState {
2
+ private readonly enabledModes;
3
+ private cursorHidden;
4
+ update(data: string): void;
5
+ restorePrefix(): string;
6
+ }
7
+ //# sourceMappingURL=terminal-mode-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-mode-state.d.ts","sourceRoot":"","sources":["../../src/utils/terminal-mode-state.ts"],"names":[],"mappings":"AAgCA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,YAAY,CAAS;IAE7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiB1B,aAAa,IAAI,MAAM;CAQxB"}
@@ -0,0 +1,58 @@
1
+ // Tracks the live state of the terminal private modes that a scrollback replay
2
+ // must re-establish for a switched-to TUI to behave correctly. The replay ring
3
+ // buffer holds only the last ~256KB of raw PTY bytes, so a long-running TUI's
4
+ // mode-set sequences (alt-screen enter, mouse enable, bracketed paste) often
5
+ // scroll out of the window — replaying the bytes into a fresh xterm.js after a
6
+ // reset then leaves the terminal in the normal buffer with no mouse, and the
7
+ // wheel scrolls xterm's scrollback instead of the TUI. snapshotScrollback()
8
+ // prepends a restore prefix built from this tracker so xterm starts in the
9
+ // PTY's current mode state before the replayed content lands.
10
+ //
11
+ // Scope is deliberately narrow: only the modes that change how the replay
12
+ // renders or routes input. Synchronized-output mode (2026) is intentionally
13
+ // excluded — restoring it risks leaving xterm in a buffered state if the
14
+ // snapshot was taken mid-redraw (a `?2026h` whose matching `?2026l` is outside
15
+ // the window), freezing the screen. Kitty keyboard is a push/pop stack, not a
16
+ // simple toggle, and is left to the replay bytes. Cursor visibility (25) is
17
+ // tracked as a hide flag so a TUI that hid the cursor can restore the hide
18
+ // over the client's default `?25h`.
19
+ const ESC = "\x1b";
20
+ const RESTORABLE_PRIVATE_MODES = new Set([
21
+ 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1015, 1047, 1048, 1049, 2004,
22
+ ]);
23
+ const DECRQM_PATTERN = /\x1b\[\?(\d+)([hl])/g;
24
+ const sortedRestorableModes = (modes) => Array.from(modes)
25
+ .filter((mode) => RESTORABLE_PRIVATE_MODES.has(mode))
26
+ .sort((a, b) => a - b);
27
+ export class TerminalModeState {
28
+ enabledModes = new Set();
29
+ cursorHidden = false;
30
+ update(data) {
31
+ DECRQM_PATTERN.lastIndex = 0;
32
+ let match = DECRQM_PATTERN.exec(data);
33
+ while (match !== null) {
34
+ const mode = Number.parseInt(match[1], 10);
35
+ const action = match[2];
36
+ if (mode === 25) {
37
+ this.cursorHidden = action === "l";
38
+ }
39
+ else if (action === "h") {
40
+ this.enabledModes.add(mode);
41
+ }
42
+ else {
43
+ this.enabledModes.delete(mode);
44
+ }
45
+ match = DECRQM_PATTERN.exec(data);
46
+ }
47
+ }
48
+ restorePrefix() {
49
+ const parts = [];
50
+ for (const mode of sortedRestorableModes(this.enabledModes)) {
51
+ parts.push(`${ESC}[?${mode}h`);
52
+ }
53
+ if (this.cursorHidden)
54
+ parts.push(`${ESC}[?25l`);
55
+ return parts.join("");
56
+ }
57
+ }
58
+ //# sourceMappingURL=terminal-mode-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-mode-state.js","sourceRoot":"","sources":["../../src/utils/terminal-mode-state.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,oCAAoC;AAEpC,MAAM,GAAG,GAAG,MAAM,CAAC;AAEnB,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC7E,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,MAAM,qBAAqB,GAAG,CAAC,KAAkB,EAAY,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;KACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3B,MAAM,OAAO,iBAAiB;IACX,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,YAAY,GAAG,KAAK,CAAC;IAE7B,MAAM,CAAC,IAAY;QACjB,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,YAAY,GAAG,MAAM,KAAK,GAAG,CAAC;YACrC,CAAC;iBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,aAAa;QACX,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ declare class TerminalQueryResponder {
2
+ private da1Response;
3
+ private da2Response;
4
+ interceptRequest: (data: string) => {
5
+ passthrough: string;
6
+ responses: string[];
7
+ };
8
+ captureResponse: (data: string) => void;
9
+ reset: () => void;
10
+ }
11
+ declare const terminalQueryResponder: TerminalQueryResponder;
12
+ export { TerminalQueryResponder, terminalQueryResponder };
13
+ //# sourceMappingURL=terminal-query-responder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-query-responder.d.ts","sourceRoot":"","sources":["../../src/utils/terminal-query-responder.ts"],"names":[],"mappings":"AA4CA,cAAM,sBAAsB;IAO1B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAS1C,gBAAgB,GAAI,MAAM,MAAM,KAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAa7E;IAOF,eAAe,GAAI,MAAM,MAAM,KAAG,IAAI,CASpC;IAIF,KAAK,QAAO,IAAI,CAGd;CACH;AAED,QAAA,MAAM,sBAAsB,wBAA+B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,100 @@
1
+ // Answers the stateless terminal identity queries (DA1, DA2) server-side so the
2
+ // probing program gets an instant in-process response instead of waiting on
3
+ // the remote round-trip to xterm.js.
4
+ //
5
+ // Why: a terminal identity query is a synchronous, in-process protocol. In a
6
+ // real terminal the program writes `CSI c` (DA1) and the same process reads the
7
+ // response (`CSI ? 62;4;9;22c`) off the PTY master microseconds later. In
8
+ // localterm the terminal emulator is across a WebSocket, so the response must
9
+ // travel PTY -> server -> xterm.js (parsed asynchronously via setTimeout) ->
10
+ // server -> PTY — reliably tens of ms. A probing program that issues the query
11
+ // with a short read timeout (a prompt plugin) or that exits before the
12
+ // response arrives (neovim re-probing DA1 on a resize-driven SIGWINCH, then
13
+ // `:q`) gives up before the slow response lands, so the response is orphaned in
14
+ // the PTY stdin and the next reader treats it as typed text — `62;4;9;22c`
15
+ // leaking into the shell. Latency tuning can't win this race reliably (every
16
+ // program's timeout differs), so the fix is to answer in the same process that
17
+ // holds the PTY, the tmux/mosh model: nothing round-trips to xterm at all.
18
+ //
19
+ // Scope is deliberately a fixed, standard, stateless family: DA1 (`CSI [Ps] c`
20
+ // -> `CSI ? ... c`) and DA2 (`CSI > [Ps] c` -> `CSI > ... c`). Their responses
21
+ // depend only on terminal identity (fixed for a given xterm build), not on
22
+ // modes or colors, so a once-captured response is correct forever. DA3
23
+ // (`CSI = c`) is intentionally NOT handled: xterm.js does not answer it, so
24
+ // there is no response to orphan and nothing to replay — intercepting it would
25
+ // be dead code. Stateful queries (DECRQM mode reports, OSC color) are also out
26
+ // of scope: their responses depend on live state, answering them server-side
27
+ // would mean tracking that state, and the replay-suppression + sync-flush
28
+ // fixes already keep them from leaking in the observed paths.
29
+ //
30
+ // This is NOT the rejected server-side stripper. The stripper rewrote the
31
+ // scrollback replay to drop an open-ended set of query variants — unbounded
32
+ // (every variant enumerated) and lossy. This responder intercepts a fixed
33
+ // set of live queries with unambiguous CSI finals (final `c`, intermediate
34
+ // none = DA1 / `>` = DA2 — no other sequence has these shapes), removes exactly
35
+ // those bytes from the output so xterm never sees the request and never
36
+ // responds, and writes the cached response straight to the PTY. A request
37
+ // split across PTY chunks simply isn't matched (DA queries are single small
38
+ // writes, one per chunk), so it passes through unchanged — no corruption.
39
+ const DA_REQUEST = /\x1b\[(>?)0?c/g;
40
+ const DA1_RESPONSE = /\x1b\[\?\d+(?:;\d+)*c/;
41
+ const DA2_RESPONSE = /\x1b\[>\d+(?:;\d+)*c/;
42
+ class TerminalQueryResponder {
43
+ // xterm.js's responses, captured the first time xterm answers each query
44
+ // (before the cache is warm the request round-trips to xterm as it does
45
+ // today — the round-trip is fine on a fresh spawn where the shell reads
46
+ // patiently; the leak only happens at the switch/exit moments where the cache
47
+ // is already warm). Once captured, every subsequent probe across every PTY
48
+ // is answered instantly from here.
49
+ da1Response = null;
50
+ da2Response = null;
51
+ // Scan PTY output for DA1/DA2 requests. Returns the output with matched
52
+ // requests removed (so xterm never sees them and never responds) plus the
53
+ // cached responses to write straight to the PTY, in order. When a cache is
54
+ // cold the request is left in the output to round-trip to xterm (whose
55
+ // response is then captured via captureResponse) — so the first probe ever
56
+ // behaves exactly as it does today, and only subsequent probes are answered
57
+ // here.
58
+ interceptRequest = (data) => {
59
+ const responses = [];
60
+ const passthrough = data.replace(DA_REQUEST, (match, intermediate) => {
61
+ if (intermediate === ">") {
62
+ if (this.da2Response === null)
63
+ return match;
64
+ responses.push(this.da2Response);
65
+ return "";
66
+ }
67
+ if (this.da1Response === null)
68
+ return match;
69
+ responses.push(this.da1Response);
70
+ return "";
71
+ });
72
+ return { passthrough, responses };
73
+ };
74
+ // Scan xterm's input (its query responses) for DA1/DA2 and cache the first
75
+ // seen of each. Non-destructive: it only reads. Called on every input frame,
76
+ // so the scan is a cheap regex against a short string (a DA response is under
77
+ // 30 bytes and arrives alone in its own input message — xterm emits query
78
+ // responses as separate onData events from keystrokes).
79
+ captureResponse = (data) => {
80
+ if (this.da1Response === null) {
81
+ const da1 = data.match(DA1_RESPONSE);
82
+ if (da1)
83
+ this.da1Response = da1[0];
84
+ }
85
+ if (this.da2Response === null) {
86
+ const da2 = data.match(DA2_RESPONSE);
87
+ if (da2)
88
+ this.da2Response = da2[0];
89
+ }
90
+ };
91
+ // Test-only: reset the cache between cases so the process-global singleton
92
+ // doesn't leak state across tests.
93
+ reset = () => {
94
+ this.da1Response = null;
95
+ this.da2Response = null;
96
+ };
97
+ }
98
+ const terminalQueryResponder = new TerminalQueryResponder();
99
+ export { TerminalQueryResponder, terminalQueryResponder };
100
+ //# sourceMappingURL=terminal-query-responder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-query-responder.js","sourceRoot":"","sources":["../../src/utils/terminal-query-responder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monotykamary/localterm-server",
3
- "version": "2.16.5",
3
+ "version": "2.17.1",
4
4
  "description": "PTY-backed HTTP/WebSocket server that powers localterm, built on Hono + node-pty.",
5
5
  "keywords": [
6
6
  "hono",