mstro-app 0.4.3 → 0.4.4

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 (306) hide show
  1. package/dist/server/cli/headless/claude-invoker-process.d.ts +11 -0
  2. package/dist/server/cli/headless/claude-invoker-process.d.ts.map +1 -0
  3. package/dist/server/cli/headless/claude-invoker-process.js +140 -0
  4. package/dist/server/cli/headless/claude-invoker-process.js.map +1 -0
  5. package/dist/server/cli/headless/claude-invoker-stall.d.ts +40 -0
  6. package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -0
  7. package/dist/server/cli/headless/claude-invoker-stall.js +98 -0
  8. package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -0
  9. package/dist/server/cli/headless/claude-invoker-stream.d.ts +44 -0
  10. package/dist/server/cli/headless/claude-invoker-stream.d.ts.map +1 -0
  11. package/dist/server/cli/headless/claude-invoker-stream.js +276 -0
  12. package/dist/server/cli/headless/claude-invoker-stream.js.map +1 -0
  13. package/dist/server/cli/headless/claude-invoker-tools.d.ts +21 -0
  14. package/dist/server/cli/headless/claude-invoker-tools.d.ts.map +1 -0
  15. package/dist/server/cli/headless/claude-invoker-tools.js +137 -0
  16. package/dist/server/cli/headless/claude-invoker-tools.js.map +1 -0
  17. package/dist/server/cli/headless/claude-invoker.d.ts +6 -4
  18. package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
  19. package/dist/server/cli/headless/claude-invoker.js +10 -807
  20. package/dist/server/cli/headless/claude-invoker.js.map +1 -1
  21. package/dist/server/cli/headless/haiku-assessments.d.ts +62 -0
  22. package/dist/server/cli/headless/haiku-assessments.d.ts.map +1 -0
  23. package/dist/server/cli/headless/haiku-assessments.js +281 -0
  24. package/dist/server/cli/headless/haiku-assessments.js.map +1 -0
  25. package/dist/server/cli/headless/headless-logger.d.ts +3 -2
  26. package/dist/server/cli/headless/headless-logger.d.ts.map +1 -1
  27. package/dist/server/cli/headless/headless-logger.js +28 -5
  28. package/dist/server/cli/headless/headless-logger.js.map +1 -1
  29. package/dist/server/cli/headless/native-timeout-detector.d.ts +44 -0
  30. package/dist/server/cli/headless/native-timeout-detector.d.ts.map +1 -0
  31. package/dist/server/cli/headless/native-timeout-detector.js +99 -0
  32. package/dist/server/cli/headless/native-timeout-detector.js.map +1 -0
  33. package/dist/server/cli/headless/stall-assessor.d.ts +2 -110
  34. package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
  35. package/dist/server/cli/headless/stall-assessor.js +65 -457
  36. package/dist/server/cli/headless/stall-assessor.js.map +1 -1
  37. package/dist/server/cli/improvisation-attachments.d.ts +21 -0
  38. package/dist/server/cli/improvisation-attachments.d.ts.map +1 -0
  39. package/dist/server/cli/improvisation-attachments.js +116 -0
  40. package/dist/server/cli/improvisation-attachments.js.map +1 -0
  41. package/dist/server/cli/improvisation-retry.d.ts +52 -0
  42. package/dist/server/cli/improvisation-retry.d.ts.map +1 -0
  43. package/dist/server/cli/improvisation-retry.js +434 -0
  44. package/dist/server/cli/improvisation-retry.js.map +1 -0
  45. package/dist/server/cli/improvisation-session-manager.d.ts +10 -266
  46. package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
  47. package/dist/server/cli/improvisation-session-manager.js +117 -1079
  48. package/dist/server/cli/improvisation-session-manager.js.map +1 -1
  49. package/dist/server/cli/improvisation-types.d.ts +86 -0
  50. package/dist/server/cli/improvisation-types.d.ts.map +1 -0
  51. package/dist/server/cli/improvisation-types.js +10 -0
  52. package/dist/server/cli/improvisation-types.js.map +1 -0
  53. package/dist/server/cli/prompt-builders.d.ts +68 -0
  54. package/dist/server/cli/prompt-builders.d.ts.map +1 -0
  55. package/dist/server/cli/prompt-builders.js +312 -0
  56. package/dist/server/cli/prompt-builders.js.map +1 -0
  57. package/dist/server/index.js +33 -212
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/mcp/bouncer-haiku.d.ts +10 -0
  60. package/dist/server/mcp/bouncer-haiku.d.ts.map +1 -0
  61. package/dist/server/mcp/bouncer-haiku.js +152 -0
  62. package/dist/server/mcp/bouncer-haiku.js.map +1 -0
  63. package/dist/server/mcp/bouncer-integration.d.ts +3 -4
  64. package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
  65. package/dist/server/mcp/bouncer-integration.js +50 -196
  66. package/dist/server/mcp/bouncer-integration.js.map +1 -1
  67. package/dist/server/mcp/security-analysis.d.ts +38 -0
  68. package/dist/server/mcp/security-analysis.d.ts.map +1 -0
  69. package/dist/server/mcp/security-analysis.js +183 -0
  70. package/dist/server/mcp/security-analysis.js.map +1 -0
  71. package/dist/server/mcp/security-audit.d.ts +1 -1
  72. package/dist/server/mcp/security-audit.d.ts.map +1 -1
  73. package/dist/server/mcp/security-patterns.d.ts +1 -25
  74. package/dist/server/mcp/security-patterns.d.ts.map +1 -1
  75. package/dist/server/mcp/security-patterns.js +55 -260
  76. package/dist/server/mcp/security-patterns.js.map +1 -1
  77. package/dist/server/server-setup.d.ts +22 -0
  78. package/dist/server/server-setup.d.ts.map +1 -0
  79. package/dist/server/server-setup.js +101 -0
  80. package/dist/server/server-setup.js.map +1 -0
  81. package/dist/server/services/file-explorer-ops.d.ts +24 -0
  82. package/dist/server/services/file-explorer-ops.d.ts.map +1 -0
  83. package/dist/server/services/file-explorer-ops.js +211 -0
  84. package/dist/server/services/file-explorer-ops.js.map +1 -0
  85. package/dist/server/services/files.d.ts +2 -85
  86. package/dist/server/services/files.d.ts.map +1 -1
  87. package/dist/server/services/files.js +7 -427
  88. package/dist/server/services/files.js.map +1 -1
  89. package/dist/server/services/plan/composer.d.ts.map +1 -1
  90. package/dist/server/services/plan/composer.js +2 -1
  91. package/dist/server/services/plan/composer.js.map +1 -1
  92. package/dist/server/services/plan/executor.d.ts.map +1 -1
  93. package/dist/server/services/plan/executor.js +3 -1
  94. package/dist/server/services/plan/executor.js.map +1 -1
  95. package/dist/server/services/plan/parser-core.d.ts +20 -0
  96. package/dist/server/services/plan/parser-core.d.ts.map +1 -0
  97. package/dist/server/services/plan/parser-core.js +350 -0
  98. package/dist/server/services/plan/parser-core.js.map +1 -0
  99. package/dist/server/services/plan/parser-migration.d.ts +5 -0
  100. package/dist/server/services/plan/parser-migration.d.ts.map +1 -0
  101. package/dist/server/services/plan/parser-migration.js +124 -0
  102. package/dist/server/services/plan/parser-migration.js.map +1 -0
  103. package/dist/server/services/plan/parser.d.ts +0 -8
  104. package/dist/server/services/plan/parser.d.ts.map +1 -1
  105. package/dist/server/services/plan/parser.js +50 -569
  106. package/dist/server/services/plan/parser.js.map +1 -1
  107. package/dist/server/services/plan/review-gate.d.ts +2 -0
  108. package/dist/server/services/plan/review-gate.d.ts.map +1 -1
  109. package/dist/server/services/plan/review-gate.js +2 -2
  110. package/dist/server/services/plan/review-gate.js.map +1 -1
  111. package/dist/server/services/plan/types.d.ts +2 -0
  112. package/dist/server/services/plan/types.d.ts.map +1 -1
  113. package/dist/server/services/platform-credentials.d.ts +24 -0
  114. package/dist/server/services/platform-credentials.d.ts.map +1 -0
  115. package/dist/server/services/platform-credentials.js +68 -0
  116. package/dist/server/services/platform-credentials.js.map +1 -0
  117. package/dist/server/services/platform.d.ts +1 -31
  118. package/dist/server/services/platform.d.ts.map +1 -1
  119. package/dist/server/services/platform.js +10 -119
  120. package/dist/server/services/platform.js.map +1 -1
  121. package/dist/server/services/terminal/pty-manager.d.ts +7 -97
  122. package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
  123. package/dist/server/services/terminal/pty-manager.js +53 -266
  124. package/dist/server/services/terminal/pty-manager.js.map +1 -1
  125. package/dist/server/services/terminal/pty-utils.d.ts +57 -0
  126. package/dist/server/services/terminal/pty-utils.d.ts.map +1 -0
  127. package/dist/server/services/terminal/pty-utils.js +141 -0
  128. package/dist/server/services/terminal/pty-utils.js.map +1 -0
  129. package/dist/server/services/websocket/file-definition-handlers.d.ts +4 -0
  130. package/dist/server/services/websocket/file-definition-handlers.d.ts.map +1 -0
  131. package/dist/server/services/websocket/file-definition-handlers.js +153 -0
  132. package/dist/server/services/websocket/file-definition-handlers.js.map +1 -0
  133. package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -1
  134. package/dist/server/services/websocket/file-explorer-handlers.js +52 -391
  135. package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
  136. package/dist/server/services/websocket/file-search-handlers.d.ts +5 -0
  137. package/dist/server/services/websocket/file-search-handlers.d.ts.map +1 -0
  138. package/dist/server/services/websocket/file-search-handlers.js +238 -0
  139. package/dist/server/services/websocket/file-search-handlers.js.map +1 -0
  140. package/dist/server/services/websocket/file-utils.js +3 -3
  141. package/dist/server/services/websocket/file-utils.js.map +1 -1
  142. package/dist/server/services/websocket/git-branch-handlers.d.ts +7 -0
  143. package/dist/server/services/websocket/git-branch-handlers.d.ts.map +1 -0
  144. package/dist/server/services/websocket/git-branch-handlers.js +110 -0
  145. package/dist/server/services/websocket/git-branch-handlers.js.map +1 -0
  146. package/dist/server/services/websocket/git-diff-handlers.d.ts +6 -0
  147. package/dist/server/services/websocket/git-diff-handlers.d.ts.map +1 -0
  148. package/dist/server/services/websocket/git-diff-handlers.js +123 -0
  149. package/dist/server/services/websocket/git-diff-handlers.js.map +1 -0
  150. package/dist/server/services/websocket/git-handlers.d.ts +2 -31
  151. package/dist/server/services/websocket/git-handlers.d.ts.map +1 -1
  152. package/dist/server/services/websocket/git-handlers.js +35 -541
  153. package/dist/server/services/websocket/git-handlers.js.map +1 -1
  154. package/dist/server/services/websocket/git-log-handlers.d.ts +6 -0
  155. package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -0
  156. package/dist/server/services/websocket/git-log-handlers.js +128 -0
  157. package/dist/server/services/websocket/git-log-handlers.js.map +1 -0
  158. package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -1
  159. package/dist/server/services/websocket/git-pr-handlers.js +13 -53
  160. package/dist/server/services/websocket/git-pr-handlers.js.map +1 -1
  161. package/dist/server/services/websocket/git-tag-handlers.d.ts +6 -0
  162. package/dist/server/services/websocket/git-tag-handlers.d.ts.map +1 -0
  163. package/dist/server/services/websocket/git-tag-handlers.js +76 -0
  164. package/dist/server/services/websocket/git-tag-handlers.js.map +1 -0
  165. package/dist/server/services/websocket/git-utils.d.ts +43 -0
  166. package/dist/server/services/websocket/git-utils.d.ts.map +1 -0
  167. package/dist/server/services/websocket/git-utils.js +201 -0
  168. package/dist/server/services/websocket/git-utils.js.map +1 -0
  169. package/dist/server/services/websocket/handler.d.ts +2 -0
  170. package/dist/server/services/websocket/handler.d.ts.map +1 -1
  171. package/dist/server/services/websocket/handler.js +37 -126
  172. package/dist/server/services/websocket/handler.js.map +1 -1
  173. package/dist/server/services/websocket/plan-board-handlers.d.ts +11 -0
  174. package/dist/server/services/websocket/plan-board-handlers.d.ts.map +1 -0
  175. package/dist/server/services/websocket/plan-board-handlers.js +218 -0
  176. package/dist/server/services/websocket/plan-board-handlers.js.map +1 -0
  177. package/dist/server/services/websocket/plan-execution-handlers.d.ts +9 -0
  178. package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -0
  179. package/dist/server/services/websocket/plan-execution-handlers.js +142 -0
  180. package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -0
  181. package/dist/server/services/websocket/plan-handlers.d.ts +7 -2
  182. package/dist/server/services/websocket/plan-handlers.d.ts.map +1 -1
  183. package/dist/server/services/websocket/plan-handlers.js +6 -925
  184. package/dist/server/services/websocket/plan-handlers.js.map +1 -1
  185. package/dist/server/services/websocket/plan-helpers.d.ts +19 -0
  186. package/dist/server/services/websocket/plan-helpers.d.ts.map +1 -0
  187. package/dist/server/services/websocket/plan-helpers.js +199 -0
  188. package/dist/server/services/websocket/plan-helpers.js.map +1 -0
  189. package/dist/server/services/websocket/plan-issue-handlers.d.ts +12 -0
  190. package/dist/server/services/websocket/plan-issue-handlers.d.ts.map +1 -0
  191. package/dist/server/services/websocket/plan-issue-handlers.js +162 -0
  192. package/dist/server/services/websocket/plan-issue-handlers.js.map +1 -0
  193. package/dist/server/services/websocket/plan-sprint-handlers.d.ts +7 -0
  194. package/dist/server/services/websocket/plan-sprint-handlers.d.ts.map +1 -0
  195. package/dist/server/services/websocket/plan-sprint-handlers.js +206 -0
  196. package/dist/server/services/websocket/plan-sprint-handlers.js.map +1 -0
  197. package/dist/server/services/websocket/quality-complexity.d.ts +14 -0
  198. package/dist/server/services/websocket/quality-complexity.d.ts.map +1 -0
  199. package/dist/server/services/websocket/quality-complexity.js +262 -0
  200. package/dist/server/services/websocket/quality-complexity.js.map +1 -0
  201. package/dist/server/services/websocket/quality-fix-agent.d.ts +16 -0
  202. package/dist/server/services/websocket/quality-fix-agent.d.ts.map +1 -0
  203. package/dist/server/services/websocket/quality-fix-agent.js +140 -0
  204. package/dist/server/services/websocket/quality-fix-agent.js.map +1 -0
  205. package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
  206. package/dist/server/services/websocket/quality-handlers.js +34 -346
  207. package/dist/server/services/websocket/quality-handlers.js.map +1 -1
  208. package/dist/server/services/websocket/quality-linting.d.ts +9 -0
  209. package/dist/server/services/websocket/quality-linting.d.ts.map +1 -0
  210. package/dist/server/services/websocket/quality-linting.js +178 -0
  211. package/dist/server/services/websocket/quality-linting.js.map +1 -0
  212. package/dist/server/services/websocket/quality-review-agent.d.ts +19 -0
  213. package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -0
  214. package/dist/server/services/websocket/quality-review-agent.js +206 -0
  215. package/dist/server/services/websocket/quality-review-agent.js.map +1 -0
  216. package/dist/server/services/websocket/quality-service.d.ts +3 -51
  217. package/dist/server/services/websocket/quality-service.d.ts.map +1 -1
  218. package/dist/server/services/websocket/quality-service.js +9 -651
  219. package/dist/server/services/websocket/quality-service.js.map +1 -1
  220. package/dist/server/services/websocket/quality-tools.d.ts +23 -0
  221. package/dist/server/services/websocket/quality-tools.d.ts.map +1 -0
  222. package/dist/server/services/websocket/quality-tools.js +208 -0
  223. package/dist/server/services/websocket/quality-tools.js.map +1 -0
  224. package/dist/server/services/websocket/quality-types.d.ts +59 -0
  225. package/dist/server/services/websocket/quality-types.d.ts.map +1 -0
  226. package/dist/server/services/websocket/quality-types.js +101 -0
  227. package/dist/server/services/websocket/quality-types.js.map +1 -0
  228. package/dist/server/services/websocket/session-handlers.d.ts +3 -4
  229. package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
  230. package/dist/server/services/websocket/session-handlers.js +3 -378
  231. package/dist/server/services/websocket/session-handlers.js.map +1 -1
  232. package/dist/server/services/websocket/session-history.d.ts +4 -0
  233. package/dist/server/services/websocket/session-history.d.ts.map +1 -0
  234. package/dist/server/services/websocket/session-history.js +208 -0
  235. package/dist/server/services/websocket/session-history.js.map +1 -0
  236. package/dist/server/services/websocket/session-initialization.d.ts +5 -0
  237. package/dist/server/services/websocket/session-initialization.d.ts.map +1 -0
  238. package/dist/server/services/websocket/session-initialization.js +163 -0
  239. package/dist/server/services/websocket/session-initialization.js.map +1 -0
  240. package/dist/server/services/websocket/types.d.ts +12 -2
  241. package/dist/server/services/websocket/types.d.ts.map +1 -1
  242. package/package.json +1 -1
  243. package/server/cli/headless/claude-invoker-process.ts +204 -0
  244. package/server/cli/headless/claude-invoker-stall.ts +164 -0
  245. package/server/cli/headless/claude-invoker-stream.ts +353 -0
  246. package/server/cli/headless/claude-invoker-tools.ts +187 -0
  247. package/server/cli/headless/claude-invoker.ts +15 -1096
  248. package/server/cli/headless/haiku-assessments.ts +365 -0
  249. package/server/cli/headless/headless-logger.ts +26 -5
  250. package/server/cli/headless/native-timeout-detector.ts +117 -0
  251. package/server/cli/headless/stall-assessor.ts +65 -618
  252. package/server/cli/improvisation-attachments.ts +148 -0
  253. package/server/cli/improvisation-retry.ts +602 -0
  254. package/server/cli/improvisation-session-manager.ts +140 -1349
  255. package/server/cli/improvisation-types.ts +98 -0
  256. package/server/cli/prompt-builders.ts +370 -0
  257. package/server/index.ts +35 -246
  258. package/server/mcp/bouncer-haiku.ts +182 -0
  259. package/server/mcp/bouncer-integration.ts +87 -248
  260. package/server/mcp/security-analysis.ts +217 -0
  261. package/server/mcp/security-audit.ts +1 -1
  262. package/server/mcp/security-patterns.ts +60 -283
  263. package/server/server-setup.ts +114 -0
  264. package/server/services/file-explorer-ops.ts +293 -0
  265. package/server/services/files.ts +20 -532
  266. package/server/services/plan/composer.ts +2 -1
  267. package/server/services/plan/executor.ts +3 -1
  268. package/server/services/plan/parser-core.ts +406 -0
  269. package/server/services/plan/parser-migration.ts +128 -0
  270. package/server/services/plan/parser.ts +52 -620
  271. package/server/services/plan/review-gate.ts +4 -2
  272. package/server/services/plan/types.ts +2 -0
  273. package/server/services/platform-credentials.ts +83 -0
  274. package/server/services/platform.ts +15 -141
  275. package/server/services/terminal/pty-manager.ts +66 -313
  276. package/server/services/terminal/pty-utils.ts +176 -0
  277. package/server/services/websocket/file-definition-handlers.ts +165 -0
  278. package/server/services/websocket/file-explorer-handlers.ts +37 -452
  279. package/server/services/websocket/file-search-handlers.ts +291 -0
  280. package/server/services/websocket/file-utils.ts +3 -3
  281. package/server/services/websocket/git-branch-handlers.ts +130 -0
  282. package/server/services/websocket/git-diff-handlers.ts +140 -0
  283. package/server/services/websocket/git-handlers.ts +40 -625
  284. package/server/services/websocket/git-log-handlers.ts +149 -0
  285. package/server/services/websocket/git-pr-handlers.ts +17 -62
  286. package/server/services/websocket/git-tag-handlers.ts +91 -0
  287. package/server/services/websocket/git-utils.ts +230 -0
  288. package/server/services/websocket/handler.ts +39 -126
  289. package/server/services/websocket/plan-board-handlers.ts +277 -0
  290. package/server/services/websocket/plan-execution-handlers.ts +184 -0
  291. package/server/services/websocket/plan-handlers.ts +8 -1114
  292. package/server/services/websocket/plan-helpers.ts +215 -0
  293. package/server/services/websocket/plan-issue-handlers.ts +204 -0
  294. package/server/services/websocket/plan-sprint-handlers.ts +252 -0
  295. package/server/services/websocket/quality-complexity.ts +294 -0
  296. package/server/services/websocket/quality-fix-agent.ts +181 -0
  297. package/server/services/websocket/quality-handlers.ts +36 -404
  298. package/server/services/websocket/quality-linting.ts +187 -0
  299. package/server/services/websocket/quality-review-agent.ts +246 -0
  300. package/server/services/websocket/quality-service.ts +11 -762
  301. package/server/services/websocket/quality-tools.ts +209 -0
  302. package/server/services/websocket/quality-types.ts +169 -0
  303. package/server/services/websocket/session-handlers.ts +5 -437
  304. package/server/services/websocket/session-history.ts +222 -0
  305. package/server/services/websocket/session-initialization.ts +209 -0
  306. package/server/services/websocket/types.ts +17 -0
