@mako10k/shell-server 0.1.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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/dist/backoffice/index.d.ts +2 -0
  4. package/dist/backoffice/index.d.ts.map +1 -0
  5. package/dist/backoffice/index.js +47 -0
  6. package/dist/backoffice/index.js.map +1 -0
  7. package/dist/backoffice/server.d.ts +45 -0
  8. package/dist/backoffice/server.d.ts.map +1 -0
  9. package/dist/backoffice/server.js +610 -0
  10. package/dist/backoffice/server.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +525 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/core/config-manager.d.ts +80 -0
  16. package/dist/core/config-manager.d.ts.map +1 -0
  17. package/dist/core/config-manager.js +218 -0
  18. package/dist/core/config-manager.js.map +1 -0
  19. package/dist/core/enhanced-history-manager.d.ts +84 -0
  20. package/dist/core/enhanced-history-manager.d.ts.map +1 -0
  21. package/dist/core/enhanced-history-manager.js +319 -0
  22. package/dist/core/enhanced-history-manager.js.map +1 -0
  23. package/dist/core/file-manager.d.ts +79 -0
  24. package/dist/core/file-manager.d.ts.map +1 -0
  25. package/dist/core/file-manager.js +338 -0
  26. package/dist/core/file-manager.js.map +1 -0
  27. package/dist/core/file-storage-subscriber.d.ts +38 -0
  28. package/dist/core/file-storage-subscriber.d.ts.map +1 -0
  29. package/dist/core/file-storage-subscriber.js +132 -0
  30. package/dist/core/file-storage-subscriber.js.map +1 -0
  31. package/dist/core/monitoring-manager.d.ts +32 -0
  32. package/dist/core/monitoring-manager.d.ts.map +1 -0
  33. package/dist/core/monitoring-manager.js +296 -0
  34. package/dist/core/monitoring-manager.js.map +1 -0
  35. package/dist/core/process-manager.d.ts +105 -0
  36. package/dist/core/process-manager.d.ts.map +1 -0
  37. package/dist/core/process-manager.js +1374 -0
  38. package/dist/core/process-manager.js.map +1 -0
  39. package/dist/core/realtime-stream-subscriber.d.ts +93 -0
  40. package/dist/core/realtime-stream-subscriber.d.ts.map +1 -0
  41. package/dist/core/realtime-stream-subscriber.js +200 -0
  42. package/dist/core/realtime-stream-subscriber.js.map +1 -0
  43. package/dist/core/remote-http-client.d.ts +15 -0
  44. package/dist/core/remote-http-client.d.ts.map +1 -0
  45. package/dist/core/remote-http-client.js +60 -0
  46. package/dist/core/remote-http-client.js.map +1 -0
  47. package/dist/core/remote-process-service.d.ts +50 -0
  48. package/dist/core/remote-process-service.d.ts.map +1 -0
  49. package/dist/core/remote-process-service.js +20 -0
  50. package/dist/core/remote-process-service.js.map +1 -0
  51. package/dist/core/server-manager.d.ts +71 -0
  52. package/dist/core/server-manager.d.ts.map +1 -0
  53. package/dist/core/server-manager.js +680 -0
  54. package/dist/core/server-manager.js.map +1 -0
  55. package/dist/core/stream-publisher.d.ts +75 -0
  56. package/dist/core/stream-publisher.d.ts.map +1 -0
  57. package/dist/core/stream-publisher.js +127 -0
  58. package/dist/core/stream-publisher.js.map +1 -0
  59. package/dist/core/streaming-pipeline-reader.d.ts +67 -0
  60. package/dist/core/streaming-pipeline-reader.d.ts.map +1 -0
  61. package/dist/core/streaming-pipeline-reader.js +191 -0
  62. package/dist/core/streaming-pipeline-reader.js.map +1 -0
  63. package/dist/core/terminal-manager.d.ts +96 -0
  64. package/dist/core/terminal-manager.d.ts.map +1 -0
  65. package/dist/core/terminal-manager.js +515 -0
  66. package/dist/core/terminal-manager.js.map +1 -0
  67. package/dist/daemon/server.d.ts +8 -0
  68. package/dist/daemon/server.d.ts.map +1 -0
  69. package/dist/daemon/server.js +416 -0
  70. package/dist/daemon/server.js.map +1 -0
  71. package/dist/daemon/uds-transport.d.ts +31 -0
  72. package/dist/daemon/uds-transport.d.ts.map +1 -0
  73. package/dist/daemon/uds-transport.js +149 -0
  74. package/dist/daemon/uds-transport.js.map +1 -0
  75. package/dist/executor/server.d.ts +20 -0
  76. package/dist/executor/server.d.ts.map +1 -0
  77. package/dist/executor/server.js +375 -0
  78. package/dist/executor/server.js.map +1 -0
  79. package/dist/index.d.ts +2 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +73 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/runtime/daemon-runtime.d.ts +4 -0
  84. package/dist/runtime/daemon-runtime.d.ts.map +1 -0
  85. package/dist/runtime/daemon-runtime.js +4 -0
  86. package/dist/runtime/daemon-runtime.js.map +1 -0
  87. package/dist/runtime/index.d.ts +3 -0
  88. package/dist/runtime/index.d.ts.map +1 -0
  89. package/dist/runtime/index.js +3 -0
  90. package/dist/runtime/index.js.map +1 -0
  91. package/dist/runtime/tool-runtime.d.ts +52 -0
  92. package/dist/runtime/tool-runtime.d.ts.map +1 -0
  93. package/dist/runtime/tool-runtime.js +161 -0
  94. package/dist/runtime/tool-runtime.js.map +1 -0
  95. package/dist/security/chat-completion-adapter.d.ts +443 -0
  96. package/dist/security/chat-completion-adapter.d.ts.map +1 -0
  97. package/dist/security/chat-completion-adapter.js +475 -0
  98. package/dist/security/chat-completion-adapter.js.map +1 -0
  99. package/dist/security/enhanced-evaluator.d.ts +139 -0
  100. package/dist/security/enhanced-evaluator.d.ts.map +1 -0
  101. package/dist/security/enhanced-evaluator.js +1208 -0
  102. package/dist/security/enhanced-evaluator.js.map +1 -0
  103. package/dist/security/evaluator-types.d.ts +614 -0
  104. package/dist/security/evaluator-types.d.ts.map +1 -0
  105. package/dist/security/evaluator-types.js +124 -0
  106. package/dist/security/evaluator-types.js.map +1 -0
  107. package/dist/security/manager.d.ts +76 -0
  108. package/dist/security/manager.d.ts.map +1 -0
  109. package/dist/security/manager.js +445 -0
  110. package/dist/security/manager.js.map +1 -0
  111. package/dist/security/security-llm-prompt-generator.d.ts +105 -0
  112. package/dist/security/security-llm-prompt-generator.d.ts.map +1 -0
  113. package/dist/security/security-llm-prompt-generator.js +323 -0
  114. package/dist/security/security-llm-prompt-generator.js.map +1 -0
  115. package/dist/security/security-tools.d.ts +174 -0
  116. package/dist/security/security-tools.d.ts.map +1 -0
  117. package/dist/security/security-tools.js +159 -0
  118. package/dist/security/security-tools.js.map +1 -0
  119. package/dist/security/validator-criteria-manager.d.ts +47 -0
  120. package/dist/security/validator-criteria-manager.d.ts.map +1 -0
  121. package/dist/security/validator-criteria-manager.js +169 -0
  122. package/dist/security/validator-criteria-manager.js.map +1 -0
  123. package/dist/tools/shell-tools.d.ts +474 -0
  124. package/dist/tools/shell-tools.d.ts.map +1 -0
  125. package/dist/tools/shell-tools.js +861 -0
  126. package/dist/tools/shell-tools.js.map +1 -0
  127. package/dist/types/enhanced-security.d.ts +529 -0
  128. package/dist/types/enhanced-security.d.ts.map +1 -0
  129. package/dist/types/enhanced-security.js +286 -0
  130. package/dist/types/enhanced-security.js.map +1 -0
  131. package/dist/types/index.d.ts +282 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +158 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/types/quick-schemas.d.ts +177 -0
  136. package/dist/types/quick-schemas.d.ts.map +1 -0
  137. package/dist/types/quick-schemas.js +113 -0
  138. package/dist/types/quick-schemas.js.map +1 -0
  139. package/dist/types/response-schemas.d.ts +41 -0
  140. package/dist/types/response-schemas.d.ts.map +1 -0
  141. package/dist/types/response-schemas.js +41 -0
  142. package/dist/types/response-schemas.js.map +1 -0
  143. package/dist/types/schemas.d.ts +578 -0
  144. package/dist/types/schemas.d.ts.map +1 -0
  145. package/dist/types/schemas.js +498 -0
  146. package/dist/types/schemas.js.map +1 -0
  147. package/dist/utils/criteria-manager.d.ts +47 -0
  148. package/dist/utils/criteria-manager.d.ts.map +1 -0
  149. package/dist/utils/criteria-manager.js +228 -0
  150. package/dist/utils/criteria-manager.js.map +1 -0
  151. package/dist/utils/errors.d.ts +27 -0
  152. package/dist/utils/errors.d.ts.map +1 -0
  153. package/dist/utils/errors.js +67 -0
  154. package/dist/utils/errors.js.map +1 -0
  155. package/dist/utils/helpers.d.ts +85 -0
  156. package/dist/utils/helpers.d.ts.map +1 -0
  157. package/dist/utils/helpers.js +400 -0
  158. package/dist/utils/helpers.js.map +1 -0
  159. package/dist/utils/json-repair.d.ts +23 -0
  160. package/dist/utils/json-repair.d.ts.map +1 -0
  161. package/dist/utils/json-repair.js +208 -0
  162. package/dist/utils/json-repair.js.map +1 -0
  163. package/dist/utils/process-utils.d.ts +31 -0
  164. package/dist/utils/process-utils.d.ts.map +1 -0
  165. package/dist/utils/process-utils.js +217 -0
  166. package/dist/utils/process-utils.js.map +1 -0
  167. package/dist/utils/server-helpers.d.ts +4 -0
  168. package/dist/utils/server-helpers.d.ts.map +1 -0
  169. package/dist/utils/server-helpers.js +10 -0
  170. package/dist/utils/server-helpers.js.map +1 -0
  171. package/dist/utils/sse.d.ts +2 -0
  172. package/dist/utils/sse.d.ts.map +1 -0
  173. package/dist/utils/sse.js +6 -0
  174. package/dist/utils/sse.js.map +1 -0
  175. package/package.json +47 -0
