@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,31 @@
1
+ import { IPty } from 'node-pty';
2
+ import { SystemProcessInfo, ForegroundProcessInfo } from '../types/index.js';
3
+ export declare class ProcessUtils {
4
+ private static processInfoCache;
5
+ private static readonly CACHE_TTL;
6
+ /**
7
+ * プロセス情報を取得する
8
+ */
9
+ static getProcessInfo(pid: number): Promise<SystemProcessInfo | null>;
10
+ /**
11
+ * ターミナルのフォアグラウンドプロセスを取得する
12
+ */
13
+ static getForegroundProcess(terminalPty: IPty): Promise<ForegroundProcessInfo>;
14
+ /**
15
+ * 指定されたPIDの最新の子プロセスを見つける
16
+ */
17
+ private static findLatestChildProcess;
18
+ /**
19
+ * プログラムガードの条件をチェックする
20
+ */
21
+ static checkProgramGuard(processInfo: SystemProcessInfo | undefined, sendTo: string): boolean;
22
+ /**
23
+ * キャッシュをクリアする
24
+ */
25
+ static clearCache(): void;
26
+ /**
27
+ * 古いキャッシュエントリを削除する
28
+ */
29
+ static cleanupCache(): void;
30
+ }
31
+ //# sourceMappingURL=process-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/utils/process-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAG3B;IACJ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAEzC;;OAEG;WACU,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAiF3E;;OAEG;WACU,oBAAoB,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsDpF;;OAEG;mBACkB,sBAAsB;IAuC3C;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IA6B7F;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,IAAI;CAQ5B"}
@@ -0,0 +1,217 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ export class ProcessUtils {
4
+ static processInfoCache = new Map();
5
+ static CACHE_TTL = 1000; // 1秒のキャッシュ
6
+ /**
7
+ * プロセス情報を取得する
8
+ */
9
+ static async getProcessInfo(pid) {
10
+ // キャッシュチェック
11
+ const cached = this.processInfoCache.get(pid);
12
+ if (cached && Date.now() - cached.timestamp < this.CACHE_TTL) {
13
+ return cached.info;
14
+ }
15
+ try {
16
+ const statPath = `/proc/${pid}/stat`;
17
+ const commPath = `/proc/${pid}/comm`;
18
+ const exePath = `/proc/${pid}/exe`;
19
+ // プロセスが存在するかチェック
20
+ if (!fs.existsSync(statPath)) {
21
+ return null;
22
+ }
23
+ // /proc/{pid}/stat からセッション情報を取得
24
+ const statContent = fs.readFileSync(statPath, 'utf8');
25
+ const statFields = statContent.split(' ');
26
+ if (statFields.length < 22) {
27
+ return null;
28
+ }
29
+ const sessionId = parseInt(statFields[5] || '0');
30
+ const parentPid = parseInt(statFields[3] || '0');
31
+ // プロセス名を取得
32
+ let name = 'unknown';
33
+ try {
34
+ name = fs.readFileSync(commPath, 'utf8').trim();
35
+ }
36
+ catch {
37
+ // fallback: stat からプロセス名を抽出
38
+ const procName = statFields[1];
39
+ if (procName) {
40
+ const commMatch = procName.match(/^\((.+)\)$/);
41
+ if (commMatch && commMatch[1]) {
42
+ name = commMatch[1];
43
+ }
44
+ }
45
+ }
46
+ // フルパスを取得(シンボリックリンクを解決)
47
+ let fullPath;
48
+ try {
49
+ fullPath = fs.readlinkSync(exePath);
50
+ }
51
+ catch {
52
+ // パスが取得できない場合は undefined
53
+ }
54
+ const processInfo = {
55
+ pid,
56
+ name,
57
+ isSessionLeader: sessionId === pid,
58
+ };
59
+ // オプショナルプロパティを追加
60
+ if (fullPath) {
61
+ processInfo.path = fullPath;
62
+ }
63
+ if (sessionId > 0) {
64
+ processInfo.sessionId = sessionId;
65
+ }
66
+ if (parentPid > 0) {
67
+ processInfo.parentPid = parentPid;
68
+ }
69
+ // キャッシュに保存
70
+ this.processInfoCache.set(pid, {
71
+ info: processInfo,
72
+ timestamp: Date.now(),
73
+ });
74
+ return processInfo;
75
+ }
76
+ catch (error) {
77
+ console.error(`Failed to get process info for PID ${pid}:`, error);
78
+ return null;
79
+ }
80
+ }
81
+ /**
82
+ * ターミナルのフォアグラウンドプロセスを取得する
83
+ */
84
+ static async getForegroundProcess(terminalPty) {
85
+ try {
86
+ // pty の file descriptor を取得
87
+ const ptyWithFd = terminalPty;
88
+ const fd = ptyWithFd._fd || ptyWithFd.fd;
89
+ if (!fd) {
90
+ return {
91
+ available: false,
92
+ error: 'PTY file descriptor not available',
93
+ };
94
+ }
95
+ // tcgetpgrp() の代替として /proc/tty/drivers を使用
96
+ // まず、pty のデバイス番号を特定
97
+ let foregroundPid = null;
98
+ try {
99
+ // より直接的なアプローチ: pty のプロセスグループを探す
100
+ const ptyProcess = terminalPty.pid;
101
+ if (ptyProcess) {
102
+ // 子プロセスを探して、最も最近作成されたものをフォアグラウンドとみなす
103
+ foregroundPid = await this.findLatestChildProcess(ptyProcess);
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error('Failed to get foreground process:', error);
108
+ }
109
+ if (!foregroundPid) {
110
+ return {
111
+ available: false,
112
+ error: 'Could not determine foreground process',
113
+ };
114
+ }
115
+ const processInfo = await this.getProcessInfo(foregroundPid);
116
+ if (!processInfo) {
117
+ return {
118
+ available: false,
119
+ error: `Process ${foregroundPid} not found`,
120
+ };
121
+ }
122
+ return {
123
+ process: processInfo,
124
+ available: true,
125
+ };
126
+ }
127
+ catch (error) {
128
+ return {
129
+ available: false,
130
+ error: `Error getting foreground process: ${error}`,
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * 指定されたPIDの最新の子プロセスを見つける
136
+ */
137
+ static async findLatestChildProcess(parentPid) {
138
+ try {
139
+ const procDir = '/proc';
140
+ const entries = fs.readdirSync(procDir);
141
+ let latestChild = null;
142
+ for (const entry of entries) {
143
+ const pid = parseInt(entry);
144
+ if (isNaN(pid))
145
+ continue;
146
+ try {
147
+ const statPath = path.join(procDir, entry, 'stat');
148
+ const statContent = fs.readFileSync(statPath, 'utf8');
149
+ const statFields = statContent.split(' ');
150
+ if (statFields.length < 22)
151
+ continue;
152
+ const ppid = parseInt(statFields[3] || '0');
153
+ if (ppid === parentPid) {
154
+ // 子プロセス発見
155
+ const startTime = parseInt(statFields[21] || '0');
156
+ if (!latestChild || startTime > latestChild.startTime) {
157
+ latestChild = { pid, startTime };
158
+ }
159
+ }
160
+ }
161
+ catch {
162
+ // このプロセスはスキップ
163
+ continue;
164
+ }
165
+ }
166
+ return latestChild ? latestChild.pid : null;
167
+ }
168
+ catch (error) {
169
+ console.error('Error finding child processes:', error);
170
+ return null;
171
+ }
172
+ }
173
+ /**
174
+ * プログラムガードの条件をチェックする
175
+ */
176
+ static checkProgramGuard(processInfo, sendTo) {
177
+ if (sendTo === '*') {
178
+ return true; // 条件なし
179
+ }
180
+ if (!processInfo) {
181
+ return false; // プロセス情報がない場合は拒否
182
+ }
183
+ // セッションリーダーチェック
184
+ if (sendTo === 'sessionleader:' || sendTo === 'loginshell:') {
185
+ return processInfo.isSessionLeader;
186
+ }
187
+ // PIDチェック
188
+ if (sendTo.startsWith('pid:')) {
189
+ const targetPid = parseInt(sendTo.substring(4));
190
+ return processInfo.pid === targetPid;
191
+ }
192
+ // フルパスチェック
193
+ if (sendTo.startsWith('/')) {
194
+ return processInfo.path === sendTo;
195
+ }
196
+ // プロセス名チェック
197
+ return processInfo.name === sendTo;
198
+ }
199
+ /**
200
+ * キャッシュをクリアする
201
+ */
202
+ static clearCache() {
203
+ this.processInfoCache.clear();
204
+ }
205
+ /**
206
+ * 古いキャッシュエントリを削除する
207
+ */
208
+ static cleanupCache() {
209
+ const now = Date.now();
210
+ for (const [pid, cached] of this.processInfoCache.entries()) {
211
+ if (now - cached.timestamp > this.CACHE_TTL * 2) {
212
+ this.processInfoCache.delete(pid);
213
+ }
214
+ }
215
+ }
216
+ }
217
+ //# sourceMappingURL=process-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/utils/process-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type http from 'http';
2
+ export declare function listenServer(server: http.Server, host: string, port: number): Promise<void>;
3
+ export declare function closeServer(server: http.Server): Promise<void>;
4
+ //# sourceMappingURL=server-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/server-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D"}
@@ -0,0 +1,10 @@
1
+ export function listenServer(server, host, port) {
2
+ return new Promise((resolve, reject) => {
3
+ server.listen(port, host, () => resolve());
4
+ server.once('error', reject);
5
+ });
6
+ }
7
+ export function closeServer(server) {
8
+ return new Promise((resolve) => server.close(() => resolve()));
9
+ }
10
+ //# sourceMappingURL=server-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-helpers.js","sourceRoot":"","sources":["../../src/utils/server-helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,IAAY,EAAE,IAAY;IAC1E,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function startHeartbeat(write: (event: string, data: unknown) => void, intervalMs?: number): NodeJS.Timeout;
2
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,EAC7C,UAAU,SAAQ,GACjB,MAAM,CAAC,OAAO,CAIhB"}
@@ -0,0 +1,6 @@
1
+ export function startHeartbeat(write, intervalMs = 10000) {
2
+ return setInterval(() => {
3
+ write('heartbeat', { t: Date.now() });
4
+ }, intervalMs);
5
+ }
6
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,KAA6C,EAC7C,UAAU,GAAG,KAAK;IAElB,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,EAAE,UAAU,CAAC,CAAC;AACjB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@mako10k/shell-server",
3
+ "version": "0.1.0",
4
+ "description": "Shell execution daemon and runtime utilities for MCP tools.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "shell-server": "dist/index.js",
10
+ "shell-server-cli": "dist/cli.js"
11
+ },
12
+ "exports": {
13
+ ".": "./dist/index.js",
14
+ "./runtime": "./dist/runtime/index.js",
15
+ "./tool-runtime": "./dist/runtime/tool-runtime.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/mako10k/shell-server"
25
+ },
26
+ "bugs": {
27
+ "url": "https://github.com/mako10k/shell-server/issues"
28
+ },
29
+ "homepage": "https://github.com/mako10k/shell-server#readme",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "license": "MIT",
34
+ "scripts": {
35
+ "build": "tsc -p tsconfig.json",
36
+ "prepublishOnly": "npm run build",
37
+ "test:e2e": "npm run build && node --test test/e2e-shell-server-cli.test.mjs"
38
+ },
39
+ "dependencies": {
40
+ "@modelcontextprotocol/sdk": "1.17.2",
41
+ "node-jq": "^6.3.1",
42
+ "node-pty": "^1.0.0",
43
+ "uuid": "^10.0.0",
44
+ "zod": "^3.23.8",
45
+ "zod-to-json-schema": "^3.24.5"
46
+ }
47
+ }