mstro-app 0.1.47

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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +177 -0
  3. package/bin/commands/config.js +145 -0
  4. package/bin/commands/login.js +313 -0
  5. package/bin/commands/logout.js +75 -0
  6. package/bin/commands/status.js +197 -0
  7. package/bin/commands/whoami.js +161 -0
  8. package/bin/configure-claude.js +298 -0
  9. package/bin/mstro.js +581 -0
  10. package/bin/postinstall.js +45 -0
  11. package/bin/release.sh +110 -0
  12. package/dist/server/cli/headless/claude-invoker.d.ts +17 -0
  13. package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -0
  14. package/dist/server/cli/headless/claude-invoker.js +311 -0
  15. package/dist/server/cli/headless/claude-invoker.js.map +1 -0
  16. package/dist/server/cli/headless/index.d.ts +13 -0
  17. package/dist/server/cli/headless/index.d.ts.map +1 -0
  18. package/dist/server/cli/headless/index.js +10 -0
  19. package/dist/server/cli/headless/index.js.map +1 -0
  20. package/dist/server/cli/headless/mcp-config.d.ts +11 -0
  21. package/dist/server/cli/headless/mcp-config.d.ts.map +1 -0
  22. package/dist/server/cli/headless/mcp-config.js +76 -0
  23. package/dist/server/cli/headless/mcp-config.js.map +1 -0
  24. package/dist/server/cli/headless/output-utils.d.ts +33 -0
  25. package/dist/server/cli/headless/output-utils.d.ts.map +1 -0
  26. package/dist/server/cli/headless/output-utils.js +101 -0
  27. package/dist/server/cli/headless/output-utils.js.map +1 -0
  28. package/dist/server/cli/headless/prompt-utils.d.ts +21 -0
  29. package/dist/server/cli/headless/prompt-utils.d.ts.map +1 -0
  30. package/dist/server/cli/headless/prompt-utils.js +84 -0
  31. package/dist/server/cli/headless/prompt-utils.js.map +1 -0
  32. package/dist/server/cli/headless/runner.d.ts +24 -0
  33. package/dist/server/cli/headless/runner.d.ts.map +1 -0
  34. package/dist/server/cli/headless/runner.js +99 -0
  35. package/dist/server/cli/headless/runner.js.map +1 -0
  36. package/dist/server/cli/headless/types.d.ts +106 -0
  37. package/dist/server/cli/headless/types.d.ts.map +1 -0
  38. package/dist/server/cli/headless/types.js +4 -0
  39. package/dist/server/cli/headless/types.js.map +1 -0
  40. package/dist/server/cli/improvisation-session-manager.d.ts +155 -0
  41. package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -0
  42. package/dist/server/cli/improvisation-session-manager.js +415 -0
  43. package/dist/server/cli/improvisation-session-manager.js.map +1 -0
  44. package/dist/server/index.d.ts +2 -0
  45. package/dist/server/index.d.ts.map +1 -0
  46. package/dist/server/index.js +386 -0
  47. package/dist/server/index.js.map +1 -0
  48. package/dist/server/mcp/bouncer-cli.d.ts +3 -0
  49. package/dist/server/mcp/bouncer-cli.d.ts.map +1 -0
  50. package/dist/server/mcp/bouncer-cli.js +99 -0
  51. package/dist/server/mcp/bouncer-cli.js.map +1 -0
  52. package/dist/server/mcp/bouncer-integration.d.ts +36 -0
  53. package/dist/server/mcp/bouncer-integration.d.ts.map +1 -0
  54. package/dist/server/mcp/bouncer-integration.js +301 -0
  55. package/dist/server/mcp/bouncer-integration.js.map +1 -0
  56. package/dist/server/mcp/security-audit.d.ts +52 -0
  57. package/dist/server/mcp/security-audit.d.ts.map +1 -0
  58. package/dist/server/mcp/security-audit.js +118 -0
  59. package/dist/server/mcp/security-audit.js.map +1 -0
  60. package/dist/server/mcp/security-patterns.d.ts +73 -0
  61. package/dist/server/mcp/security-patterns.d.ts.map +1 -0
  62. package/dist/server/mcp/security-patterns.js +247 -0
  63. package/dist/server/mcp/security-patterns.js.map +1 -0
  64. package/dist/server/mcp/server.d.ts +3 -0
  65. package/dist/server/mcp/server.d.ts.map +1 -0
  66. package/dist/server/mcp/server.js +146 -0
  67. package/dist/server/mcp/server.js.map +1 -0
  68. package/dist/server/routes/files.d.ts +9 -0
  69. package/dist/server/routes/files.d.ts.map +1 -0
  70. package/dist/server/routes/files.js +24 -0
  71. package/dist/server/routes/files.js.map +1 -0
  72. package/dist/server/routes/improvise.d.ts +3 -0
  73. package/dist/server/routes/improvise.d.ts.map +1 -0
  74. package/dist/server/routes/improvise.js +72 -0
  75. package/dist/server/routes/improvise.js.map +1 -0
  76. package/dist/server/routes/index.d.ts +10 -0
  77. package/dist/server/routes/index.d.ts.map +1 -0
  78. package/dist/server/routes/index.js +12 -0
  79. package/dist/server/routes/index.js.map +1 -0
  80. package/dist/server/routes/instances.d.ts +10 -0
  81. package/dist/server/routes/instances.d.ts.map +1 -0
  82. package/dist/server/routes/instances.js +47 -0
  83. package/dist/server/routes/instances.js.map +1 -0
  84. package/dist/server/routes/notifications.d.ts +3 -0
  85. package/dist/server/routes/notifications.d.ts.map +1 -0
  86. package/dist/server/routes/notifications.js +136 -0
  87. package/dist/server/routes/notifications.js.map +1 -0
  88. package/dist/server/services/analytics.d.ts +56 -0
  89. package/dist/server/services/analytics.d.ts.map +1 -0
  90. package/dist/server/services/analytics.js +240 -0
  91. package/dist/server/services/analytics.js.map +1 -0
  92. package/dist/server/services/auth.d.ts +26 -0
  93. package/dist/server/services/auth.d.ts.map +1 -0
  94. package/dist/server/services/auth.js +71 -0
  95. package/dist/server/services/auth.js.map +1 -0
  96. package/dist/server/services/client-id.d.ts +10 -0
  97. package/dist/server/services/client-id.d.ts.map +1 -0
  98. package/dist/server/services/client-id.js +61 -0
  99. package/dist/server/services/client-id.js.map +1 -0
  100. package/dist/server/services/credentials.d.ts +39 -0
  101. package/dist/server/services/credentials.d.ts.map +1 -0
  102. package/dist/server/services/credentials.js +110 -0
  103. package/dist/server/services/credentials.js.map +1 -0
  104. package/dist/server/services/files.d.ts +119 -0
  105. package/dist/server/services/files.d.ts.map +1 -0
  106. package/dist/server/services/files.js +560 -0
  107. package/dist/server/services/files.js.map +1 -0
  108. package/dist/server/services/instances.d.ts +52 -0
  109. package/dist/server/services/instances.d.ts.map +1 -0
  110. package/dist/server/services/instances.js +241 -0
  111. package/dist/server/services/instances.js.map +1 -0
  112. package/dist/server/services/pathUtils.d.ts +47 -0
  113. package/dist/server/services/pathUtils.d.ts.map +1 -0
  114. package/dist/server/services/pathUtils.js +124 -0
  115. package/dist/server/services/pathUtils.js.map +1 -0
  116. package/dist/server/services/platform.d.ts +72 -0
  117. package/dist/server/services/platform.d.ts.map +1 -0
  118. package/dist/server/services/platform.js +368 -0
  119. package/dist/server/services/platform.js.map +1 -0
  120. package/dist/server/services/sentry.d.ts +5 -0
  121. package/dist/server/services/sentry.d.ts.map +1 -0
  122. package/dist/server/services/sentry.js +71 -0
  123. package/dist/server/services/sentry.js.map +1 -0
  124. package/dist/server/services/terminal/pty-manager.d.ts +149 -0
  125. package/dist/server/services/terminal/pty-manager.d.ts.map +1 -0
  126. package/dist/server/services/terminal/pty-manager.js +377 -0
  127. package/dist/server/services/terminal/pty-manager.js.map +1 -0
  128. package/dist/server/services/terminal/tmux-manager.d.ts +82 -0
  129. package/dist/server/services/terminal/tmux-manager.d.ts.map +1 -0
  130. package/dist/server/services/terminal/tmux-manager.js +352 -0
  131. package/dist/server/services/terminal/tmux-manager.js.map +1 -0
  132. package/dist/server/services/websocket/autocomplete.d.ts +50 -0
  133. package/dist/server/services/websocket/autocomplete.d.ts.map +1 -0
  134. package/dist/server/services/websocket/autocomplete.js +361 -0
  135. package/dist/server/services/websocket/autocomplete.js.map +1 -0
  136. package/dist/server/services/websocket/file-utils.d.ts +44 -0
  137. package/dist/server/services/websocket/file-utils.d.ts.map +1 -0
  138. package/dist/server/services/websocket/file-utils.js +272 -0
  139. package/dist/server/services/websocket/file-utils.js.map +1 -0
  140. package/dist/server/services/websocket/handler.d.ts +246 -0
  141. package/dist/server/services/websocket/handler.d.ts.map +1 -0
  142. package/dist/server/services/websocket/handler.js +1771 -0
  143. package/dist/server/services/websocket/handler.js.map +1 -0
  144. package/dist/server/services/websocket/index.d.ts +11 -0
  145. package/dist/server/services/websocket/index.d.ts.map +1 -0
  146. package/dist/server/services/websocket/index.js +14 -0
  147. package/dist/server/services/websocket/index.js.map +1 -0
  148. package/dist/server/services/websocket/types.d.ts +214 -0
  149. package/dist/server/services/websocket/types.d.ts.map +1 -0
  150. package/dist/server/services/websocket/types.js +4 -0
  151. package/dist/server/services/websocket/types.js.map +1 -0
  152. package/dist/server/utils/agent-manager.d.ts +69 -0
  153. package/dist/server/utils/agent-manager.d.ts.map +1 -0
  154. package/dist/server/utils/agent-manager.js +269 -0
  155. package/dist/server/utils/agent-manager.js.map +1 -0
  156. package/dist/server/utils/paths.d.ts +25 -0
  157. package/dist/server/utils/paths.d.ts.map +1 -0
  158. package/dist/server/utils/paths.js +38 -0
  159. package/dist/server/utils/paths.js.map +1 -0
  160. package/dist/server/utils/port-manager.d.ts +10 -0
  161. package/dist/server/utils/port-manager.d.ts.map +1 -0
  162. package/dist/server/utils/port-manager.js +60 -0
  163. package/dist/server/utils/port-manager.js.map +1 -0
  164. package/dist/server/utils/port.d.ts +26 -0
  165. package/dist/server/utils/port.d.ts.map +1 -0
  166. package/dist/server/utils/port.js +83 -0
  167. package/dist/server/utils/port.js.map +1 -0
  168. package/hooks/bouncer.sh +138 -0
  169. package/package.json +74 -0
  170. package/server/README.md +191 -0
  171. package/server/cli/headless/claude-invoker.ts +415 -0
  172. package/server/cli/headless/index.ts +39 -0
  173. package/server/cli/headless/mcp-config.ts +87 -0
  174. package/server/cli/headless/output-utils.ts +109 -0
  175. package/server/cli/headless/prompt-utils.ts +108 -0
  176. package/server/cli/headless/runner.ts +133 -0
  177. package/server/cli/headless/types.ts +118 -0
  178. package/server/cli/improvisation-session-manager.ts +531 -0
  179. package/server/index.ts +456 -0
  180. package/server/mcp/README.md +122 -0
  181. package/server/mcp/bouncer-cli.ts +127 -0
  182. package/server/mcp/bouncer-integration.ts +430 -0
  183. package/server/mcp/security-audit.ts +180 -0
  184. package/server/mcp/security-patterns.ts +290 -0
  185. package/server/mcp/server.ts +174 -0
  186. package/server/routes/files.ts +29 -0
  187. package/server/routes/improvise.ts +82 -0
  188. package/server/routes/index.ts +13 -0
  189. package/server/routes/instances.ts +54 -0
  190. package/server/routes/notifications.ts +158 -0
  191. package/server/services/analytics.ts +277 -0
  192. package/server/services/auth.ts +80 -0
  193. package/server/services/client-id.ts +68 -0
  194. package/server/services/credentials.ts +134 -0
  195. package/server/services/files.ts +710 -0
  196. package/server/services/instances.ts +275 -0
  197. package/server/services/pathUtils.ts +158 -0
  198. package/server/services/platform.test.ts +1314 -0
  199. package/server/services/platform.ts +435 -0
  200. package/server/services/sentry.ts +81 -0
  201. package/server/services/terminal/pty-manager.ts +464 -0
  202. package/server/services/terminal/tmux-manager.ts +426 -0
  203. package/server/services/websocket/autocomplete.ts +438 -0
  204. package/server/services/websocket/file-utils.ts +305 -0
  205. package/server/services/websocket/handler.test.ts +20 -0
  206. package/server/services/websocket/handler.ts +2047 -0
  207. package/server/services/websocket/index.ts +40 -0
  208. package/server/services/websocket/types.ts +339 -0
  209. package/server/tsconfig.json +19 -0
  210. package/server/utils/agent-manager.ts +323 -0
  211. package/server/utils/paths.ts +45 -0
  212. package/server/utils/port-manager.ts +70 -0
  213. package/server/utils/port.ts +102 -0