@@ -0,0 +1,515 @@
1
+ import { EventEmitter } from 'events';
2
+ import { generateId, getCurrentTimestamp, getSafeEnvironment } from '../utils/helpers.js';
3
+ import { MCPShellError, ResourceNotFoundError, ResourceLimitError, ExecutionError, } from '../utils/errors.js';
4
+ import { ProcessUtils } from '../utils/process-utils.js';
5
+ let cachedPty;
6
+ let cachedPtyPromise;
7
+ async function loadPty() {
8
+ if (cachedPty) {
9
+ return cachedPty;
10
+ }
11
+ if (cachedPtyPromise) {
12
+ return cachedPtyPromise;
13
+ }
14
+ cachedPtyPromise = import('node-pty')
15
+ .then((module) => {
16
+ cachedPty = module;
17
+ return module;
18
+ })
19
+ .catch((error) => {
20
+ cachedPtyPromise = undefined;
21
+ cachedPty = undefined;
22
+ const details = { error: String(error) };
23
+ if (error instanceof Error) {
24
+ details["message"] = error.message;
25
+ details["name"] = error.name;
26
+ details["stack"] = error.stack;
27
+ }
28
+ const maybeErrno = error;
29
+ if (maybeErrno && typeof maybeErrno.code === 'string') {
30
+ details["code"] = maybeErrno.code;
31
+ }
32
+ throw new ExecutionError('Terminal support is unavailable because node-pty failed to load.', details);
33
+ });
34
+ return cachedPtyPromise;
35
+ }
36
+ export class TerminalManager {
37
+ terminals = new Map();
38
+ terminalReadPositions = new Map(); // Track last read position for each terminal
39
+ maxTerminals;
40
+ maxOutputLines;
41
+ maxHistoryLines;
42
+ // イベント駆動のSSE連携用: 端末ごとの出力/終了イベントを発火
43
+ events = new EventEmitter();
44
+ constructor(maxTerminals = 20, maxOutputLines = 10000, maxHistoryLines = 1000) {
45
+ this.maxTerminals = maxTerminals;
46
+ this.maxOutputLines = maxOutputLines;
47
+ this.maxHistoryLines = maxHistoryLines;
48
+ // 多数のSSEクライアントが同一端末に接続しても警告が出ないように上限を緩める
49
+ this.events.setMaxListeners(0); // 0 = 無制限
50
+ }
51
+ // SSE連携等のための読み取り専用の EventEmitter 参照
52
+ getEventEmitter() {
53
+ return this.events;
54
+ }
55
+ async createTerminal(options) {
56
+ // ターミナル数の制限チェック
57
+ if (this.terminals.size >= this.maxTerminals) {
58
+ throw new ResourceLimitError('terminals', this.maxTerminals);
59
+ }
60
+ const terminalId = generateId();
61
+ const now = getCurrentTimestamp();
62
+ // デフォルト値の設定
63
+ const shellType = options.shellType || 'bash';
64
+ const dimensions = options.dimensions || { width: 80, height: 24 };
65
+ // シェルコマンドの決定
66
+ const shellCommand = this.getShellCommand(shellType);
67
+ // 環境変数の準備
68
+ const env = getSafeEnvironment(process.env, options.environmentVariables);
69
+ try {
70
+ // PTYプロセスの作成
71
+ const ptyModule = await loadPty();
72
+ const ptyProcess = ptyModule.spawn(shellCommand.command, shellCommand.args, {
73
+ name: 'xterm-256color',
74
+ cols: dimensions.width,
75
+ rows: dimensions.height,
76
+ cwd: options.workingDirectory || process.cwd(),
77
+ env,
78
+ });
79
+ // ターミナル情報の作成
80
+ const terminalInfo = {
81
+ terminal_id: terminalId,
82
+ session_name: options.sessionName || `terminal-${terminalId.slice(0, 8)}`,
83
+ shell_type: shellType,
84
+ dimensions: dimensions,
85
+ process_id: ptyProcess.pid,
86
+ status: 'active',
87
+ working_directory: options.workingDirectory || process.cwd(),
88
+ created_at: now,
89
+ last_activity: now,
90
+ foreground_process: {
91
+ available: false,
92
+ error: 'Not yet determined',
93
+ },
94
+ };
95
+ // ターミナルセッションの初期化
96
+ const session = {
97
+ info: terminalInfo,
98
+ ptyProcess,
99
+ outputBuffer: [],
100
+ history: [],
101
+ lastActivity: new Date(),
102
+ };
103
+ // 出力の処理
104
+ ptyProcess.onData((data) => {
105
+ this.handleOutput(terminalId, data);
106
+ });
107
+ // プロセス終了の処理
108
+ ptyProcess.onExit((exitCode) => {
109
+ this.handleTerminalExit(terminalId, exitCode);
110
+ });
111
+ this.terminals.set(terminalId, session);
112
+ return terminalInfo;
113
+ }
114
+ catch (error) {
115
+ if (error instanceof MCPShellError) {
116
+ throw error;
117
+ }
118
+ throw new ExecutionError(`Failed to create terminal: ${error}`, {
119
+ shellType: shellType,
120
+ error: String(error),
121
+ });
122
+ }
123
+ }
124
+ getShellCommand(shellType) {
125
+ switch (shellType) {
126
+ case 'bash':
127
+ return { command: '/bin/bash', args: ['--login'] };
128
+ case 'zsh':
129
+ return { command: '/bin/zsh', args: ['--login'] };
130
+ case 'fish':
131
+ return { command: '/usr/bin/fish', args: ['--login'] };
132
+ case 'cmd':
133
+ return { command: 'cmd.exe', args: [] };
134
+ case 'powershell':
135
+ return { command: 'powershell.exe', args: ['-NoLogo'] };
136
+ default:
137
+ return { command: '/bin/bash', args: ['--login'] };
138
+ }
139
+ }
140
+ handleOutput(terminalId, data) {
141
+ const session = this.terminals.get(terminalId);
142
+ if (!session)
143
+ return;
144
+ // 出力をバッファに追加
145
+ const lines = data.split('\n');
146
+ session.outputBuffer.push(...lines);
147
+ // バッファサイズの制限
148
+ if (session.outputBuffer.length > this.maxOutputLines) {
149
+ session.outputBuffer = session.outputBuffer.slice(-this.maxOutputLines);
150
+ }
151
+ // 最終活動時刻の更新
152
+ session.lastActivity = new Date();
153
+ session.info.last_activity = getCurrentTimestamp();
154
+ session.info.status = 'active';
155
+ // 出力イベントを発火(SSEへ伝搬させるため)
156
+ // 端末IDごとのイベントチャンネル: `terminal:output:<id>`
157
+ this.events.emit(`terminal:output:${terminalId}`);
158
+ }
159
+ handleTerminalExit(terminalId, _exitCode) {
160
+ const session = this.terminals.get(terminalId);
161
+ if (!session)
162
+ return;
163
+ session.info.status = 'closed';
164
+ session.info.last_activity = getCurrentTimestamp();
165
+ // 一定時間後にセッションをクリーンアップ
166
+ setTimeout(() => {
167
+ this.terminals.delete(terminalId);
168
+ }, 30000); // 30秒後
169
+ // 終了イベントを発火(SSEへ伝搬)
170
+ this.events.emit(`terminal:exit:${terminalId}`);
171
+ }
172
+ async getTerminal(terminalId, updateForegroundProcess = true) {
173
+ const session = this.terminals.get(terminalId);
174
+ if (!session) {
175
+ throw new ResourceNotFoundError('terminal', terminalId);
176
+ }
177
+ // フォアグラウンドプロセス情報を更新
178
+ if (updateForegroundProcess) {
179
+ await this.updateForegroundProcess(session);
180
+ }
181
+ return { ...session.info };
182
+ }
183
+ listTerminals(filter) {
184
+ let terminals = Array.from(this.terminals.values()).map((session) => ({ ...session.info }));
185
+ // フィルタリング
186
+ if (filter) {
187
+ if (filter.sessionNamePattern) {
188
+ const pattern = new RegExp(filter.sessionNamePattern, 'i');
189
+ terminals = terminals.filter((terminal) => pattern.test(terminal.session_name || ''));
190
+ }
191
+ if (filter.statusFilter && filter.statusFilter !== 'all') {
192
+ terminals = terminals.filter((terminal) => terminal.status === filter.statusFilter);
193
+ }
194
+ }
195
+ const total = terminals.length;
196
+ // 制限
197
+ if (filter?.limit) {
198
+ terminals = terminals.slice(0, filter.limit);
199
+ }
200
+ return { terminals, total };
201
+ }
202
+ async sendInput(terminalId, input, execute = false, controlCodes = false, rawBytes = false, sendTo) {
203
+ const session = this.terminals.get(terminalId);
204
+ if (!session) {
205
+ throw new ResourceNotFoundError('terminal', terminalId);
206
+ }
207
+ if (session.info.status === 'closed') {
208
+ throw new ExecutionError('Terminal is closed');
209
+ }
210
+ // プログラムガードチェック
211
+ let guardResult;
212
+ if (sendTo) {
213
+ const guardPassed = await this.checkProgramGuard(terminalId, sendTo);
214
+ guardResult = { passed: guardPassed, target: sendTo };
215
+ if (!guardPassed) {
216
+ throw new ExecutionError(`Program guard failed: input rejected for target "${sendTo}"`);
217
+ }
218
+ }
219
+ try {
220
+ let inputToSend;
221
+ if (rawBytes) {
222
+ // バイト列として送信(16進数文字列として受け取った場合)
223
+ try {
224
+ const bytes = Buffer.from(input, 'hex');
225
+ inputToSend = bytes.toString('binary');
226
+ }
227
+ catch (error) {
228
+ throw new ExecutionError('Invalid hex string for raw_bytes mode');
229
+ }
230
+ }
231
+ else if (controlCodes) {
232
+ // 制御コードのエスケープシーケンスを解釈
233
+ inputToSend = this.parseControlCodes(input);
234
+ if (execute) {
235
+ inputToSend += '\r';
236
+ }
237
+ }
238
+ else {
239
+ // 通常の入力
240
+ inputToSend = execute ? `${input}\r` : input;
241
+ }
242
+ session.ptyProcess.write(inputToSend);
243
+ // 履歴に追加(executeの場合のみ、制御コードは除く)
244
+ if (execute && input.trim() && !controlCodes && !rawBytes) {
245
+ session.history.push(input.trim());
246
+ if (session.history.length > this.maxHistoryLines) {
247
+ session.history = session.history.slice(-this.maxHistoryLines);
248
+ }
249
+ }
250
+ // 活動時刻の更新
251
+ session.lastActivity = new Date();
252
+ session.info.last_activity = getCurrentTimestamp();
253
+ // フォアグラウンドプロセス情報を非同期で更新(パフォーマンスのため)
254
+ this.updateForegroundProcess(session).catch((err) => {
255
+ console.warn(`Failed to update foreground process for terminal ${terminalId}:`, err);
256
+ });
257
+ const result = {
258
+ success: true,
259
+ timestamp: getCurrentTimestamp(),
260
+ };
261
+ if (guardResult) {
262
+ result.guard_check = guardResult;
263
+ }
264
+ return result;
265
+ }
266
+ catch (error) {
267
+ throw new ExecutionError(`Failed to send input: ${error}`);
268
+ }
269
+ }
270
+ /**
271
+ * 制御コードのエスケープシーケンスを解釈する
272
+ */
273
+ parseControlCodes(input) {
274
+ return (input
275
+ // 一般的な制御文字
276
+ .replace(/\\n/g, '\n')
277
+ .replace(/\\r/g, '\r')
278
+ .replace(/\\t/g, '\t')
279
+ .replace(/\\b/g, '\b')
280
+ .replace(/\\f/g, '\f')
281
+ .replace(/\\v/g, '\v')
282
+ .replace(/\\0/g, '\0')
283
+ // Ctrl+文字のシーケンス (^C = Ctrl+C)
284
+ .replace(/\^([A-Z@\[\]\\^_])/g, (_, char) => {
285
+ const code = char.charCodeAt(0);
286
+ if (code >= 64 && code <= 95) {
287
+ // @ to _
288
+ return String.fromCharCode(code - 64);
289
+ }
290
+ return `^${char}`;
291
+ })
292
+ // 16進数エスケープ (\x1b)
293
+ .replace(/\\x([0-9a-fA-F]{2})/g, (_, hex) => {
294
+ return String.fromCharCode(parseInt(hex, 16));
295
+ })
296
+ // 8進数エスケープ (\033)
297
+ .replace(/\\([0-7]{3})/g, (_, octal) => {
298
+ return String.fromCharCode(parseInt(octal, 8));
299
+ })
300
+ // Unicode エスケープ (\u001b)
301
+ .replace(/\\u([0-9a-fA-F]{4})/g, (_, unicode) => {
302
+ return String.fromCharCode(parseInt(unicode, 16));
303
+ })
304
+ // エスケープされたバックスラッシュ
305
+ .replace(/\\\\/g, '\\'));
306
+ }
307
+ async getOutput(terminalId, startLine, lineCount = 100, includeAnsi = false, includeForegroundProcess = false) {
308
+ const session = this.terminals.get(terminalId);
309
+ if (!session) {
310
+ throw new ResourceNotFoundError('terminal', terminalId);
311
+ }
312
+ // startLineが指定されていない場合は、前回の読み取り位置を使用
313
+ const actualStartLine = startLine !== undefined ? startLine : this.terminalReadPositions.get(terminalId) || 0;
314
+ // フォアグラウンドプロセス情報を更新(要求された場合)
315
+ if (includeForegroundProcess) {
316
+ await this.updateForegroundProcess(session);
317
+ }
318
+ const totalLines = session.outputBuffer.length;
319
+ const endLine = Math.min(actualStartLine + lineCount, totalLines);
320
+ const outputLines = session.outputBuffer.slice(actualStartLine, endLine);
321
+ let output = outputLines.join('\n');
322
+ // ANSI制御コードの除去(オプション)
323
+ if (!includeAnsi) {
324
+ output = this.stripAnsiCodes(output);
325
+ }
326
+ // 次回の読み取り位置を更新
327
+ const nextStartLine = endLine;
328
+ this.terminalReadPositions.set(terminalId, nextStartLine);
329
+ const result = {
330
+ output,
331
+ line_count: outputLines.length,
332
+ total_lines: totalLines,
333
+ has_more: endLine < totalLines,
334
+ start_line: actualStartLine,
335
+ next_start_line: nextStartLine,
336
+ };
337
+ if (includeForegroundProcess) {
338
+ result.foreground_process = session.info.foreground_process;
339
+ }
340
+ return result;
341
+ }
342
+ stripAnsiCodes(text) {
343
+ // ANSI制御コードを除去する正規表現
344
+ return text.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
345
+ }
346
+ /**
347
+ * Reset the read position for a terminal to start reading from the beginning again
348
+ */
349
+ resetReadPosition(terminalId) {
350
+ const session = this.terminals.get(terminalId);
351
+ if (!session) {
352
+ throw new ResourceNotFoundError('terminal', terminalId);
353
+ }
354
+ this.terminalReadPositions.set(terminalId, 0);
355
+ return {
356
+ success: true,
357
+ reset_to: 0,
358
+ };
359
+ }
360
+ /**
361
+ * Set the read position for a terminal to a specific line
362
+ */
363
+ setReadPosition(terminalId, position) {
364
+ const session = this.terminals.get(terminalId);
365
+ if (!session) {
366
+ throw new ResourceNotFoundError('terminal', terminalId);
367
+ }
368
+ const clampedPosition = Math.max(0, Math.min(position, session.outputBuffer.length));
369
+ this.terminalReadPositions.set(terminalId, clampedPosition);
370
+ return {
371
+ success: true,
372
+ set_to: clampedPosition,
373
+ };
374
+ }
375
+ /**
376
+ * Get the current read position for a terminal
377
+ */
378
+ getReadPosition(terminalId) {
379
+ const session = this.terminals.get(terminalId);
380
+ if (!session) {
381
+ throw new ResourceNotFoundError('terminal', terminalId);
382
+ }
383
+ const currentPosition = this.terminalReadPositions.get(terminalId) || 0;
384
+ return {
385
+ current_position: currentPosition,
386
+ total_lines: session.outputBuffer.length,
387
+ };
388
+ }
389
+ resizeTerminal(terminalId, dimensions) {
390
+ const session = this.terminals.get(terminalId);
391
+ if (!session) {
392
+ throw new ResourceNotFoundError('terminal', terminalId);
393
+ }
394
+ if (session.info.status === 'closed') {
395
+ throw new ExecutionError('Terminal is closed');
396
+ }
397
+ try {
398
+ // PTYのサイズを変更
399
+ session.ptyProcess.resize(dimensions.width, dimensions.height);
400
+ // 情報を更新
401
+ session.info.dimensions = dimensions;
402
+ session.info.last_activity = getCurrentTimestamp();
403
+ return {
404
+ success: true,
405
+ updated_at: session.info.last_activity,
406
+ };
407
+ }
408
+ catch (error) {
409
+ throw new ExecutionError(`Failed to resize terminal: ${error}`);
410
+ }
411
+ }
412
+ closeTerminal(terminalId, saveHistory = true) {
413
+ const session = this.terminals.get(terminalId);
414
+ if (!session) {
415
+ throw new ResourceNotFoundError('terminal', terminalId);
416
+ }
417
+ const closedAt = getCurrentTimestamp();
418
+ try {
419
+ // PTYプロセスを終了
420
+ session.ptyProcess.kill();
421
+ // セッション情報を更新
422
+ session.info.status = 'closed';
423
+ session.info.last_activity = closedAt;
424
+ // 履歴保存の処理(今後実装)
425
+ const historySaved = saveHistory && session.history.length > 0;
426
+ // セッションをマップから削除
427
+ this.terminals.delete(terminalId);
428
+ // 読み取り位置もクリーンアップ
429
+ this.terminalReadPositions.delete(terminalId);
430
+ return {
431
+ success: true,
432
+ history_saved: historySaved,
433
+ closed_at: closedAt,
434
+ };
435
+ }
436
+ catch (error) {
437
+ throw new ExecutionError(`Failed to close terminal: ${error}`);
438
+ }
439
+ }
440
+ // アイドル状態のターミナルの検出
441
+ getIdleTerminals(idleMinutes = 30) {
442
+ const now = new Date();
443
+ const idleThreshold = idleMinutes * 60 * 1000; // ミリ秒に変換
444
+ const idleTerminals = [];
445
+ for (const [terminalId, session] of this.terminals) {
446
+ if (session.info.status === 'active') {
447
+ const lastActivity = session.lastActivity.getTime();
448
+ if (now.getTime() - lastActivity > idleThreshold) {
449
+ session.info.status = 'idle';
450
+ idleTerminals.push(terminalId);
451
+ }
452
+ }
453
+ }
454
+ return idleTerminals;
455
+ }
456
+ cleanup() {
457
+ // 全てのターミナルを閉じる
458
+ for (const [terminalId] of this.terminals) {
459
+ try {
460
+ this.closeTerminal(terminalId, false);
461
+ }
462
+ catch (error) {
463
+ // エラーログを内部ログに記録(標準出力を避ける)
464
+ // console.error(`Failed to cleanup terminal ${terminalId}:`, error);
465
+ }
466
+ }
467
+ this.terminals.clear();
468
+ }
469
+ /**
470
+ * フォアグラウンドプロセス情報を更新する
471
+ */
472
+ async updateForegroundProcess(session) {
473
+ try {
474
+ // キャッシュチェック(5秒間有効)
475
+ const now = Date.now();
476
+ if (session.foregroundProcessCache && now - session.foregroundProcessCache.timestamp < 5000) {
477
+ session.info.foreground_process = session.foregroundProcessCache.info;
478
+ return;
479
+ }
480
+ const foregroundInfo = await ProcessUtils.getForegroundProcess(session.ptyProcess);
481
+ // キャッシュを更新
482
+ session.foregroundProcessCache = {
483
+ info: foregroundInfo,
484
+ timestamp: now,
485
+ };
486
+ session.info.foreground_process = foregroundInfo;
487
+ }
488
+ catch (error) {
489
+ session.info.foreground_process = {
490
+ available: false,
491
+ error: `Failed to update foreground process: ${error}`,
492
+ };
493
+ }
494
+ }
495
+ /**
496
+ * プログラムガードをチェックする
497
+ */
498
+ async checkProgramGuard(terminalId, sendTo) {
499
+ if (sendTo === '*') {
500
+ return true; // 条件なし
501
+ }
502
+ const session = this.terminals.get(terminalId);
503
+ if (!session) {
504
+ return false;
505
+ }
506
+ // フォアグラウンドプロセス情報を更新
507
+ await this.updateForegroundProcess(session);
508
+ const foregroundProcess = session.info.foreground_process;
509
+ if (!foregroundProcess?.available || !foregroundProcess.process) {
510
+ return false; // フォアグラウンドプロセスが取得できない場合は拒否
511
+ }
512
+ return ProcessUtils.checkProgramGuard(foregroundProcess.process, sendTo);
513
+ }
514
+ }
515
+ //# sourceMappingURL=terminal-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../../src/core/terminal-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type DaemonStartOptions = {
2
+ socketPath: string;
3
+ cwd?: string;
4
+ branch?: string;
5
+ };
6
+ export declare function resolveDaemonOptionsFromProcess(): DaemonStartOptions;
7
+ export declare function startDaemon(options: DaemonStartOptions): Promise<void>;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAyEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,+BAA+B,IAAI,kBAAkB,CAgBpE;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyZ5E"}