@love-moon/tui-driver 0.2.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.
Files changed (113) hide show
  1. package/README.md +142 -0
  2. package/dist/driver/StateMachine.d.ts +28 -0
  3. package/dist/driver/StateMachine.d.ts.map +1 -0
  4. package/dist/driver/StateMachine.js +56 -0
  5. package/dist/driver/StateMachine.js.map +1 -0
  6. package/dist/driver/TuiDriver.d.ts +73 -0
  7. package/dist/driver/TuiDriver.d.ts.map +1 -0
  8. package/dist/driver/TuiDriver.js +506 -0
  9. package/dist/driver/TuiDriver.js.map +1 -0
  10. package/dist/driver/TuiProfile.d.ts +59 -0
  11. package/dist/driver/TuiProfile.d.ts.map +1 -0
  12. package/dist/driver/TuiProfile.js +13 -0
  13. package/dist/driver/TuiProfile.js.map +1 -0
  14. package/dist/driver/index.d.ts +5 -0
  15. package/dist/driver/index.d.ts.map +1 -0
  16. package/dist/driver/index.js +13 -0
  17. package/dist/driver/index.js.map +1 -0
  18. package/dist/driver/profiles/claudeCode.profile.d.ts +4 -0
  19. package/dist/driver/profiles/claudeCode.profile.d.ts.map +1 -0
  20. package/dist/driver/profiles/claudeCode.profile.js +91 -0
  21. package/dist/driver/profiles/claudeCode.profile.js.map +1 -0
  22. package/dist/driver/profiles/codex.profile.d.ts +4 -0
  23. package/dist/driver/profiles/codex.profile.d.ts.map +1 -0
  24. package/dist/driver/profiles/codex.profile.js +82 -0
  25. package/dist/driver/profiles/codex.profile.js.map +1 -0
  26. package/dist/driver/profiles/index.d.ts +3 -0
  27. package/dist/driver/profiles/index.d.ts.map +1 -0
  28. package/dist/driver/profiles/index.js +8 -0
  29. package/dist/driver/profiles/index.js.map +1 -0
  30. package/dist/example.d.ts +2 -0
  31. package/dist/example.d.ts.map +1 -0
  32. package/dist/example.js +43 -0
  33. package/dist/example.js.map +1 -0
  34. package/dist/expect/ExpectEngine.d.ts +34 -0
  35. package/dist/expect/ExpectEngine.d.ts.map +1 -0
  36. package/dist/expect/ExpectEngine.js +121 -0
  37. package/dist/expect/ExpectEngine.js.map +1 -0
  38. package/dist/expect/Matchers.d.ts +24 -0
  39. package/dist/expect/Matchers.d.ts.map +1 -0
  40. package/dist/expect/Matchers.js +71 -0
  41. package/dist/expect/Matchers.js.map +1 -0
  42. package/dist/expect/index.d.ts +3 -0
  43. package/dist/expect/index.d.ts.map +1 -0
  44. package/dist/expect/index.js +8 -0
  45. package/dist/expect/index.js.map +1 -0
  46. package/dist/extract/Diff.d.ts +10 -0
  47. package/dist/extract/Diff.d.ts.map +1 -0
  48. package/dist/extract/Diff.js +44 -0
  49. package/dist/extract/Diff.js.map +1 -0
  50. package/dist/extract/OutputExtractor.d.ts +16 -0
  51. package/dist/extract/OutputExtractor.d.ts.map +1 -0
  52. package/dist/extract/OutputExtractor.js +71 -0
  53. package/dist/extract/OutputExtractor.js.map +1 -0
  54. package/dist/extract/index.d.ts +3 -0
  55. package/dist/extract/index.d.ts.map +1 -0
  56. package/dist/extract/index.js +11 -0
  57. package/dist/extract/index.js.map +1 -0
  58. package/dist/index.d.ts +11 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +50 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/pty/PtySession.d.ts +38 -0
  63. package/dist/pty/PtySession.d.ts.map +1 -0
  64. package/dist/pty/PtySession.js +231 -0
  65. package/dist/pty/PtySession.js.map +1 -0
  66. package/dist/pty/index.d.ts +2 -0
  67. package/dist/pty/index.d.ts.map +1 -0
  68. package/dist/pty/index.js +6 -0
  69. package/dist/pty/index.js.map +1 -0
  70. package/dist/term/HeadlessScreen.d.ts +29 -0
  71. package/dist/term/HeadlessScreen.d.ts.map +1 -0
  72. package/dist/term/HeadlessScreen.js +126 -0
  73. package/dist/term/HeadlessScreen.js.map +1 -0
  74. package/dist/term/ScreenSnapshot.d.ts +37 -0
  75. package/dist/term/ScreenSnapshot.d.ts.map +1 -0
  76. package/dist/term/ScreenSnapshot.js +68 -0
  77. package/dist/term/ScreenSnapshot.js.map +1 -0
  78. package/dist/term/index.d.ts +3 -0
  79. package/dist/term/index.d.ts.map +1 -0
  80. package/dist/term/index.js +8 -0
  81. package/dist/term/index.js.map +1 -0
  82. package/docs/tui-driver_implementation_plan.md +307 -0
  83. package/package.json +33 -0
  84. package/pnpm-workspace.yaml +1 -0
  85. package/src/driver/StateMachine.ts +90 -0
  86. package/src/driver/TuiDriver.ts +624 -0
  87. package/src/driver/TuiProfile.ts +72 -0
  88. package/src/driver/index.ts +4 -0
  89. package/src/driver/profiles/claudeCode.profile.ts +96 -0
  90. package/src/driver/profiles/codex.profile.ts +87 -0
  91. package/src/driver/profiles/index.ts +2 -0
  92. package/src/example.ts +45 -0
  93. package/src/expect/ExpectEngine.ts +171 -0
  94. package/src/expect/Matchers.ts +92 -0
  95. package/src/expect/index.ts +2 -0
  96. package/src/extract/Diff.ts +51 -0
  97. package/src/extract/OutputExtractor.ts +88 -0
  98. package/src/extract/index.ts +2 -0
  99. package/src/index.ts +67 -0
  100. package/src/pty/PtySession.ts +234 -0
  101. package/src/pty/index.ts +1 -0
  102. package/src/term/HeadlessScreen.ts +151 -0
  103. package/src/term/ScreenSnapshot.ts +89 -0
  104. package/src/term/index.ts +2 -0
  105. package/test/claude-profile.test.ts +11 -0
  106. package/test/codex-profile.test.ts +108 -0
  107. package/test/debug-claude.ts +51 -0
  108. package/test/integration.ts +174 -0
  109. package/test/output-extractor.test.ts +49 -0
  110. package/test/state-diff.test.ts +120 -0
  111. package/test/unit.test.ts +136 -0
  112. package/tsconfig.json +20 -0
  113. package/vitest.config.ts +13 -0
