@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
package/dist/cli.js ADDED
@@ -0,0 +1,525 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'child_process';
3
+ import * as crypto from 'crypto';
4
+ import * as fs from 'fs/promises';
5
+ import * as net from 'net';
6
+ import * as os from 'os';
7
+ import * as path from 'path';
8
+ import { z } from 'zod';
9
+ import { AutoCleanupParamsSchema, CleanupSuggestionsParamsSchema, CommandHistoryQueryParamsSchema, FileDeleteParamsSchema, FileListParamsSchema, FileReadParamsSchema, ServerCurrentParamsSchema, ServerDetachParamsSchema, ServerGetParamsSchema, ServerListAttachableParamsSchema, ServerReattachParamsSchema, ServerStartParamsSchema, ServerStopParamsSchema, ShellExecuteParamsSchema, ShellGetExecutionParamsSchema, ShellSetDefaultWorkdirParamsSchema, TerminalCloseParamsSchema, TerminalGetParamsSchema, TerminalListParamsSchema, } from './types/schemas.js';
10
+ import { TerminalOperateParamsSchema } from './types/quick-schemas.js';
11
+ const DEFAULT_BRANCH = 'main';
12
+ const RUNTIME_DIR_NAME = 'mcp-shell';
13
+ const SOCKET_REQUEST_TIMEOUT_MS = 1000;
14
+ const ALLOWED_SUBCMDS = ['status', 'info', 'attach', 'detach', 'reattach', 'stop'];
15
+ const TOOL_SCHEMA_MAP = {
16
+ shell_execute: ShellExecuteParamsSchema,
17
+ process_get_execution: ShellGetExecutionParamsSchema,
18
+ shell_set_default_workdir: ShellSetDefaultWorkdirParamsSchema,
19
+ list_execution_outputs: FileListParamsSchema,
20
+ read_execution_output: FileReadParamsSchema,
21
+ delete_execution_outputs: FileDeleteParamsSchema,
22
+ get_cleanup_suggestions: CleanupSuggestionsParamsSchema,
23
+ perform_auto_cleanup: AutoCleanupParamsSchema,
24
+ terminal_operate: TerminalOperateParamsSchema,
25
+ terminal_list: TerminalListParamsSchema,
26
+ terminal_get_info: TerminalGetParamsSchema,
27
+ terminal_close: TerminalCloseParamsSchema,
28
+ command_history_query: CommandHistoryQueryParamsSchema,
29
+ server_current: ServerCurrentParamsSchema,
30
+ server_list_attachable: ServerListAttachableParamsSchema,
31
+ server_start: ServerStartParamsSchema,
32
+ server_stop: ServerStopParamsSchema,
33
+ server_get: ServerGetParamsSchema,
34
+ server_detach: ServerDetachParamsSchema,
35
+ server_reattach: ServerReattachParamsSchema,
36
+ };
37
+ const HELP_TEXT = `shell-server-cli
38
+
39
+ Usage:
40
+ shell-server-cli [--socket <path>] [--cwd <path>] [--branch <name>] [subcmd [subcmd options]]
41
+
42
+ Subcmd (function name):
43
+ status | info | attach | detach | reattach | stop
44
+ tool <tool-name> [--tool-option <value> ...]
45
+ help
46
+
47
+ Tool name and option mapping:
48
+ - tool-name: kebab-case is converted to internal snake_case
49
+ - --tool-option: --working-directory -> working_directory
50
+ - value parsing: JSON literal if parseable, otherwise string
51
+ - --input-json: JSON text or @path/to/file.json
52
+
53
+ Output query:
54
+ --query <jq-expression>
55
+ - uses system jq when available
56
+ - falls back to simple queries: .foo.bar, .items[0], .items[]
57
+
58
+ Options:
59
+ --socket <path> Override daemon socket path
60
+ --cwd <path> Working directory for socket namespace
61
+ --branch <name> Branch name for socket namespace
62
+ --input-json <json|@file> Tool input JSON object
63
+ --query <expr> Filter output with jq-style query
64
+ -h, --help Show this help message
65
+ -v, --version Show version
66
+
67
+ Environment:
68
+ MCP_SHELL_DAEMON_SOCKET Socket path override
69
+ MCP_SHELL_DAEMON_CWD Working directory override
70
+ MCP_SHELL_DAEMON_BRANCH Branch name override
71
+ `;
72
+ function getArgValue(args, name) {
73
+ const index = args.indexOf(name);
74
+ if (index === -1 || index === args.length - 1) {
75
+ return undefined;
76
+ }
77
+ return args[index + 1];
78
+ }
79
+ function hasFlag(args, name) {
80
+ return args.includes(name);
81
+ }
82
+ function hashCwd(cwd) {
83
+ return crypto.createHash('sha256').update(cwd).digest('hex');
84
+ }
85
+ function resolveSocketPath(cwd, branch) {
86
+ const runtimeRoot = process.env['XDG_RUNTIME_DIR'] || os.tmpdir();
87
+ return path.join(runtimeRoot, RUNTIME_DIR_NAME, hashCwd(cwd), branch, 'daemon.sock');
88
+ }
89
+ function stripConnectionArgs(args) {
90
+ const stripped = [];
91
+ for (let index = 0; index < args.length; index += 1) {
92
+ const value = args[index];
93
+ if (!value) {
94
+ continue;
95
+ }
96
+ if (value === '--socket' ||
97
+ value === '--cwd' ||
98
+ value === '--branch' ||
99
+ value === '--input-json' ||
100
+ value === '--query') {
101
+ index += 1;
102
+ continue;
103
+ }
104
+ stripped.push(value);
105
+ }
106
+ return stripped;
107
+ }
108
+ async function readVersion() {
109
+ const packageUrl = new URL('../package.json', import.meta.url);
110
+ const raw = await fs.readFile(packageUrl, 'utf8');
111
+ const parsed = JSON.parse(raw);
112
+ return parsed.version || '0.0.0';
113
+ }
114
+ function isSubcmd(value) {
115
+ return ALLOWED_SUBCMDS.includes(value);
116
+ }
117
+ function kebabToSnake(value) {
118
+ return value.replace(/-/g, '_');
119
+ }
120
+ function parseScalar(raw) {
121
+ const trimmed = raw.trim();
122
+ if (!trimmed) {
123
+ return raw;
124
+ }
125
+ try {
126
+ return JSON.parse(trimmed);
127
+ }
128
+ catch {
129
+ return raw;
130
+ }
131
+ }
132
+ function parseToolParams(args) {
133
+ const params = {};
134
+ for (let index = 0; index < args.length; index += 1) {
135
+ const token = args[index];
136
+ if (!token || !token.startsWith('--')) {
137
+ continue;
138
+ }
139
+ const rawKey = token.slice(2);
140
+ if (!rawKey) {
141
+ continue;
142
+ }
143
+ const key = kebabToSnake(rawKey);
144
+ const next = args[index + 1];
145
+ if (!next || next.startsWith('--')) {
146
+ params[key] = true;
147
+ continue;
148
+ }
149
+ params[key] = parseScalar(next);
150
+ index += 1;
151
+ }
152
+ return params;
153
+ }
154
+ async function parseInputJson(raw) {
155
+ if (!raw) {
156
+ return {};
157
+ }
158
+ const isFileRef = raw.startsWith('@') || raw.startsWith('file://');
159
+ const rawContent = isFileRef
160
+ ? await fs.readFile(raw.startsWith('@') ? raw.slice(1) : raw.replace('file://', ''), 'utf8')
161
+ : raw;
162
+ let parsed;
163
+ try {
164
+ parsed = JSON.parse(rawContent);
165
+ }
166
+ catch (error) {
167
+ throw new Error(`Failed to parse --input-json: ${String(error)}`);
168
+ }
169
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
170
+ throw new Error('--input-json must be a JSON object.');
171
+ }
172
+ return parsed;
173
+ }
174
+ function parseSimpleQuerySegments(query) {
175
+ if (query === '.') {
176
+ return [];
177
+ }
178
+ if (!query.startsWith('.')) {
179
+ throw new Error('Simple query must start with "."');
180
+ }
181
+ const segments = [];
182
+ let index = 1;
183
+ while (index < query.length) {
184
+ const token = query[index];
185
+ if (token === '.') {
186
+ index += 1;
187
+ continue;
188
+ }
189
+ if (query.startsWith('[]', index)) {
190
+ segments.push({ type: 'iterate' });
191
+ index += 2;
192
+ continue;
193
+ }
194
+ if (token === '[') {
195
+ const closeIndex = query.indexOf(']', index + 1);
196
+ if (closeIndex < 0) {
197
+ throw new Error(`Invalid query: missing ] in ${query}`);
198
+ }
199
+ const content = query.slice(index + 1, closeIndex).trim();
200
+ if (/^-?\d+$/.test(content)) {
201
+ segments.push({ type: 'index', index: Number.parseInt(content, 10) });
202
+ }
203
+ else if ((content.startsWith('"') && content.endsWith('"')) ||
204
+ (content.startsWith("'") && content.endsWith("'"))) {
205
+ segments.push({ type: 'prop', key: content.slice(1, -1) });
206
+ }
207
+ else {
208
+ throw new Error(`Unsupported bracket expression: [${content}]`);
209
+ }
210
+ index = closeIndex + 1;
211
+ continue;
212
+ }
213
+ const rest = query.slice(index);
214
+ const match = rest.match(/^[A-Za-z0-9_-]+/);
215
+ if (!match) {
216
+ throw new Error(`Unsupported query token near: ${rest}`);
217
+ }
218
+ segments.push({ type: 'prop', key: match[0] || '' });
219
+ index += (match[0] || '').length;
220
+ }
221
+ return segments;
222
+ }
223
+ function executeSimpleQuery(data, query) {
224
+ const segments = parseSimpleQuerySegments(query);
225
+ let current = [data];
226
+ for (const segment of segments) {
227
+ const next = [];
228
+ for (const value of current) {
229
+ if (segment.type === 'prop') {
230
+ if (value && typeof value === 'object') {
231
+ const record = value;
232
+ next.push(record[segment.key]);
233
+ }
234
+ else {
235
+ next.push(undefined);
236
+ }
237
+ continue;
238
+ }
239
+ if (segment.type === 'index') {
240
+ if (Array.isArray(value)) {
241
+ next.push(value[segment.index]);
242
+ }
243
+ else {
244
+ next.push(undefined);
245
+ }
246
+ continue;
247
+ }
248
+ if (Array.isArray(value)) {
249
+ for (const item of value) {
250
+ next.push(item);
251
+ }
252
+ }
253
+ else if (value && typeof value === 'object') {
254
+ for (const item of Object.values(value)) {
255
+ next.push(item);
256
+ }
257
+ }
258
+ }
259
+ current = next;
260
+ }
261
+ if (current.length === 1) {
262
+ return current[0];
263
+ }
264
+ return current;
265
+ }
266
+ async function executeNodeJq(data, query) {
267
+ const nodeJqModule = (await import('node-jq'));
268
+ const run = nodeJqModule.default?.run ?? nodeJqModule.run;
269
+ if (!run) {
270
+ throw new Error('node-jq run() not found');
271
+ }
272
+ return run(query, data, { input: 'json', output: 'json' });
273
+ }
274
+ function executeSystemJq(data, query) {
275
+ const jqResult = spawnSync('jq', ['-c', query], {
276
+ input: JSON.stringify(data),
277
+ encoding: 'utf8',
278
+ });
279
+ if (jqResult.error) {
280
+ throw jqResult.error;
281
+ }
282
+ if (jqResult.status !== 0) {
283
+ throw new Error((jqResult.stderr || 'jq query failed').trim());
284
+ }
285
+ const lines = (jqResult.stdout || '')
286
+ .split('\n')
287
+ .map((line) => line.trim())
288
+ .filter((line) => line.length > 0);
289
+ if (lines.length === 0) {
290
+ return null;
291
+ }
292
+ const parsed = lines.map((line) => {
293
+ try {
294
+ return JSON.parse(line);
295
+ }
296
+ catch {
297
+ return line;
298
+ }
299
+ });
300
+ if (parsed.length === 1) {
301
+ return parsed[0];
302
+ }
303
+ return parsed;
304
+ }
305
+ async function executeJq(data, query) {
306
+ const failures = [];
307
+ try {
308
+ return await executeNodeJq(data, query);
309
+ }
310
+ catch (error) {
311
+ failures.push({
312
+ engine: 'node-jq',
313
+ message: error instanceof Error ? error.message : String(error),
314
+ });
315
+ try {
316
+ return executeSystemJq(data, query);
317
+ }
318
+ catch (systemError) {
319
+ failures.push({
320
+ engine: 'system-jq',
321
+ message: systemError instanceof Error ? systemError.message : String(systemError),
322
+ });
323
+ try {
324
+ return executeSimpleQuery(data, query);
325
+ }
326
+ catch (simpleError) {
327
+ failures.push({
328
+ engine: 'built-in-simple',
329
+ message: simpleError instanceof Error ? simpleError.message : String(simpleError),
330
+ });
331
+ const detail = failures
332
+ .map((entry) => ` - ${entry.engine}: ${entry.message}`)
333
+ .join('\n');
334
+ throw new Error(`Failed to evaluate --query "${query}" with all engines:\n${detail}`);
335
+ }
336
+ }
337
+ }
338
+ }
339
+ function unwrapSchema(schema) {
340
+ let current = schema;
341
+ while (current instanceof z.ZodOptional ||
342
+ current instanceof z.ZodNullable ||
343
+ current instanceof z.ZodDefault ||
344
+ current instanceof z.ZodEffects) {
345
+ if (current instanceof z.ZodOptional || current instanceof z.ZodNullable) {
346
+ current = current.unwrap();
347
+ continue;
348
+ }
349
+ if (current instanceof z.ZodDefault) {
350
+ current = current.removeDefault();
351
+ continue;
352
+ }
353
+ current = current.innerType();
354
+ }
355
+ return current;
356
+ }
357
+ function schemaTypeName(schema) {
358
+ const base = unwrapSchema(schema);
359
+ if (base instanceof z.ZodString)
360
+ return 'string';
361
+ if (base instanceof z.ZodNumber)
362
+ return 'number';
363
+ if (base instanceof z.ZodBoolean)
364
+ return 'boolean';
365
+ if (base instanceof z.ZodArray)
366
+ return `array<${schemaTypeName(base.element)}>`;
367
+ if (base instanceof z.ZodObject)
368
+ return 'object';
369
+ if (base instanceof z.ZodEnum)
370
+ return `enum(${base.options.join('|')})`;
371
+ if (base instanceof z.ZodUnion)
372
+ return 'union';
373
+ if (base instanceof z.ZodLiteral)
374
+ return `literal(${String(base.value)})`;
375
+ return 'unknown';
376
+ }
377
+ function renderToolListHelp() {
378
+ const tools = Object.keys(TOOL_SCHEMA_MAP).sort();
379
+ return `Tool list:\n${tools.map((name) => ` - ${name}`).join('\n')}\n\nUse:\n shell-server-cli tool <tool-name> --help\n shell-server-cli tool <tool-name> --input-json '{...}'`;
380
+ }
381
+ function renderToolSchemaHelp(toolName) {
382
+ const schema = TOOL_SCHEMA_MAP[toolName];
383
+ if (!schema) {
384
+ return `Unknown tool: ${toolName}\n\n${renderToolListHelp()}`;
385
+ }
386
+ const base = unwrapSchema(schema);
387
+ if (!(base instanceof z.ZodObject)) {
388
+ return `Tool: ${toolName}\nSchema type: ${schemaTypeName(base)}`;
389
+ }
390
+ const shape = base.shape;
391
+ const keys = Object.keys(shape);
392
+ if (keys.length === 0) {
393
+ return `Tool: ${toolName}\n\nNo parameters.`;
394
+ }
395
+ const lines = keys.map((key) => {
396
+ const field = shape[key];
397
+ const required = field.isOptional() ? 'optional' : 'required';
398
+ const type = schemaTypeName(field);
399
+ const desc = field.description || '';
400
+ const option = `--${key.replace(/_/g, '-')}`;
401
+ return ` ${option} <${type}> (${required})${desc ? ` ${desc}` : ''}`;
402
+ });
403
+ return `Tool: ${toolName}\n\nParameters:\n${lines.join('\n')}`;
404
+ }
405
+ async function printResponse(response, query) {
406
+ const payload = query ? await executeJq(response, query) : response;
407
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
408
+ if (payload &&
409
+ typeof payload === 'object' &&
410
+ 'ok' in payload &&
411
+ payload['ok'] === false) {
412
+ return 1;
413
+ }
414
+ return 0;
415
+ }
416
+ async function requestDaemon(socketPath, request) {
417
+ return new Promise((resolve, reject) => {
418
+ const socket = net.connect({ path: socketPath }, () => {
419
+ socket.write(`${JSON.stringify(request)}\n`);
420
+ });
421
+ let buffer = '';
422
+ const timeout = setTimeout(() => {
423
+ socket.destroy();
424
+ reject(new Error(`Daemon request timed out: ${request.action}`));
425
+ }, SOCKET_REQUEST_TIMEOUT_MS);
426
+ const cleanup = () => {
427
+ clearTimeout(timeout);
428
+ socket.removeAllListeners();
429
+ };
430
+ socket.setEncoding('utf-8');
431
+ socket.on('data', (chunk) => {
432
+ buffer += chunk;
433
+ if (buffer.includes('\n')) {
434
+ socket.end();
435
+ }
436
+ });
437
+ socket.on('end', () => {
438
+ cleanup();
439
+ const line = buffer.trim();
440
+ if (!line) {
441
+ reject(new Error('Daemon response was empty.'));
442
+ return;
443
+ }
444
+ try {
445
+ resolve(JSON.parse(line));
446
+ }
447
+ catch (error) {
448
+ reject(new Error(`Failed to parse daemon response: ${String(error)}`));
449
+ }
450
+ });
451
+ socket.on('error', (error) => {
452
+ cleanup();
453
+ reject(new Error(`Daemon request failed: ${String(error)}`));
454
+ });
455
+ });
456
+ }
457
+ async function run() {
458
+ const args = process.argv.slice(2);
459
+ if (hasFlag(args, '-v') || hasFlag(args, '--version')) {
460
+ process.stdout.write(`${await readVersion()}\n`);
461
+ return;
462
+ }
463
+ const inputJsonRaw = getArgValue(args, '--input-json');
464
+ const query = getArgValue(args, '--query');
465
+ const cwd = getArgValue(args, '--cwd') || process.env['MCP_SHELL_DAEMON_CWD'] || process.cwd();
466
+ const branch = getArgValue(args, '--branch') ||
467
+ process.env['MCP_SHELL_DAEMON_BRANCH'] ||
468
+ process.env['MCP_SHELL_SERVER_BRANCH'] ||
469
+ DEFAULT_BRANCH;
470
+ const socketPath = getArgValue(args, '--socket') ||
471
+ process.env['MCP_SHELL_DAEMON_SOCKET'] ||
472
+ resolveSocketPath(cwd, branch);
473
+ const rest = stripConnectionArgs(args);
474
+ if (hasFlag(rest, '-h') || hasFlag(rest, '--help') || rest[0] === 'help') {
475
+ if (rest[0] === 'tool' && rest[1] && rest[1] !== '--help') {
476
+ const toolName = kebabToSnake(rest[1]);
477
+ process.stdout.write(`${renderToolSchemaHelp(toolName)}\n`);
478
+ return;
479
+ }
480
+ if (rest[0] === 'tool' || rest[1] === 'tool') {
481
+ process.stdout.write(`${renderToolListHelp()}\n`);
482
+ return;
483
+ }
484
+ process.stdout.write(HELP_TEXT);
485
+ return;
486
+ }
487
+ const subcmdRaw = rest[0] || 'status';
488
+ if (subcmdRaw === 'tool') {
489
+ const toolNameRaw = rest[1];
490
+ if (!toolNameRaw) {
491
+ throw new Error('Missing tool name. Usage: shell-server-cli ... tool <tool-name> [--key value]');
492
+ }
493
+ if (toolNameRaw === 'help') {
494
+ process.stdout.write(`${renderToolListHelp()}\n`);
495
+ return;
496
+ }
497
+ if (rest.includes('--help') || rest.includes('-h')) {
498
+ process.stdout.write(`${renderToolSchemaHelp(kebabToSnake(toolNameRaw))}\n`);
499
+ return;
500
+ }
501
+ const toolName = kebabToSnake(toolNameRaw);
502
+ const inputJson = await parseInputJson(inputJsonRaw);
503
+ const params = {
504
+ ...inputJson,
505
+ ...parseToolParams(rest.slice(2)),
506
+ };
507
+ const response = await requestDaemon(socketPath, {
508
+ action: 'tool',
509
+ tool_name: toolName,
510
+ params,
511
+ });
512
+ process.exitCode = await printResponse(response, query);
513
+ return;
514
+ }
515
+ if (!isSubcmd(subcmdRaw)) {
516
+ throw new Error(`Unsupported subcmd: ${subcmdRaw}. Expected one of: ${ALLOWED_SUBCMDS.join(', ')}`);
517
+ }
518
+ const response = await requestDaemon(socketPath, { action: subcmdRaw });
519
+ process.exitCode = await printResponse(response, query);
520
+ }
521
+ run().catch((error) => {
522
+ process.stderr.write(`${String(error)}\n`);
523
+ process.exitCode = 1;
524
+ });
525
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { ShellServerConfig, EnhancedSecurityConfig, BasicSafetyRule } from '../types/enhanced-security.js';
2
+ /**
3
+ * Configuration Manager for MCP Shell Server Enhanced Security
4
+ * Handles loading, saving, and validating configuration files
5
+ */
6
+ export declare class ConfigManager {
7
+ private configPath;
8
+ private config;
9
+ constructor(configPath?: string);
10
+ /**
11
+ * Get default configuration file path
12
+ */
13
+ private getDefaultConfigPath;
14
+ /**
15
+ * Get default configuration
16
+ */
17
+ private getDefaultConfig;
18
+ /**
19
+ * Load configuration from file
20
+ */
21
+ loadConfig(): Promise<ShellServerConfig>;
22
+ /**
23
+ * Save configuration to file
24
+ */
25
+ saveConfig(config?: ShellServerConfig): Promise<void>;
26
+ /**
27
+ * Get current configuration
28
+ */
29
+ getConfig(): ShellServerConfig;
30
+ /**
31
+ * Get enhanced security configuration
32
+ */
33
+ getEnhancedSecurityConfig(): EnhancedSecurityConfig;
34
+ /**
35
+ * Update enhanced security configuration
36
+ */
37
+ updateEnhancedSecurityConfig(updates: Partial<EnhancedSecurityConfig>, saveToFile?: boolean): Promise<EnhancedSecurityConfig>;
38
+ /**
39
+ * Get basic safety rules
40
+ */
41
+ getBasicSafetyRules(): BasicSafetyRule[];
42
+ /**
43
+ * Update basic safety rules
44
+ */
45
+ updateBasicSafetyRules(rules: BasicSafetyRule[], saveToFile?: boolean): Promise<void>;
46
+ /**
47
+ * Get configuration file path
48
+ */
49
+ getConfigPath(): string;
50
+ /**
51
+ * Check if configuration file exists
52
+ */
53
+ configExists(): Promise<boolean>;
54
+ /**
55
+ * Reset configuration to defaults
56
+ */
57
+ resetToDefaults(saveToFile?: boolean): Promise<ShellServerConfig>;
58
+ /**
59
+ * Create backup of current configuration
60
+ */
61
+ createBackup(): Promise<string>;
62
+ /**
63
+ * Get configuration file statistics
64
+ */
65
+ getConfigStats(): Promise<{
66
+ exists: boolean;
67
+ size: number;
68
+ lastModified: Date | null;
69
+ path: string;
70
+ }>;
71
+ /**
72
+ * Validate configuration object
73
+ */
74
+ validateConfig(config: unknown): ShellServerConfig;
75
+ }
76
+ /**
77
+ * Get global configuration manager instance
78
+ */
79
+ export declare function getGlobalConfigManager(configPath?: string): ConfigManager;
80
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,iBAAiB,EAEjB,sBAAsB,EACtB,eAAe,EAGhB,MAAM,+BAA+B,CAAC;AAGvC;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAoB;gBAEtB,UAAU,CAAC,EAAE,MAAM;IAM/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA8B9C;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3D;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;OAEG;IACH,yBAAyB,IAAI,sBAAsB;IAInD;;OAEG;IACG,4BAA4B,CAChC,OAAO,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACxC,UAAU,GAAE,OAAc,GACzB,OAAO,CAAC,sBAAsB,CAAC;IAoBlC;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;OAEG;IACG,sBAAsB,CAC1B,KAAK,EAAE,eAAe,EAAE,EACxB,UAAU,GAAE,OAAc,GACzB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAStC;;OAEG;IACG,eAAe,CAAC,UAAU,GAAE,OAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAU7E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAYrC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAmBF;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB;CAGnD;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAKzE"}