@@ -1,237 +1,59 @@
1
1
  // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
2
  // Licensed under the MIT License. See LICENSE file for details.
3
3
  /**
4
- * PTY Manager - Manages pseudo-terminal sessions for shell access
4
+ * PTY Manager - Manages pseudo-terminal sessions for shell access.
5
5
  *
6
- * Provides terminal emulation for running shell commands on the local machine.
7
- * Each terminal session is managed independently with its own PTY process.
8
- *
9
- * Supports session persistence:
10
- * - Sessions survive WebSocket disconnections
11
- * - Scrollback buffer is maintained for replay on reconnect
12
- * - Sessions can be reattached without losing running processes
13
- *
14
- * NOTE: node-pty is an optional dependency requiring native compilation.
15
- * Terminal features gracefully degrade when node-pty is not available.
6
+ * Utilities (node-pty loading, shell detection, ScrollbackBuffer, types)
7
+ * live in pty-utils.ts. This file owns session lifecycle orchestration.
16
8
  */
17
9
  import { EventEmitter } from 'node:events';
18
- import { createRequire } from 'node:module';
19
10
  import { homedir, platform } from 'node:os';
20
11
  import { sanitizeEnvForSandbox } from '../sandbox-utils.js';
21
- // Try to load node-pty (optional native dependency)
22
- let pty = null;
23
- let _ptyLoadError = null;
24
- try {
25
- pty = await import('node-pty');
26
- }
27
- catch (error) {
28
- _ptyLoadError = error instanceof Error ? error.message : 'Failed to load node-pty';
29
- console.warn('[PTYManager] node-pty not available - terminal features disabled');
30
- console.warn('[PTYManager] To enable terminals, run: mstro setup-terminal');
31
- }
32
- /**
33
- * Check if node-pty is available
34
- */
35
- export function isPtyAvailable() {
36
- return pty !== null;
37
- }
38
- /**
39
- * Re-attempt loading node-pty at runtime.
40
- * Called after `mstro setup-terminal` compiles the native module
41
- * so the running server can pick it up without a restart.
42
- *
43
- * Uses createRequire (CJS) to bypass ESM's module cache — a failed
44
- * ESM import is permanently cached, but CJS require cache entries
45
- * can be deleted and re-required.
46
- */
47
- export async function reloadPty() {
48
- if (pty)
49
- return true;
50
- try {
51
- const require = createRequire(import.meta.url);
52
- // Clear any cached failure so require() retries the native load
53
- const resolved = require.resolve('node-pty');
54
- delete require.cache[resolved];
55
- pty = require('node-pty');
56
- _ptyLoadError = null;
57
- console.log('[PTYManager] node-pty loaded successfully after reload');
58
- return true;
59
- }
60
- catch (error) {
61
- _ptyLoadError = error instanceof Error ? error.message : 'Failed to load node-pty';
62
- return false;
63
- }
64
- }
65
- /**
66
- * Get installation instructions for node-pty based on platform
67
- */
68
- export function getPtyInstallInstructions() {
69
- const os = platform();
70
- let instructions = `Terminal feature requires native compilation of node-pty.\n\n`;
71
- instructions += `To enable this feature:\n\n`;
72
- if (os === 'darwin') {
73
- instructions += `1. Install Xcode Command Line Tools:\n`;
74
- instructions += ` xcode-select --install\n\n`;
75
- }
76
- else if (os === 'win32') {
77
- instructions += `1. Install Windows Build Tools:\n`;
78
- instructions += ` npm install -g windows-build-tools\n\n`;
79
- }
80
- else {
81
- // Linux
82
- instructions += `1. Install build tools:\n`;
83
- instructions += ` # Debian/Ubuntu:\n`;
84
- instructions += ` sudo apt install build-essential python3\n\n`;
85
- instructions += ` # Fedora/RHEL:\n`;
86
- instructions += ` sudo dnf install gcc-c++ make python3\n\n`;
87
- instructions += ` # Arch:\n`;
88
- instructions += ` sudo pacman -S base-devel python\n\n`;
89
- }
90
- instructions += `2. Rebuild native modules:\n`;
91
- instructions += ` npm rebuild node-pty\n\n`;
92
- instructions += `3. Restart mstro\n`;
93
- return instructions;
94
- }
95
- /**
96
- * Fixed-size buffer that retains the most recent PTY output for replay on reconnect.
97
- * Stores raw string chunks and evicts oldest data when the total exceeds maxBytes.
98
- */
99
- class ScrollbackBuffer {
100
- chunks = [];
101
- totalLength = 0;
102
- maxBytes;
103
- constructor(maxBytes) {
104
- this.maxBytes = maxBytes;
105
- }
106
- append(data) {
107
- this.chunks.push(data);
108
- this.totalLength += data.length;
109
- // Evict oldest chunks until under budget
110
- while (this.totalLength > this.maxBytes && this.chunks.length > 1) {
111
- const removed = this.chunks.shift();
112
- this.totalLength -= removed.length;
113
- }
114
- // If a single chunk exceeds max, truncate from the front
115
- if (this.totalLength > this.maxBytes && this.chunks.length === 1) {
116
- const excess = this.totalLength - this.maxBytes;
117
- this.chunks[0] = this.chunks[0].slice(excess);
118
- this.totalLength = this.chunks[0].length;
119
- }
120
- }
121
- getContents() {
122
- return this.chunks.join('');
123
- }
124
- clear() {
125
- this.chunks = [];
126
- this.totalLength = 0;
127
- }
128
- }
129
- const SCROLLBACK_MAX_BYTES = 256 * 1024; // 256KB
130
- /**
131
- * Detect the user's default shell
132
- */
133
- function detectShell() {
134
- const shell = process.env.SHELL;
135
- if (shell) {
136
- return shell;
137
- }
138
- // Platform-specific defaults
139
- if (platform() === 'win32') {
140
- return process.env.COMSPEC || 'powershell.exe';
141
- }
142
- return '/bin/bash';
143
- }
144
- /**
145
- * Get shell name from path
146
- */
147
- function getShellName(shellPath) {
148
- const parts = shellPath.split(/[/\\]/);
149
- return parts[parts.length - 1] || 'shell';
150
- }
12
+ import { detectShell, getPty, getPtyInstallInstructions, getShellName, isPtyAvailable, SCROLLBACK_MAX_BYTES, ScrollbackBuffer, } from './pty-utils.js';
13
+ // Re-export public API for backward compatibility
14
+ export { isPtyAvailable, reloadPty } from './pty-utils.js';
151
15
  export class PTYManager extends EventEmitter {
152
16
  terminals = new Map();
153
17
  constructor() {
154
18
  super();
155
- // Each terminal adds 3 listeners (output, exit, error) to this singleton.
156
- // With multiple terminals, the default limit of 10 is easily exceeded.
157
19
  this.setMaxListeners(50);
158
20
  }
159
- /**
160
- * Check if a terminal session exists and is still running
161
- */
162
21
  exists(terminalId) {
163
22
  return this.terminals.has(terminalId);
164
23
  }
165
- /**
166
- * Get session info for reconnection
167
- * Returns null if session doesn't exist
168
- */
169
24
  getSessionInfo(terminalId) {
170
25
  const session = this.terminals.get(terminalId);
171
26
  if (!session)
172
27
  return null;
173
- return {
174
- shell: session.shell,
175
- cwd: session.cwd,
176
- cols: session.cols,
177
- rows: session.rows,
178
- };
28
+ return { shell: session.shell, cwd: session.cwd, cols: session.cols, rows: session.rows };
179
29
  }
180
- /**
181
- * Check if PTY functionality is available
182
- */
183
30
  isPtyAvailable() {
184
31
  return isPtyAvailable();
185
32
  }
186
- /**
187
- * Get installation instructions if PTY is not available
188
- */
189
33
  getPtyInstallInstructions() {
190
34
  return getPtyInstallInstructions();
191
35
  }
192
- /**
193
- * Create a new terminal session
194
- */
195
36
  create(terminalId, workingDir, cols = 80, rows = 24, requestedShell, options) {
196
- // Check if node-pty is available
37
+ const pty = getPty();
197
38
  if (!pty) {
198
39
  throw new Error(`PTY_NOT_AVAILABLE:${getPtyInstallInstructions()}`);
199
40
  }
200
- // Check if session already exists - if so, this is a reconnection
41
+ // Reconnect to existing session
201
42
  if (this.terminals.has(terminalId)) {
202
43
  const existingSession = this.terminals.get(terminalId);
203
- // Always resize on reconnect to trigger SIGWINCH, which causes the
204
- // shell to redraw its prompt line for the reconnected client
205
44
  existingSession.pty.resize(cols, rows);
206
45
  existingSession.cols = cols;
207
46
  existingSession.rows = rows;
208
- return {
209
- shell: existingSession.shell,
210
- cwd: existingSession.cwd,
211
- isReconnect: true,
212
- platform: platform(),
213
- };
47
+ return { shell: existingSession.shell, cwd: existingSession.cwd, isReconnect: true, platform: platform() };
214
48
  }
215
49
  const shell = requestedShell || detectShell();
216
50
  const cwd = workingDir || homedir();
217
51
  try {
218
- // Build env: sandboxed sessions get stripped secrets and HOME=projectDir
219
52
  const baseEnv = options?.sandboxed
220
53
  ? sanitizeEnvForSandbox(process.env, cwd)
221
54
  : { ...process.env, HOME: homedir() };
222
- const env = {
223
- ...baseEnv,
224
- TERM: 'xterm-256color',
225
- COLORTERM: 'truecolor',
226
- };
227
- // Spawn the PTY process
228
- const ptyProcess = pty.spawn(shell, [], {
229
- name: 'xterm-256color',
230
- cols,
231
- rows,
232
- cwd,
233
- env,
234
- });
55
+ const env = { ...baseEnv, TERM: 'xterm-256color', COLORTERM: 'truecolor' };
56
+ const ptyProcess = pty.spawn(shell, [], { name: 'xterm-256color', cols, rows, cwd, env });
235
57
  const session = {
236
58
  id: terminalId,
237
59
  pty: ptyProcess,
@@ -246,55 +68,7 @@ export class PTYManager extends EventEmitter {
246
68
  scrollback: new ScrollbackBuffer(SCROLLBACK_MAX_BYTES),
247
69
  };
248
70
  this.terminals.set(terminalId, session);
249
- // Handle data output — coalesce small chunks to reduce WebSocket message count.
250
- // On macOS, node-pty emits many tiny chunks (sometimes single bytes) and zsh
251
- // wraps echoed chars in multi-part ANSI sequences (RPROMPT, syntax highlighting).
252
- // A longer window on macOS ensures these multi-part sequences arrive as one chunk,
253
- // which the browser's predictive echo can match correctly.
254
- // 32ms on macOS captures full zsh redraw cycles (RPROMPT + syntax highlighting)
255
- // that 24ms often split across coalesce boundaries.
256
- const OUTPUT_COALESCE_MS = platform() === 'darwin' ? 32 : 8;
257
- // High-water mark: flush immediately when buffer exceeds this size
258
- // to prevent unbounded memory growth during high-output commands (e.g. `yes`)
259
- const OUTPUT_HIGH_WATER = 64 * 1024; // 64KB
260
- // Maximum chunk size per WebSocket message to prevent browser overload
261
- const OUTPUT_CHUNK_SIZE = 64 * 1024;
262
- const flushOutputBuffer = () => {
263
- if (session._outputTimer) {
264
- clearTimeout(session._outputTimer);
265
- session._outputTimer = null;
266
- }
267
- const buffered = session._outputBuffer;
268
- session._outputBuffer = '';
269
- // Chunk large output to prevent single massive WebSocket frames
270
- for (let i = 0; i < buffered.length; i += OUTPUT_CHUNK_SIZE) {
271
- this.emit('output', terminalId, buffered.slice(i, i + OUTPUT_CHUNK_SIZE));
272
- }
273
- };
274
- ptyProcess.onData((data) => {
275
- session.scrollback.append(data);
276
- session.lastActivityAt = Date.now();
277
- session._outputBuffer += data;
278
- // Flush immediately if buffer exceeds high-water mark
279
- if (session._outputBuffer.length >= OUTPUT_HIGH_WATER) {
280
- flushOutputBuffer();
281
- }
282
- else if (!session._outputTimer) {
283
- session._outputTimer = setTimeout(flushOutputBuffer, OUTPUT_COALESCE_MS);
284
- }
285
- });
286
- // Handle exit — flush any buffered output first
287
- ptyProcess.onExit(({ exitCode }) => {
288
- if (session._outputBuffer) {
289
- flushOutputBuffer();
290
- }
291
- else if (session._outputTimer) {
292
- clearTimeout(session._outputTimer);
293
- session._outputTimer = null;
294
- }
295
- this.emit('exit', terminalId, exitCode);
296
- this.terminals.delete(terminalId);
297
- });
71
+ this.attachOutputHandlers(session, terminalId);
298
72
  return { shell: session.shell, cwd, isReconnect: false, platform: platform() };
299
73
  }
300
74
  catch (error) {
@@ -303,9 +77,45 @@ export class PTYManager extends EventEmitter {
303
77
  throw error;
304
78
  }
305
79
  }
306
- /**
307
- * Write input data to terminal
308
- */
80
+ attachOutputHandlers(session, terminalId) {
81
+ // Output coalescing constants
82
+ const OUTPUT_COALESCE_MS = platform() === 'darwin' ? 32 : 8;
83
+ const OUTPUT_HIGH_WATER = 64 * 1024;
84
+ const OUTPUT_CHUNK_SIZE = 64 * 1024;
85
+ const flushOutputBuffer = () => {
86
+ if (session._outputTimer) {
87
+ clearTimeout(session._outputTimer);
88
+ session._outputTimer = null;
89
+ }
90
+ const buffered = session._outputBuffer;
91
+ session._outputBuffer = '';
92
+ for (let i = 0; i < buffered.length; i += OUTPUT_CHUNK_SIZE) {
93
+ this.emit('output', terminalId, buffered.slice(i, i + OUTPUT_CHUNK_SIZE));
94
+ }
95
+ };
96
+ session.pty.onData((data) => {
97
+ session.scrollback.append(data);
98
+ session.lastActivityAt = Date.now();
99
+ session._outputBuffer += data;
100
+ if (session._outputBuffer.length >= OUTPUT_HIGH_WATER) {
101
+ flushOutputBuffer();
102
+ }
103
+ else if (!session._outputTimer) {
104
+ session._outputTimer = setTimeout(flushOutputBuffer, OUTPUT_COALESCE_MS);
105
+ }
106
+ });
107
+ session.pty.onExit(({ exitCode }) => {
108
+ if (session._outputBuffer) {
109
+ flushOutputBuffer();
110
+ }
111
+ else if (session._outputTimer) {
112
+ clearTimeout(session._outputTimer);
113
+ session._outputTimer = null;
114
+ }
115
+ this.emit('exit', terminalId, exitCode);
116
+ this.terminals.delete(terminalId);
117
+ });
118
+ }
309
119
  write(terminalId, data) {
310
120
  const session = this.terminals.get(terminalId);
311
121
  if (!session) {
@@ -322,9 +132,6 @@ export class PTYManager extends EventEmitter {
322
132
  return false;
323
133
  }
324
134
  }
325
- /**
326
- * Resize terminal
327
- */
328
135
  resize(terminalId, cols, rows) {
329
136
  const session = this.terminals.get(terminalId);
330
137
  if (!session) {
@@ -340,16 +147,11 @@ export class PTYManager extends EventEmitter {
340
147
  return false;
341
148
  }
342
149
  }
343
- /**
344
- * Close terminal session
345
- */
346
150
  close(terminalId) {
347
151
  const session = this.terminals.get(terminalId);
348
- if (!session) {
152
+ if (!session)
349
153
  return false;
350
- }
351
154
  try {
352
- // Flush any coalesced output before closing
353
155
  if (session._outputTimer) {
354
156
  clearTimeout(session._outputTimer);
355
157
  if (session._outputBuffer) {
@@ -368,36 +170,21 @@ export class PTYManager extends EventEmitter {
368
170
  return false;
369
171
  }
370
172
  }
371
- /**
372
- * Get scrollback buffer contents for replay on reconnect
373
- */
374
173
  getScrollback(terminalId) {
375
174
  const session = this.terminals.get(terminalId);
376
175
  if (!session)
377
176
  return null;
378
177
  return session.scrollback.getContents();
379
178
  }
380
- /**
381
- * Get terminal session info
382
- */
383
179
  getSession(terminalId) {
384
180
  return this.terminals.get(terminalId);
385
181
  }
386
- /**
387
- * Check if terminal exists
388
- */
389
182
  has(terminalId) {
390
183
  return this.terminals.has(terminalId);
391
184
  }
392
- /**
393
- * Get all active terminal IDs
394
- */
395
185
  getActiveTerminals() {
396
186
  return Array.from(this.terminals.keys());
397
187
  }
398
- /**
399
- * Close all terminals
400
- */
401
188
  closeAll() {
402
189
  for (const terminalId of this.terminals.keys()) {
403
190
  this.close(terminalId);
@@ -1 +1 @@
1
- {"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../../../../server/services/terminal/pty-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../../../../server/services/terminal/pty-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export declare function getPty(): typeof import('node-pty') | null;
2
+ /**
3
+ * Check if node-pty is available
4
+ */
5
+ export declare function isPtyAvailable(): boolean;
6
+ /**
7
+ * Re-attempt loading node-pty at runtime.
8
+ * Called after `mstro setup-terminal` compiles the native module
9
+ * so the running server can pick it up without a restart.
10
+ *
11
+ * Uses createRequire (CJS) to bypass ESM's module cache — a failed
12
+ * ESM import is permanently cached, but CJS require cache entries
13
+ * can be deleted and re-required.
14
+ */
15
+ export declare function reloadPty(): Promise<boolean>;
16
+ /**
17
+ * Get installation instructions for node-pty based on platform
18
+ */
19
+ export declare function getPtyInstallInstructions(): string;
20
+ /**
21
+ * Detect the user's default shell
22
+ */
23
+ export declare function detectShell(): string;
24
+ /**
25
+ * Get shell name from path
26
+ */
27
+ export declare function getShellName(shellPath: string): string;
28
+ export declare const SCROLLBACK_MAX_BYTES: number;
29
+ /**
30
+ * Fixed-size buffer that retains the most recent PTY output for replay on reconnect.
31
+ * Stores raw string chunks and evicts oldest data when the total exceeds maxBytes.
32
+ */
33
+ export declare class ScrollbackBuffer {
34
+ private chunks;
35
+ private totalLength;
36
+ private maxBytes;
37
+ constructor(maxBytes: number);
38
+ append(data: string): void;
39
+ getContents(): string;
40
+ clear(): void;
41
+ }
42
+ type IPty = import('node-pty').IPty;
43
+ export interface PTYSession {
44
+ id: string;
45
+ pty: IPty;
46
+ shell: string;
47
+ cwd: string;
48
+ createdAt: number;
49
+ lastActivityAt: number;
50
+ cols: number;
51
+ rows: number;
52
+ _outputBuffer: string;
53
+ _outputTimer: ReturnType<typeof setTimeout> | null;
54
+ scrollback: ScrollbackBuffer;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=pty-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-utils.d.ts","sourceRoot":"","sources":["../../../../server/services/terminal/pty-utils.ts"],"names":[],"mappings":"AA2BA,wBAAgB,MAAM,IAAI,cAAc,UAAU,CAAC,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAclD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA2BlD;AAID;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAOpC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtD;AAID,eAAO,MAAM,oBAAoB,QAAa,CAAC;AAE/C;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAI5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc1B,WAAW,IAAI,MAAM;IAIrB,KAAK,IAAI,IAAI;CAId;AAKD,KAAK,IAAI,GAAG,OAAO,UAAU,EAAE,IAAI,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IACnD,UAAU,EAAE,gBAAgB,CAAC;CAC9B"}
@@ -0,0 +1,141 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ /**
4
+ * PTY Utilities — node-pty loading, shell detection, scrollback buffer, and types.
5
+ *
6
+ * Separated from pty-manager.ts so the PTYManager class stays focused
7
+ * on session lifecycle orchestration.
8
+ */
9
+ import { createRequire } from 'node:module';
10
+ import { platform } from 'node:os';
11
+ // ── node-pty loading ──────────────────────────────────────────
12
+ // Try to load node-pty (optional native dependency)
13
+ let pty = null;
14
+ let _ptyLoadError = null;
15
+ try {
16
+ pty = await import('node-pty');
17
+ }
18
+ catch (error) {
19
+ _ptyLoadError = error instanceof Error ? error.message : 'Failed to load node-pty';
20
+ console.warn('[PTYManager] node-pty not available - terminal features disabled');
21
+ console.warn('[PTYManager] To enable terminals, run: mstro setup-terminal');
22
+ }
23
+ export function getPty() {
24
+ return pty;
25
+ }
26
+ /**
27
+ * Check if node-pty is available
28
+ */
29
+ export function isPtyAvailable() {
30
+ return pty !== null;
31
+ }
32
+ /**
33
+ * Re-attempt loading node-pty at runtime.
34
+ * Called after `mstro setup-terminal` compiles the native module
35
+ * so the running server can pick it up without a restart.
36
+ *
37
+ * Uses createRequire (CJS) to bypass ESM's module cache — a failed
38
+ * ESM import is permanently cached, but CJS require cache entries
39
+ * can be deleted and re-required.
40
+ */
41
+ export async function reloadPty() {
42
+ if (pty)
43
+ return true;
44
+ try {
45
+ const require = createRequire(import.meta.url);
46
+ const resolved = require.resolve('node-pty');
47
+ delete require.cache[resolved];
48
+ pty = require('node-pty');
49
+ _ptyLoadError = null;
50
+ console.log('[PTYManager] node-pty loaded successfully after reload');
51
+ return true;
52
+ }
53
+ catch (error) {
54
+ _ptyLoadError = error instanceof Error ? error.message : 'Failed to load node-pty';
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Get installation instructions for node-pty based on platform
60
+ */
61
+ export function getPtyInstallInstructions() {
62
+ const os = platform();
63
+ let instructions = `Terminal feature requires native compilation of node-pty.\n\n`;
64
+ instructions += `To enable this feature:\n\n`;
65
+ if (os === 'darwin') {
66
+ instructions += `1. Install Xcode Command Line Tools:\n`;
67
+ instructions += ` xcode-select --install\n\n`;
68
+ }
69
+ else if (os === 'win32') {
70
+ instructions += `1. Install Windows Build Tools:\n`;
71
+ instructions += ` npm install -g windows-build-tools\n\n`;
72
+ }
73
+ else {
74
+ instructions += `1. Install build tools:\n`;
75
+ instructions += ` # Debian/Ubuntu:\n`;
76
+ instructions += ` sudo apt install build-essential python3\n\n`;
77
+ instructions += ` # Fedora/RHEL:\n`;
78
+ instructions += ` sudo dnf install gcc-c++ make python3\n\n`;
79
+ instructions += ` # Arch:\n`;
80
+ instructions += ` sudo pacman -S base-devel python\n\n`;
81
+ }
82
+ instructions += `2. Rebuild native modules:\n`;
83
+ instructions += ` npm rebuild node-pty\n\n`;
84
+ instructions += `3. Restart mstro\n`;
85
+ return instructions;
86
+ }
87
+ // ── Shell detection ───────────────────────────────────────────
88
+ /**
89
+ * Detect the user's default shell
90
+ */
91
+ export function detectShell() {
92
+ const shell = process.env.SHELL;
93
+ if (shell)
94
+ return shell;
95
+ if (platform() === 'win32') {
96
+ return process.env.COMSPEC || 'powershell.exe';
97
+ }
98
+ return '/bin/bash';
99
+ }
100
+ /**
101
+ * Get shell name from path
102
+ */
103
+ export function getShellName(shellPath) {
104
+ const parts = shellPath.split(/[/\\]/);
105
+ return parts[parts.length - 1] || 'shell';
106
+ }
107
+ // ── Scrollback buffer ─────────────────────────────────────────
108
+ export const SCROLLBACK_MAX_BYTES = 256 * 1024; // 256KB
109
+ /**
110
+ * Fixed-size buffer that retains the most recent PTY output for replay on reconnect.
111
+ * Stores raw string chunks and evicts oldest data when the total exceeds maxBytes.
112
+ */
113
+ export class ScrollbackBuffer {
114
+ chunks = [];
115
+ totalLength = 0;
116
+ maxBytes;
117
+ constructor(maxBytes) {
118
+ this.maxBytes = maxBytes;
119
+ }
120
+ append(data) {
121
+ this.chunks.push(data);
122
+ this.totalLength += data.length;
123
+ while (this.totalLength > this.maxBytes && this.chunks.length > 1) {
124
+ const removed = this.chunks.shift();
125
+ this.totalLength -= removed.length;
126
+ }
127
+ if (this.totalLength > this.maxBytes && this.chunks.length === 1) {
128
+ const excess = this.totalLength - this.maxBytes;
129
+ this.chunks[0] = this.chunks[0].slice(excess);
130
+ this.totalLength = this.chunks[0].length;
131
+ }
132
+ }
133
+ getContents() {
134
+ return this.chunks.join('');
135
+ }
136
+ clear() {
137
+ this.chunks = [];
138
+ this.totalLength = 0;
139
+ }
140
+ }
141
+ //# sourceMappingURL=pty-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-utils.js","sourceRoot":"","sources":["../../../../server/services/terminal/pty-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HandlerContext } from './handler-context.js';
2
+ import type { WebSocketMessage, WSContext } from './types.js';
3
+ export declare function handleFindDefinition(ctx: HandlerContext, ws: WSContext, msg: WebSocketMessage, tabId: string, workingDir: string): void;
4
+ //# sourceMappingURL=file-definition-handlers.d.ts.map