@@ -0,0 +1,16 @@
1
+ import { ScreenSnapshot } from "../term/ScreenSnapshot.js";
2
+ import { TuiExtraction } from "../driver/TuiProfile.js";
3
+ export interface ExtractionResult {
4
+ text: string;
5
+ rawText: string;
6
+ linesAdded: number;
7
+ }
8
+ export declare class OutputExtractor {
9
+ private extraction;
10
+ constructor(extraction: TuiExtraction);
11
+ extract(before: ScreenSnapshot, after: ScreenSnapshot): ExtractionResult;
12
+ private extractFromViewport;
13
+ private extractFromScrollback;
14
+ private cleanText;
15
+ }
16
+ //# sourceMappingURL=OutputExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputExtractor.d.ts","sourceRoot":"","sources":["../../src/extract/OutputExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,aAAa;IAE7C,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,gBAAgB;IAkBxE,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,SAAS;CA2ClB"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputExtractor = void 0;
4
+ const Diff_js_1 = require("./Diff.js");
5
+ class OutputExtractor {
6
+ extraction;
7
+ constructor(extraction) {
8
+ this.extraction = extraction;
9
+ }
10
+ extract(before, after) {
11
+ let rawText;
12
+ if (this.extraction.mode === "diff-viewport") {
13
+ rawText = this.extractFromViewport(before, after);
14
+ }
15
+ else {
16
+ rawText = this.extractFromScrollback(before, after);
17
+ }
18
+ const text = this.cleanText(rawText);
19
+ return {
20
+ text,
21
+ rawText,
22
+ linesAdded: text.split("\n").length,
23
+ };
24
+ }
25
+ extractFromViewport(before, after) {
26
+ const bottomLines = this.extraction.bottomUiLines ?? 3;
27
+ const afterText = after.getViewportWithoutBottom(bottomLines);
28
+ const beforeText = before.getViewportWithoutBottom(bottomLines);
29
+ return (0, Diff_js_1.getAddedText)(beforeText, afterText);
30
+ }
31
+ extractFromScrollback(before, after) {
32
+ const { added } = (0, Diff_js_1.computeLineDiff)(before.scrollbackText, after.scrollbackText);
33
+ return added.join("\n");
34
+ }
35
+ cleanText(text) {
36
+ let result = text;
37
+ const includeLinePatterns = this.extraction.includeLinePatterns;
38
+ const stopLinePatterns = this.extraction.stopLinePatterns ?? [];
39
+ if (includeLinePatterns && includeLinePatterns.length > 0) {
40
+ const lines = result.split("\n");
41
+ const kept = [];
42
+ let including = false;
43
+ for (const line of lines) {
44
+ if (includeLinePatterns.some(pattern => pattern.test(line))) {
45
+ including = true;
46
+ kept.push(line);
47
+ continue;
48
+ }
49
+ if (including && stopLinePatterns.some(pattern => pattern.test(line))) {
50
+ including = false;
51
+ continue;
52
+ }
53
+ if (including) {
54
+ kept.push(line);
55
+ }
56
+ }
57
+ result = kept.join("\n");
58
+ }
59
+ for (const pattern of this.extraction.stripPatterns) {
60
+ result = result.replace(pattern, "");
61
+ }
62
+ result = result
63
+ .split("\n")
64
+ .map(line => line.trimEnd())
65
+ .join("\n");
66
+ result = result.replace(/\n{3,}/g, "\n\n");
67
+ return result.trim();
68
+ }
69
+ }
70
+ exports.OutputExtractor = OutputExtractor;
71
+ //# sourceMappingURL=OutputExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputExtractor.js","sourceRoot":"","sources":["../../src/extract/OutputExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { OutputExtractor, ExtractionResult } from "./OutputExtractor.js";
2
+ export { computeLineDiff, computeCharDiff, getAddedText, getRemovedText, DiffResult } from "./Diff.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extract/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRemovedText = exports.getAddedText = exports.computeCharDiff = exports.computeLineDiff = exports.OutputExtractor = void 0;
4
+ var OutputExtractor_js_1 = require("./OutputExtractor.js");
5
+ Object.defineProperty(exports, "OutputExtractor", { enumerable: true, get: function () { return OutputExtractor_js_1.OutputExtractor; } });
6
+ var Diff_js_1 = require("./Diff.js");
7
+ Object.defineProperty(exports, "computeLineDiff", { enumerable: true, get: function () { return Diff_js_1.computeLineDiff; } });
8
+ Object.defineProperty(exports, "computeCharDiff", { enumerable: true, get: function () { return Diff_js_1.computeCharDiff; } });
9
+ Object.defineProperty(exports, "getAddedText", { enumerable: true, get: function () { return Diff_js_1.getAddedText; } });
10
+ Object.defineProperty(exports, "getRemovedText", { enumerable: true, get: function () { return Diff_js_1.getRemovedText; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extract/index.ts"],"names":[],"mappings":";;;AAAA,2DAAyE;AAAhE,qHAAA,eAAe,OAAA;AACxB,qCAAuG;AAA9F,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,yGAAA,cAAc,OAAA"}
@@ -0,0 +1,11 @@
1
+ export { PtySession, PtySessionOptions } from "./pty/index.js";
2
+ export { HeadlessScreen, HeadlessScreenOptions } from "./term/index.js";
3
+ export { ScreenSnapshot, ScreenSnapshotData } from "./term/index.js";
4
+ export { ExpectEngine, UntilOptions, IdleOptions, ExpectResult } from "./expect/index.js";
5
+ export { Matchers, MatcherFn } from "./expect/index.js";
6
+ export { TuiDriver, TuiDriverOptions, AskResult, TuiProfile, TuiProfileName, TuiAnchors, TuiKeys, TuiExtraction, createProfile, StateMachine, TuiState, StateTransition, claudeCodeProfile, codexProfile, TuiSignals, TuiScreenSignals, } from "./driver/index.js";
7
+ export { OutputExtractor, ExtractionResult, computeLineDiff, computeCharDiff, getAddedText, getRemovedText, DiffResult, } from "./extract/index.js";
8
+ import { TuiDriver, TuiDriverOptions } from "./driver/index.js";
9
+ import { TuiProfileName } from "./driver/index.js";
10
+ export declare function createDriver(profileName: TuiProfileName, options?: Partial<Omit<TuiDriverOptions, "profile">>): TuiDriver;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAE/D,wBAAgB,YAAY,CAC1B,WAAW,EAAE,cAAc,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GACnD,SAAS,CAgBX"}
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRemovedText = exports.getAddedText = exports.computeCharDiff = exports.computeLineDiff = exports.OutputExtractor = exports.codexProfile = exports.claudeCodeProfile = exports.StateMachine = exports.createProfile = exports.TuiDriver = exports.Matchers = exports.ExpectEngine = exports.ScreenSnapshot = exports.HeadlessScreen = exports.PtySession = void 0;
4
+ exports.createDriver = createDriver;
5
+ // PTY Session
6
+ var index_js_1 = require("./pty/index.js");
7
+ Object.defineProperty(exports, "PtySession", { enumerable: true, get: function () { return index_js_1.PtySession; } });
8
+ // Terminal / Screen
9
+ var index_js_2 = require("./term/index.js");
10
+ Object.defineProperty(exports, "HeadlessScreen", { enumerable: true, get: function () { return index_js_2.HeadlessScreen; } });
11
+ var index_js_3 = require("./term/index.js");
12
+ Object.defineProperty(exports, "ScreenSnapshot", { enumerable: true, get: function () { return index_js_3.ScreenSnapshot; } });
13
+ // Expect Engine
14
+ var index_js_4 = require("./expect/index.js");
15
+ Object.defineProperty(exports, "ExpectEngine", { enumerable: true, get: function () { return index_js_4.ExpectEngine; } });
16
+ var index_js_5 = require("./expect/index.js");
17
+ Object.defineProperty(exports, "Matchers", { enumerable: true, get: function () { return index_js_5.Matchers; } });
18
+ // Driver
19
+ var index_js_6 = require("./driver/index.js");
20
+ Object.defineProperty(exports, "TuiDriver", { enumerable: true, get: function () { return index_js_6.TuiDriver; } });
21
+ Object.defineProperty(exports, "createProfile", { enumerable: true, get: function () { return index_js_6.createProfile; } });
22
+ Object.defineProperty(exports, "StateMachine", { enumerable: true, get: function () { return index_js_6.StateMachine; } });
23
+ Object.defineProperty(exports, "claudeCodeProfile", { enumerable: true, get: function () { return index_js_6.claudeCodeProfile; } });
24
+ Object.defineProperty(exports, "codexProfile", { enumerable: true, get: function () { return index_js_6.codexProfile; } });
25
+ // Extract
26
+ var index_js_7 = require("./extract/index.js");
27
+ Object.defineProperty(exports, "OutputExtractor", { enumerable: true, get: function () { return index_js_7.OutputExtractor; } });
28
+ Object.defineProperty(exports, "computeLineDiff", { enumerable: true, get: function () { return index_js_7.computeLineDiff; } });
29
+ Object.defineProperty(exports, "computeCharDiff", { enumerable: true, get: function () { return index_js_7.computeCharDiff; } });
30
+ Object.defineProperty(exports, "getAddedText", { enumerable: true, get: function () { return index_js_7.getAddedText; } });
31
+ Object.defineProperty(exports, "getRemovedText", { enumerable: true, get: function () { return index_js_7.getRemovedText; } });
32
+ // Convenience factory function
33
+ const index_js_8 = require("./driver/index.js");
34
+ const index_js_9 = require("./driver/index.js");
35
+ function createDriver(profileName, options) {
36
+ const baseProfile = profileName === "claude-code" ? index_js_9.claudeCodeProfile : index_js_9.codexProfile;
37
+ // Merge current process.env with profile env
38
+ const profile = {
39
+ ...baseProfile,
40
+ env: {
41
+ ...process.env,
42
+ ...baseProfile.env,
43
+ },
44
+ };
45
+ return new index_js_8.TuiDriver({
46
+ profile,
47
+ ...options,
48
+ });
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA+CA,oCAmBC;AAlED,cAAc;AACd,2CAA+D;AAAtD,sGAAA,UAAU,OAAA;AAEnB,oBAAoB;AACpB,4CAAwE;AAA/D,0GAAA,cAAc,OAAA;AACvB,4CAAqE;AAA5D,0GAAA,cAAc,OAAA;AAEvB,gBAAgB;AAChB,8CAA0F;AAAjF,wGAAA,YAAY,OAAA;AACrB,8CAAwD;AAA/C,oGAAA,QAAQ,OAAA;AAEjB,SAAS;AACT,8CAiB2B;AAhBzB,qGAAA,SAAS,OAAA;AAQT,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AAGZ,6GAAA,iBAAiB,OAAA;AACjB,wGAAA,YAAY,OAAA;AAKd,UAAU;AACV,+CAQ4B;AAP1B,2GAAA,eAAe,OAAA;AAEf,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AAIhB,+BAA+B;AAC/B,gDAAgE;AAChE,gDAAoE;AAGpE,SAAgB,YAAY,CAC1B,WAA2B,EAC3B,OAAoD;IAEpD,MAAM,WAAW,GAAG,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC,4BAAiB,CAAC,CAAC,CAAC,uBAAY,CAAC;IAErF,6CAA6C;IAC7C,MAAM,OAAO,GAAe;QAC1B,GAAG,WAAW;QACd,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAA6B;YACxC,GAAG,WAAW,CAAC,GAAG;SACnB;KACF,CAAC;IAEF,OAAO,IAAI,oBAAS,CAAC;QACnB,OAAO;QACP,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { EventEmitter } from "events";
2
+ export interface PtySessionOptions {
3
+ cols?: number;
4
+ rows?: number;
5
+ env?: Record<string, string>;
6
+ cwd?: string;
7
+ }
8
+ export interface PtySessionEvents {
9
+ data: (chunk: string) => void;
10
+ exit: (code: number, signal?: number) => void;
11
+ error: (err: Error) => void;
12
+ }
13
+ export declare class PtySession extends EventEmitter {
14
+ private command;
15
+ private args;
16
+ private options;
17
+ private ptyProcess;
18
+ private _cols;
19
+ private _rows;
20
+ private _isRunning;
21
+ constructor(command: string, args?: string[], options?: PtySessionOptions);
22
+ get cols(): number;
23
+ get rows(): number;
24
+ get isRunning(): boolean;
25
+ get pid(): number | undefined;
26
+ spawn(): void;
27
+ write(data: string): void;
28
+ writeResponse(data: string): void;
29
+ writeChunked(data: string, chunkSize?: number, delayMs?: number): Promise<void>;
30
+ resize(cols: number, rows: number): void;
31
+ kill(signal?: string): void;
32
+ sendKey(key: string): void;
33
+ sendKeys(keys: string[], delayMs?: number): Promise<void>;
34
+ private sleep;
35
+ onData(callback: (chunk: string) => void): void;
36
+ onExit(callback: (code: number, signal?: number) => void): void;
37
+ }
38
+ //# sourceMappingURL=PtySession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PtySession.d.ts","sourceRoot":"","sources":["../../src/pty/PtySession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7B;AA4DD,qBAAa,UAAW,SAAQ,YAAY;IAOxC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;gBAGjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,iBAAsB;IAOzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,KAAK,IAAI,IAAI;IAmCb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,SAAS,SAAM,EACf,OAAO,SAAK,GACX,OAAO,CAAC,IAAI,CAAC;IAUhB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IASxC,IAAI,CAAC,MAAM,GAAE,MAAkB,GAAG,IAAI;IAQtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAyB1B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrD,OAAO,CAAC,KAAK;IAIb,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI/C,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CAGhE"}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.PtySession = void 0;
40
+ const pty = __importStar(require("node-pty"));
41
+ const events_1 = require("events");
42
+ const node_fs_1 = __importDefault(require("node:fs"));
43
+ const node_path_1 = __importDefault(require("node:path"));
44
+ const DEFAULT_COLS = 120;
45
+ const DEFAULT_ROWS = 40;
46
+ let helperPermissionChecked = false;
47
+ function locateSpawnHelperPath() {
48
+ if (process.platform === "win32") {
49
+ return null;
50
+ }
51
+ try {
52
+ const unixTerminalPath = require.resolve("node-pty/lib/unixTerminal.js");
53
+ const libDir = node_path_1.default.dirname(unixTerminalPath);
54
+ const platformDir = `${process.platform}-${process.arch}`;
55
+ const candidates = [
56
+ node_path_1.default.resolve(libDir, "../build/Release/spawn-helper"),
57
+ node_path_1.default.resolve(libDir, "../build/Debug/spawn-helper"),
58
+ node_path_1.default.resolve(libDir, `../prebuilds/${platformDir}/spawn-helper`),
59
+ node_path_1.default.resolve(libDir, "./build/Release/spawn-helper"),
60
+ node_path_1.default.resolve(libDir, "./build/Debug/spawn-helper"),
61
+ node_path_1.default.resolve(libDir, `./prebuilds/${platformDir}/spawn-helper`),
62
+ ];
63
+ for (const candidate of candidates) {
64
+ if (node_fs_1.default.existsSync(candidate)) {
65
+ return candidate;
66
+ }
67
+ }
68
+ }
69
+ catch {
70
+ // best effort
71
+ }
72
+ return null;
73
+ }
74
+ function ensureSpawnHelperExecutable() {
75
+ if (helperPermissionChecked) {
76
+ return;
77
+ }
78
+ helperPermissionChecked = true;
79
+ const helperPath = locateSpawnHelperPath();
80
+ if (!helperPath) {
81
+ return;
82
+ }
83
+ try {
84
+ node_fs_1.default.accessSync(helperPath, node_fs_1.default.constants.X_OK);
85
+ }
86
+ catch {
87
+ try {
88
+ const stat = node_fs_1.default.statSync(helperPath);
89
+ node_fs_1.default.chmodSync(helperPath, stat.mode | 0o111);
90
+ }
91
+ catch {
92
+ // best effort
93
+ }
94
+ }
95
+ }
96
+ class PtySession extends events_1.EventEmitter {
97
+ command;
98
+ args;
99
+ options;
100
+ ptyProcess = null;
101
+ _cols;
102
+ _rows;
103
+ _isRunning = false;
104
+ constructor(command, args = [], options = {}) {
105
+ super();
106
+ this.command = command;
107
+ this.args = args;
108
+ this.options = options;
109
+ this._cols = options.cols ?? DEFAULT_COLS;
110
+ this._rows = options.rows ?? DEFAULT_ROWS;
111
+ }
112
+ get cols() {
113
+ return this._cols;
114
+ }
115
+ get rows() {
116
+ return this._rows;
117
+ }
118
+ get isRunning() {
119
+ return this._isRunning;
120
+ }
121
+ get pid() {
122
+ return this.ptyProcess?.pid;
123
+ }
124
+ spawn() {
125
+ if (this.ptyProcess) {
126
+ throw new Error("PTY session already spawned");
127
+ }
128
+ ensureSpawnHelperExecutable();
129
+ const env = {
130
+ ...process.env,
131
+ TERM: "xterm-256color",
132
+ LANG: "en_US.UTF-8",
133
+ LC_ALL: "en_US.UTF-8",
134
+ ...this.options.env,
135
+ };
136
+ this.ptyProcess = pty.spawn(this.command, this.args, {
137
+ name: "xterm-256color",
138
+ cols: this._cols,
139
+ rows: this._rows,
140
+ cwd: this.options.cwd ?? process.cwd(),
141
+ env,
142
+ });
143
+ this._isRunning = true;
144
+ this.ptyProcess.onData((data) => {
145
+ this.emit("data", data);
146
+ });
147
+ this.ptyProcess.onExit(({ exitCode, signal }) => {
148
+ this._isRunning = false;
149
+ this.emit("exit", exitCode, signal);
150
+ });
151
+ }
152
+ write(data) {
153
+ if (!this.ptyProcess) {
154
+ throw new Error("PTY session not spawned");
155
+ }
156
+ this.ptyProcess.write(data);
157
+ }
158
+ writeResponse(data) {
159
+ this.write(data);
160
+ }
161
+ async writeChunked(data, chunkSize = 300, delayMs = 20) {
162
+ for (let i = 0; i < data.length; i += chunkSize) {
163
+ const chunk = data.slice(i, i + chunkSize);
164
+ this.write(chunk);
165
+ if (i + chunkSize < data.length) {
166
+ await this.sleep(delayMs);
167
+ }
168
+ }
169
+ }
170
+ resize(cols, rows) {
171
+ if (!this.ptyProcess) {
172
+ throw new Error("PTY session not spawned");
173
+ }
174
+ this._cols = cols;
175
+ this._rows = rows;
176
+ this.ptyProcess.resize(cols, rows);
177
+ }
178
+ kill(signal = "SIGTERM") {
179
+ if (this.ptyProcess) {
180
+ this.ptyProcess.kill(signal);
181
+ this.ptyProcess = null;
182
+ this._isRunning = false;
183
+ }
184
+ }
185
+ sendKey(key) {
186
+ const keyMap = {
187
+ ENTER: "\r",
188
+ CTRL_C: "\x03",
189
+ CTRL_D: "\x04",
190
+ CTRL_J: "\n",
191
+ CTRL_L: "\x0c",
192
+ CTRL_Z: "\x1a",
193
+ ESC: "\x1b",
194
+ TAB: "\t",
195
+ BACKSPACE: "\x7f",
196
+ UP: "\x1b[A",
197
+ DOWN: "\x1b[B",
198
+ RIGHT: "\x1b[C",
199
+ LEFT: "\x1b[D",
200
+ };
201
+ const mapped = keyMap[key.toUpperCase()];
202
+ if (mapped) {
203
+ this.write(mapped);
204
+ }
205
+ else {
206
+ this.write(key);
207
+ }
208
+ }
209
+ sendKeys(keys, delayMs = 50) {
210
+ return new Promise(async (resolve) => {
211
+ for (let i = 0; i < keys.length; i++) {
212
+ this.sendKey(keys[i]);
213
+ if (i < keys.length - 1) {
214
+ await this.sleep(delayMs);
215
+ }
216
+ }
217
+ resolve();
218
+ });
219
+ }
220
+ sleep(ms) {
221
+ return new Promise((resolve) => setTimeout(resolve, ms));
222
+ }
223
+ onData(callback) {
224
+ this.on("data", callback);
225
+ }
226
+ onExit(callback) {
227
+ this.on("exit", callback);
228
+ }
229
+ }
230
+ exports.PtySession = PtySession;
231
+ //# sourceMappingURL=PtySession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PtySession.js","sourceRoot":"","sources":["../../src/pty/PtySession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { PtySession, PtySessionOptions, PtySessionEvents } from "./PtySession.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PtySession = void 0;
4
+ var PtySession_js_1 = require("./PtySession.js");
5
+ Object.defineProperty(exports, "PtySession", { enumerable: true, get: function () { return PtySession_js_1.PtySession; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":";;;AAAA,iDAAkF;AAAzE,2GAAA,UAAU,OAAA"}
@@ -0,0 +1,29 @@
1
+ import { ScreenSnapshot } from "./ScreenSnapshot.js";
2
+ export interface HeadlessScreenOptions {
3
+ cols?: number;
4
+ rows?: number;
5
+ scrollback?: number;
6
+ onTerminalReply?: (data: string) => void;
7
+ }
8
+ export declare class HeadlessScreen {
9
+ private terminal;
10
+ private serializeAddon;
11
+ private _cols;
12
+ private _rows;
13
+ private onTerminalReply?;
14
+ constructor(options?: HeadlessScreenOptions);
15
+ get cols(): number;
16
+ get rows(): number;
17
+ write(data: string): void;
18
+ resize(cols: number, rows: number): void;
19
+ clear(): void;
20
+ reset(): void;
21
+ snapshot(): ScreenSnapshot;
22
+ private getViewportText;
23
+ private getScrollbackText;
24
+ private getCursor;
25
+ private getDsrReplies;
26
+ serialize(): string;
27
+ dispose(): void;
28
+ }
29
+ //# sourceMappingURL=HeadlessScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessScreen.d.ts","sourceRoot":"","sources":["../../src/term/HeadlessScreen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAC,CAAyB;gBAErC,OAAO,GAAE,qBAA0B;IAgB/C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMxC,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;IAIb,QAAQ,IAAI,cAAc;IAiB1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,aAAa;IAerB,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,IAAI;CAGhB"}