@@ -0,0 +1,352 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ /**
4
+ * Tmux Session Manager - Provides persistent terminal sessions via tmux
5
+ *
6
+ * When enabled, terminals are run inside tmux sessions, which allows:
7
+ * - Sessions to survive client restarts
8
+ * - True process persistence across browser disconnections
9
+ * - Session restoration even after server restart
10
+ *
11
+ * Tmux sessions are named with a prefix to identify them as mstro-managed.
12
+ */
13
+ import { spawnSync } from 'node:child_process';
14
+ import { EventEmitter } from 'node:events';
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
16
+ import { homedir } from 'node:os';
17
+ import { join } from 'node:path';
18
+ const MSTRO_TMUX_PREFIX = 'mstro-terminal-';
19
+ const SESSION_REGISTRY_PATH = join(homedir(), '.mstro', 'terminal-sessions.json');
20
+ /**
21
+ * Check if tmux is available on the system
22
+ */
23
+ export function isTmuxAvailable() {
24
+ try {
25
+ const result = spawnSync('which', ['tmux'], { encoding: 'utf-8' });
26
+ return result.status === 0 && result.stdout.trim().length > 0;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * TmuxManager - Manages tmux-backed terminal sessions
34
+ */
35
+ export class TmuxManager extends EventEmitter {
36
+ sessions = new Map();
37
+ outputHandlers = new Map();
38
+ tmuxAvailable;
39
+ constructor() {
40
+ super();
41
+ this.tmuxAvailable = isTmuxAvailable();
42
+ if (this.tmuxAvailable) {
43
+ this.loadRegistry();
44
+ this.syncWithTmux();
45
+ }
46
+ }
47
+ /**
48
+ * Check if tmux persistence is available
49
+ */
50
+ isAvailable() {
51
+ return this.tmuxAvailable;
52
+ }
53
+ /**
54
+ * Load session registry from disk
55
+ */
56
+ loadRegistry() {
57
+ try {
58
+ if (existsSync(SESSION_REGISTRY_PATH)) {
59
+ const data = readFileSync(SESSION_REGISTRY_PATH, 'utf-8');
60
+ const registry = JSON.parse(data);
61
+ for (const session of registry.sessions) {
62
+ this.sessions.set(session.terminalId, session);
63
+ }
64
+ }
65
+ }
66
+ catch (error) {
67
+ console.error('[TmuxManager] Failed to load registry:', error);
68
+ }
69
+ }
70
+ /**
71
+ * Save session registry to disk
72
+ */
73
+ saveRegistry() {
74
+ try {
75
+ const dir = join(homedir(), '.mstro');
76
+ if (!existsSync(dir)) {
77
+ mkdirSync(dir, { recursive: true });
78
+ }
79
+ const registry = {
80
+ sessions: Array.from(this.sessions.values()),
81
+ };
82
+ writeFileSync(SESSION_REGISTRY_PATH, JSON.stringify(registry, null, 2));
83
+ }
84
+ catch (error) {
85
+ console.error('[TmuxManager] Failed to save registry:', error);
86
+ }
87
+ }
88
+ /**
89
+ * Sync our registry with actual tmux sessions
90
+ * Remove sessions that no longer exist in tmux
91
+ */
92
+ syncWithTmux() {
93
+ if (!this.tmuxAvailable)
94
+ return;
95
+ try {
96
+ // List all tmux sessions
97
+ const result = spawnSync('tmux', ['list-sessions', '-F', '#{session_name}'], {
98
+ encoding: 'utf-8',
99
+ });
100
+ if (result.status !== 0) {
101
+ // No tmux server running - clear all sessions
102
+ this.sessions.clear();
103
+ this.saveRegistry();
104
+ return;
105
+ }
106
+ const existingSessions = new Set(result.stdout
107
+ .trim()
108
+ .split('\n')
109
+ .filter((name) => name.startsWith(MSTRO_TMUX_PREFIX)));
110
+ // Remove sessions that no longer exist
111
+ for (const [terminalId, session] of this.sessions) {
112
+ if (!existingSessions.has(session.tmuxSessionName)) {
113
+ this.sessions.delete(terminalId);
114
+ }
115
+ }
116
+ this.saveRegistry();
117
+ }
118
+ catch (error) {
119
+ console.error('[TmuxManager] Failed to sync with tmux:', error);
120
+ }
121
+ }
122
+ /**
123
+ * Check if a session exists
124
+ */
125
+ exists(terminalId) {
126
+ const session = this.sessions.get(terminalId);
127
+ if (!session)
128
+ return false;
129
+ // Verify it still exists in tmux
130
+ try {
131
+ const result = spawnSync('tmux', ['has-session', '-t', session.tmuxSessionName], {
132
+ encoding: 'utf-8',
133
+ });
134
+ return result.status === 0;
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ }
140
+ /**
141
+ * Get session info
142
+ */
143
+ getSessionInfo(terminalId) {
144
+ return this.sessions.get(terminalId) || null;
145
+ }
146
+ /**
147
+ * Get all active sessions
148
+ */
149
+ getActiveSessions() {
150
+ this.syncWithTmux();
151
+ return Array.from(this.sessions.values());
152
+ }
153
+ /**
154
+ * Create a new tmux-backed terminal session
155
+ */
156
+ create(terminalId, workingDir, cols = 80, rows = 24, shell) {
157
+ if (!this.tmuxAvailable) {
158
+ throw new Error('tmux is not available');
159
+ }
160
+ // Check if session already exists
161
+ if (this.exists(terminalId)) {
162
+ const session = this.sessions.get(terminalId);
163
+ session.lastAttachedAt = Date.now();
164
+ this.saveRegistry();
165
+ return {
166
+ shell: session.shell,
167
+ cwd: session.cwd,
168
+ isReconnect: true,
169
+ };
170
+ }
171
+ const tmuxSessionName = `${MSTRO_TMUX_PREFIX}${terminalId}`;
172
+ const cwd = workingDir || homedir();
173
+ const shellPath = shell || process.env.SHELL || '/bin/bash';
174
+ const shellName = shellPath.split('/').pop() || 'shell';
175
+ try {
176
+ // Create new tmux session
177
+ const result = spawnSync('tmux', [
178
+ 'new-session',
179
+ '-d', // Detached
180
+ '-s', tmuxSessionName,
181
+ '-x', cols.toString(),
182
+ '-y', rows.toString(),
183
+ '-c', cwd,
184
+ shellPath,
185
+ ], {
186
+ encoding: 'utf-8',
187
+ cwd,
188
+ });
189
+ if (result.status !== 0) {
190
+ throw new Error(`Failed to create tmux session: ${result.stderr}`);
191
+ }
192
+ // Store session info
193
+ const session = {
194
+ terminalId,
195
+ tmuxSessionName,
196
+ shell: shellName,
197
+ cwd,
198
+ createdAt: Date.now(),
199
+ lastAttachedAt: Date.now(),
200
+ };
201
+ this.sessions.set(terminalId, session);
202
+ this.saveRegistry();
203
+ return { shell: shellName, cwd, isReconnect: false };
204
+ }
205
+ catch (error) {
206
+ console.error(`[TmuxManager] Failed to create session:`, error);
207
+ throw error;
208
+ }
209
+ }
210
+ /**
211
+ * Attach to a tmux session and stream output
212
+ * Returns a function to detach
213
+ */
214
+ attach(terminalId, onOutput, onExit) {
215
+ const session = this.sessions.get(terminalId);
216
+ if (!session) {
217
+ throw new Error(`Session not found: ${terminalId}`);
218
+ }
219
+ // Update last attached time
220
+ session.lastAttachedAt = Date.now();
221
+ this.saveRegistry();
222
+ // Create a pipe process to capture tmux output
223
+ // We use 'tmux pipe-pane' to capture output and 'tmux send-keys' for input
224
+ const _pipePath = `/tmp/mstro-tmux-pipe-${terminalId}`;
225
+ // Start capturing output using tmux's capture-pane in a loop
226
+ let capturing = true;
227
+ let lastCaptureLength = 0;
228
+ const captureLoop = setInterval(() => {
229
+ if (!capturing) {
230
+ clearInterval(captureLoop);
231
+ return;
232
+ }
233
+ try {
234
+ // Capture the current pane content
235
+ const result = spawnSync('tmux', ['capture-pane', '-t', session.tmuxSessionName, '-p', '-S', '-100'], { encoding: 'utf-8' });
236
+ if (result.status === 0) {
237
+ const output = result.stdout;
238
+ // Only emit new content
239
+ if (output.length > lastCaptureLength) {
240
+ const newContent = output.slice(lastCaptureLength);
241
+ if (newContent.trim()) {
242
+ onOutput(newContent);
243
+ }
244
+ lastCaptureLength = output.length;
245
+ }
246
+ }
247
+ else if (result.stderr?.includes('no server running')) {
248
+ // Session ended
249
+ capturing = false;
250
+ clearInterval(captureLoop);
251
+ onExit(0);
252
+ this.sessions.delete(terminalId);
253
+ this.saveRegistry();
254
+ }
255
+ }
256
+ catch (error) {
257
+ console.error('[TmuxManager] Capture error:', error);
258
+ }
259
+ }, 100); // Poll every 100ms
260
+ this.outputHandlers.set(terminalId, captureLoop);
261
+ return {
262
+ write: (data) => {
263
+ try {
264
+ // Send keys to tmux session
265
+ spawnSync('tmux', ['send-keys', '-t', session.tmuxSessionName, '-l', data], {
266
+ encoding: 'utf-8',
267
+ });
268
+ }
269
+ catch (error) {
270
+ console.error('[TmuxManager] Write error:', error);
271
+ }
272
+ },
273
+ resize: (cols, rows) => {
274
+ try {
275
+ spawnSync('tmux', ['resize-window', '-t', session.tmuxSessionName, '-x', cols.toString(), '-y', rows.toString()], { encoding: 'utf-8' });
276
+ }
277
+ catch (_error) {
278
+ // Resize errors are not critical
279
+ }
280
+ },
281
+ detach: () => {
282
+ capturing = false;
283
+ const handler = this.outputHandlers.get(terminalId);
284
+ if (handler) {
285
+ clearInterval(handler);
286
+ this.outputHandlers.delete(terminalId);
287
+ }
288
+ },
289
+ };
290
+ }
291
+ /**
292
+ * Get scrollback/history from tmux session
293
+ */
294
+ getScrollback(terminalId, lines = 5000) {
295
+ const session = this.sessions.get(terminalId);
296
+ if (!session)
297
+ return [];
298
+ try {
299
+ const result = spawnSync('tmux', ['capture-pane', '-t', session.tmuxSessionName, '-p', '-S', `-${lines}`], { encoding: 'utf-8' });
300
+ if (result.status === 0) {
301
+ return result.stdout.split('\n');
302
+ }
303
+ }
304
+ catch (error) {
305
+ console.error('[TmuxManager] Failed to get scrollback:', error);
306
+ }
307
+ return [];
308
+ }
309
+ /**
310
+ * Close/kill a tmux session
311
+ */
312
+ close(terminalId) {
313
+ const session = this.sessions.get(terminalId);
314
+ if (!session)
315
+ return false;
316
+ // Stop output capture if running
317
+ const handler = this.outputHandlers.get(terminalId);
318
+ if (handler) {
319
+ clearInterval(handler);
320
+ this.outputHandlers.delete(terminalId);
321
+ }
322
+ try {
323
+ spawnSync('tmux', ['kill-session', '-t', session.tmuxSessionName], {
324
+ encoding: 'utf-8',
325
+ });
326
+ this.sessions.delete(terminalId);
327
+ this.saveRegistry();
328
+ return true;
329
+ }
330
+ catch (error) {
331
+ console.error('[TmuxManager] Failed to close session:', error);
332
+ return false;
333
+ }
334
+ }
335
+ /**
336
+ * Close all mstro-managed tmux sessions
337
+ */
338
+ closeAll() {
339
+ for (const terminalId of this.sessions.keys()) {
340
+ this.close(terminalId);
341
+ }
342
+ }
343
+ }
344
+ // Singleton instance
345
+ let tmuxManagerInstance = null;
346
+ export function getTmuxManager() {
347
+ if (!tmuxManagerInstance) {
348
+ tmuxManagerInstance = new TmuxManager();
349
+ }
350
+ return tmuxManagerInstance;
351
+ }
352
+ //# sourceMappingURL=tmux-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux-manager.js","sourceRoot":"","sources":["../../../../server/services/terminal/tmux-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { AutocompleteResult, FrecencyData } from './types.js';
2
+ export declare class AutocompleteService {
3
+ private frecencyData;
4
+ constructor(initialFrecencyData?: FrecencyData);
5
+ /**
6
+ * Update frecency data
7
+ */
8
+ setFrecencyData(data: FrecencyData): void;
9
+ /**
10
+ * Get frecency data
11
+ */
12
+ getFrecencyData(): FrecencyData;
13
+ /**
14
+ * Record a file selection for frecency scoring
15
+ */
16
+ recordFileSelection(filePath: string): void;
17
+ /**
18
+ * Calculate frecency score for a file
19
+ */
20
+ calculateFrecencyScore(filePath: string): number;
21
+ /**
22
+ * Calculate matched character indices for highlighting
23
+ */
24
+ private calculateMatchedIndices;
25
+ /**
26
+ * Get file completions for autocomplete with directory-scoped navigation
27
+ */
28
+ getFileCompletions(partialPath: string, workingDir: string): AutocompleteResult[];
29
+ /**
30
+ * Get files with caching support
31
+ */
32
+ private getFilesWithCache;
33
+ /**
34
+ * Score files when no search query is provided
35
+ */
36
+ private scoreEmptyQuery;
37
+ /**
38
+ * Score files against a search query using prefix, contains, and fuzzy matching
39
+ */
40
+ private scoreWithQuery;
41
+ /**
42
+ * Perform fuzzy search when few good matches exist
43
+ */
44
+ private performFuzzySearch;
45
+ /**
46
+ * Get direct contents of a directory with enhanced metadata
47
+ */
48
+ private getDirectoryContentsEnhanced;
49
+ }
50
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/autocomplete.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EACb,MAAM,YAAY,CAAC;AA0EpB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAoB;gBAE5B,mBAAmB,GAAE,YAAiB;IAIlD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIzC;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa3C;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAWhD;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAoEjF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6CtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;CA8DrC"}