@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,218 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { z } from 'zod';
4
+ import { ShellServerConfigSchema, DEFAULT_ENHANCED_SECURITY_CONFIG, DEFAULT_BASIC_SAFETY_RULES, } from '../types/enhanced-security.js';
5
+ import { getCurrentTimestamp } from '../utils/helpers.js';
6
+ /**
7
+ * Configuration Manager for MCP Shell Server Enhanced Security
8
+ * Handles loading, saving, and validating configuration files
9
+ */
10
+ export class ConfigManager {
11
+ configPath;
12
+ config;
13
+ constructor(configPath) {
14
+ // Default config file path: $HOME/.mcp-shell-server/config.json
15
+ this.configPath = configPath || this.getDefaultConfigPath();
16
+ this.config = this.getDefaultConfig();
17
+ }
18
+ /**
19
+ * Get default configuration file path
20
+ */
21
+ getDefaultConfigPath() {
22
+ const homeDir = process.env['HOME'] || process.env['USERPROFILE'] || '.';
23
+ const configDir = path.join(homeDir, '.mcp-shell-server');
24
+ return path.join(configDir, 'config.json');
25
+ }
26
+ /**
27
+ * Get default configuration
28
+ */
29
+ getDefaultConfig() {
30
+ return {
31
+ server: {
32
+ name: 'MCP Shell Server',
33
+ version: '2.2.0',
34
+ },
35
+ enhanced_security: { ...DEFAULT_ENHANCED_SECURITY_CONFIG },
36
+ basic_safety_rules: [...DEFAULT_BASIC_SAFETY_RULES],
37
+ };
38
+ }
39
+ /**
40
+ * Load configuration from file
41
+ */
42
+ async loadConfig() {
43
+ try {
44
+ // Check if config file exists
45
+ await fs.access(this.configPath);
46
+ // Read file content
47
+ const configData = await fs.readFile(this.configPath, 'utf-8');
48
+ const rawConfig = JSON.parse(configData);
49
+ // Validate with Zod schema
50
+ const validatedConfig = ShellServerConfigSchema.parse(rawConfig);
51
+ this.config = validatedConfig;
52
+ return this.config;
53
+ }
54
+ catch (error) {
55
+ if (error instanceof z.ZodError) {
56
+ throw new Error(`Configuration validation failed: ${error.message}`);
57
+ }
58
+ // Return default config if file doesn't exist
59
+ if (error.code === 'ENOENT') {
60
+ console.warn(`Configuration file not found at ${this.configPath}, using defaults`);
61
+ await this.saveConfig(); // Create default config file
62
+ return this.config;
63
+ }
64
+ throw new Error(`Failed to load configuration: ${error}`);
65
+ }
66
+ }
67
+ /**
68
+ * Save configuration to file
69
+ */
70
+ async saveConfig(config) {
71
+ const configToSave = config || this.config;
72
+ try {
73
+ // Validate with Zod schema
74
+ const validatedConfig = ShellServerConfigSchema.parse(configToSave);
75
+ // Create directory if it doesn't exist
76
+ const configDir = path.dirname(this.configPath);
77
+ await fs.mkdir(configDir, { recursive: true });
78
+ // Save to file (formatted JSON)
79
+ const configJson = JSON.stringify(validatedConfig, null, 2);
80
+ await fs.writeFile(this.configPath, configJson, 'utf-8');
81
+ this.config = validatedConfig;
82
+ }
83
+ catch (error) {
84
+ if (error instanceof z.ZodError) {
85
+ throw new Error(`Configuration validation failed: ${error.message}`);
86
+ }
87
+ throw new Error(`Failed to save configuration: ${error}`);
88
+ }
89
+ }
90
+ /**
91
+ * Get current configuration
92
+ */
93
+ getConfig() {
94
+ return { ...this.config };
95
+ }
96
+ /**
97
+ * Get enhanced security configuration
98
+ */
99
+ getEnhancedSecurityConfig() {
100
+ return { ...(this.config.enhanced_security || DEFAULT_ENHANCED_SECURITY_CONFIG) };
101
+ }
102
+ /**
103
+ * Update enhanced security configuration
104
+ */
105
+ async updateEnhancedSecurityConfig(updates, saveToFile = true) {
106
+ const currentConfig = this.getEnhancedSecurityConfig();
107
+ const newConfig = {
108
+ ...currentConfig,
109
+ ...updates,
110
+ safety_level_thresholds: {
111
+ ...currentConfig.safety_level_thresholds,
112
+ ...updates.safety_level_thresholds,
113
+ },
114
+ };
115
+ this.config.enhanced_security = newConfig;
116
+ if (saveToFile) {
117
+ await this.saveConfig();
118
+ }
119
+ return newConfig;
120
+ }
121
+ /**
122
+ * Get basic safety rules
123
+ */
124
+ getBasicSafetyRules() {
125
+ return [...(this.config.basic_safety_rules || DEFAULT_BASIC_SAFETY_RULES)];
126
+ }
127
+ /**
128
+ * Update basic safety rules
129
+ */
130
+ async updateBasicSafetyRules(rules, saveToFile = true) {
131
+ this.config.basic_safety_rules = [...rules];
132
+ if (saveToFile) {
133
+ await this.saveConfig();
134
+ }
135
+ }
136
+ /**
137
+ * Get configuration file path
138
+ */
139
+ getConfigPath() {
140
+ return this.configPath;
141
+ }
142
+ /**
143
+ * Check if configuration file exists
144
+ */
145
+ async configExists() {
146
+ try {
147
+ await fs.access(this.configPath);
148
+ return true;
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * Reset configuration to defaults
156
+ */
157
+ async resetToDefaults(saveToFile = true) {
158
+ this.config = this.getDefaultConfig();
159
+ if (saveToFile) {
160
+ await this.saveConfig();
161
+ }
162
+ return this.config;
163
+ }
164
+ /**
165
+ * Create backup of current configuration
166
+ */
167
+ async createBackup() {
168
+ const timestamp = getCurrentTimestamp().replace(/[:.]/g, '-');
169
+ const backupPath = `${this.configPath}.backup.${timestamp}`;
170
+ try {
171
+ await fs.copyFile(this.configPath, backupPath);
172
+ return backupPath;
173
+ }
174
+ catch (error) {
175
+ throw new Error(`Failed to create backup: ${error}`);
176
+ }
177
+ }
178
+ /**
179
+ * Get configuration file statistics
180
+ */
181
+ async getConfigStats() {
182
+ try {
183
+ const stats = await fs.stat(this.configPath);
184
+ return {
185
+ exists: true,
186
+ size: stats.size,
187
+ lastModified: stats.mtime,
188
+ path: this.configPath,
189
+ };
190
+ }
191
+ catch (error) {
192
+ return {
193
+ exists: false,
194
+ size: 0,
195
+ lastModified: null,
196
+ path: this.configPath,
197
+ };
198
+ }
199
+ }
200
+ /**
201
+ * Validate configuration object
202
+ */
203
+ validateConfig(config) {
204
+ return ShellServerConfigSchema.parse(config);
205
+ }
206
+ }
207
+ // Singleton instance (optional)
208
+ let globalConfigManager = null;
209
+ /**
210
+ * Get global configuration manager instance
211
+ */
212
+ export function getGlobalConfigManager(configPath) {
213
+ if (!globalConfigManager) {
214
+ globalConfigManager = new ConfigManager(configPath);
215
+ }
216
+ return globalConfigManager;
217
+ }
218
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { CommandHistoryEntry, UserConfirmationPattern, EnhancedSecurityConfig } from '../types/enhanced-security.js';
2
+ /**
3
+ * Enhanced Command History Manager
4
+ * Manages command execution history, evaluation results, and user confirmation patterns
5
+ */
6
+ export declare class CommandHistoryManager {
7
+ private historyPath;
8
+ private history;
9
+ private userPatterns;
10
+ private config;
11
+ constructor(config: EnhancedSecurityConfig, historyPath?: string);
12
+ /**
13
+ * Get default history file path
14
+ */
15
+ private getDefaultHistoryPath;
16
+ /**
17
+ * Load history from file
18
+ */
19
+ loadHistory(): Promise<void>;
20
+ /**
21
+ * Save history to file
22
+ */
23
+ saveHistory(): Promise<void>;
24
+ /**
25
+ * Add new command history entry
26
+ */
27
+ addHistoryEntry(entry: Omit<CommandHistoryEntry, 'execution_id' | 'timestamp'>): Promise<string>;
28
+ /**
29
+ * Update history entry (add evaluation results, etc.)
30
+ */
31
+ updateHistoryEntry(executionId: string, updates: Partial<Omit<CommandHistoryEntry, 'execution_id' | 'timestamp'>>): Promise<boolean>;
32
+ /**
33
+ * Search for similar commands in history
34
+ */
35
+ findSimilarCommands(command: string, limit?: number): CommandHistoryEntry[];
36
+ /**
37
+ * Learn user confirmation patterns
38
+ */
39
+ learnUserConfirmationPattern(entry: CommandHistoryEntry): void;
40
+ /**
41
+ * Predict user confirmation for a command
42
+ */
43
+ predictUserConfirmation(command: string): {
44
+ likely_to_confirm: boolean;
45
+ confidence: number;
46
+ reasoning: string[];
47
+ };
48
+ /**
49
+ * Cleanup old history entries
50
+ */
51
+ private cleanupOldEntries;
52
+ /**
53
+ * Get history statistics
54
+ */
55
+ getHistoryStats(): {
56
+ totalEntries: number;
57
+ entriesWithEvaluation: number;
58
+ entriesWithConfirmation: number;
59
+ topCommands: Array<{
60
+ command: string;
61
+ count: number;
62
+ }>;
63
+ confirmationPatterns: UserConfirmationPattern[];
64
+ };
65
+ /**
66
+ * Search history
67
+ */
68
+ searchHistory(query: {
69
+ command?: string;
70
+ working_directory?: string;
71
+ was_executed?: boolean;
72
+ safety_classification?: string;
73
+ limit?: number;
74
+ }): CommandHistoryEntry[];
75
+ /**
76
+ * Clear all history
77
+ */
78
+ clearHistory(): Promise<void>;
79
+ /**
80
+ * Get history file path
81
+ */
82
+ getHistoryPath(): string;
83
+ }
84
+ //# sourceMappingURL=enhanced-history-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-history-manager.d.ts","sourceRoot":"","sources":["../../src/core/enhanced-history-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EAEnB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAGvC;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,EAAE,sBAAsB,EAAE,WAAW,CAAC,EAAE,MAAM;IAMhE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBlC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,WAAW,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC;IAyBlB;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,GACxE,OAAO,CAAC,OAAO,CAAC;IAmCnB;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,mBAAmB,EAAE;IAiBvE;;OAEG;IACH,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAmD9D;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;QACxC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB;IA8CD;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;IACH,eAAe,IAAI;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,uBAAuB,EAAE,MAAM,CAAC;QAChC,WAAW,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvD,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;KACjD;IAsCD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,mBAAmB,EAAE;IAyBzB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
@@ -0,0 +1,319 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as path from 'path';
3
+ import { CommandHistoryEntrySchema, } from '../types/enhanced-security.js';
4
+ import { getCurrentTimestamp, generateId } from '../utils/helpers.js';
5
+ /**
6
+ * Enhanced Command History Manager
7
+ * Manages command execution history, evaluation results, and user confirmation patterns
8
+ */
9
+ export class CommandHistoryManager {
10
+ historyPath;
11
+ history = [];
12
+ userPatterns = [];
13
+ config;
14
+ constructor(config, historyPath) {
15
+ this.config = config;
16
+ // Default history file path: $HOME/.mcp-shell-server/command-history.json
17
+ this.historyPath = historyPath || this.getDefaultHistoryPath();
18
+ }
19
+ /**
20
+ * Get default history file path
21
+ */
22
+ getDefaultHistoryPath() {
23
+ const homeDir = process.env['HOME'] || process.env['USERPROFILE'] || '.';
24
+ const configDir = path.join(homeDir, '.mcp-shell-server');
25
+ return path.join(configDir, 'command-history.json');
26
+ }
27
+ /**
28
+ * Load history from file
29
+ */
30
+ async loadHistory() {
31
+ try {
32
+ await fs.access(this.historyPath);
33
+ const historyData = await fs.readFile(this.historyPath, 'utf-8');
34
+ const rawHistory = JSON.parse(historyData);
35
+ // Validate each entry
36
+ this.history =
37
+ rawHistory.entries?.map((entry) => CommandHistoryEntrySchema.parse(entry)) || [];
38
+ this.userPatterns = rawHistory.userPatterns || [];
39
+ // Cleanup old entries
40
+ await this.cleanupOldEntries();
41
+ }
42
+ catch (error) {
43
+ if (error.code === 'ENOENT') {
44
+ // Start with empty history if file doesn't exist
45
+ this.history = [];
46
+ this.userPatterns = [];
47
+ }
48
+ else {
49
+ throw new Error(`Failed to load command history: ${error}`);
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Save history to file
55
+ */
56
+ async saveHistory() {
57
+ try {
58
+ const historyDir = path.dirname(this.historyPath);
59
+ await fs.mkdir(historyDir, { recursive: true });
60
+ const historyData = {
61
+ metadata: {
62
+ version: '2.2.0',
63
+ lastUpdated: getCurrentTimestamp(),
64
+ totalEntries: this.history.length,
65
+ retentionDays: this.config.history_retention_days,
66
+ maxEntries: this.config.max_history_entries,
67
+ },
68
+ entries: this.history,
69
+ userPatterns: this.userPatterns,
70
+ };
71
+ const historyJson = JSON.stringify(historyData, null, 2);
72
+ await fs.writeFile(this.historyPath, historyJson, 'utf-8');
73
+ }
74
+ catch (error) {
75
+ throw new Error(`Failed to save command history: ${error}`);
76
+ }
77
+ }
78
+ /**
79
+ * Add new command history entry
80
+ */
81
+ async addHistoryEntry(entry) {
82
+ const fullEntry = {
83
+ ...entry,
84
+ execution_id: generateId(),
85
+ timestamp: getCurrentTimestamp(),
86
+ };
87
+ // Validation
88
+ const validatedEntry = CommandHistoryEntrySchema.parse(fullEntry);
89
+ this.history.unshift(validatedEntry); // Add newest at front
90
+ // Remove old entries if max exceeded
91
+ if (this.history.length > this.config.max_history_entries) {
92
+ this.history = this.history.slice(0, this.config.max_history_entries);
93
+ }
94
+ // Auto-save (optional)
95
+ if (this.config.command_history_enhanced) {
96
+ await this.saveHistory();
97
+ }
98
+ return fullEntry.execution_id;
99
+ }
100
+ /**
101
+ * Update history entry (add evaluation results, etc.)
102
+ */
103
+ async updateHistoryEntry(executionId, updates) {
104
+ const entryIndex = this.history.findIndex((entry) => entry.execution_id === executionId);
105
+ if (entryIndex === -1) {
106
+ return false;
107
+ }
108
+ const currentEntry = this.history[entryIndex];
109
+ if (!currentEntry) {
110
+ return false;
111
+ }
112
+ // Update (preserve required fields)
113
+ const updatedEntry = {
114
+ ...currentEntry,
115
+ ...updates,
116
+ execution_id: currentEntry.execution_id,
117
+ command: currentEntry.command,
118
+ timestamp: currentEntry.timestamp,
119
+ working_directory: currentEntry.working_directory,
120
+ was_executed: currentEntry.was_executed,
121
+ resubmission_count: currentEntry.resubmission_count,
122
+ };
123
+ // Validation
124
+ this.history[entryIndex] = CommandHistoryEntrySchema.parse(updatedEntry);
125
+ // Auto-save
126
+ if (this.config.command_history_enhanced) {
127
+ await this.saveHistory();
128
+ }
129
+ return true;
130
+ }
131
+ /**
132
+ * Search for similar commands in history
133
+ */
134
+ findSimilarCommands(command, limit = 10) {
135
+ const normalizedCommand = command.toLowerCase().trim();
136
+ return this.history
137
+ .filter((entry) => {
138
+ const entryCommand = entry.command.toLowerCase().trim();
139
+ // Exact match, partial match, or first word match
140
+ return (entryCommand === normalizedCommand ||
141
+ entryCommand.includes(normalizedCommand) ||
142
+ normalizedCommand.includes(entryCommand) ||
143
+ entryCommand.split(' ')[0] === normalizedCommand.split(' ')[0]);
144
+ })
145
+ .slice(0, limit);
146
+ }
147
+ /**
148
+ * Learn user confirmation patterns
149
+ */
150
+ learnUserConfirmationPattern(entry) {
151
+ if (!entry.user_confirmation_context || !this.config.enable_resubmission_learning) {
152
+ return;
153
+ }
154
+ const commandWords = entry.command.toLowerCase().trim().split(/\s+/);
155
+ const baseCommand = commandWords[0];
156
+ if (!baseCommand) {
157
+ return; // Skip if command is empty
158
+ }
159
+ // Find existing pattern
160
+ let pattern = this.userPatterns.find((p) => p.command_pattern === baseCommand || new RegExp(p.command_pattern).test(entry.command));
161
+ if (pattern) {
162
+ // Update existing pattern
163
+ const totalCount = pattern.confidence * 10; // Arbitrary weight
164
+ const newCount = totalCount + 1;
165
+ const confirmations = totalCount * pattern.confirmation_rate +
166
+ (entry.user_confirmation_context.user_response ? 1 : 0);
167
+ pattern.confirmation_rate = confirmations / newCount;
168
+ pattern.confidence = Math.min(1.0, newCount / 10);
169
+ // Add reasoning (avoid duplicates)
170
+ const reasoning = entry.user_confirmation_context.user_reasoning;
171
+ if (reasoning && !pattern.typical_reasoning.includes(reasoning)) {
172
+ pattern.typical_reasoning.push(reasoning);
173
+ // Keep maximum 5 entries
174
+ if (pattern.typical_reasoning.length > 5) {
175
+ pattern.typical_reasoning = pattern.typical_reasoning.slice(-5);
176
+ }
177
+ }
178
+ }
179
+ else {
180
+ // Create new pattern
181
+ const newPattern = {
182
+ command_pattern: baseCommand,
183
+ confirmation_rate: entry.user_confirmation_context.user_response ? 1.0 : 0.0,
184
+ typical_reasoning: entry.user_confirmation_context.user_reasoning
185
+ ? [entry.user_confirmation_context.user_reasoning]
186
+ : [],
187
+ confidence: 0.1, // Low initial confidence
188
+ };
189
+ this.userPatterns.push(newPattern);
190
+ }
191
+ }
192
+ /**
193
+ * Predict user confirmation for a command
194
+ */
195
+ predictUserConfirmation(command) {
196
+ const commandWords = command.toLowerCase().trim().split(/\s+/);
197
+ const baseCommand = commandWords[0];
198
+ // Find matching patterns
199
+ const matchingPatterns = this.userPatterns.filter((pattern) => {
200
+ try {
201
+ return (pattern.command_pattern === baseCommand ||
202
+ new RegExp(pattern.command_pattern).test(command));
203
+ }
204
+ catch {
205
+ return pattern.command_pattern === baseCommand;
206
+ }
207
+ });
208
+ if (matchingPatterns.length === 0) {
209
+ return {
210
+ likely_to_confirm: false,
211
+ confidence: 0.0,
212
+ reasoning: [],
213
+ };
214
+ }
215
+ // Weighted average prediction
216
+ let totalWeight = 0;
217
+ let weightedConfirmationRate = 0;
218
+ const allReasoning = [];
219
+ matchingPatterns.forEach((pattern) => {
220
+ const weight = pattern.confidence;
221
+ totalWeight += weight;
222
+ weightedConfirmationRate += pattern.confirmation_rate * weight;
223
+ allReasoning.push(...pattern.typical_reasoning);
224
+ });
225
+ const avgConfirmationRate = totalWeight > 0 ? weightedConfirmationRate / totalWeight : 0;
226
+ const confidence = totalWeight / matchingPatterns.length;
227
+ return {
228
+ likely_to_confirm: avgConfirmationRate > 0.5,
229
+ confidence,
230
+ reasoning: [...new Set(allReasoning)], // Remove duplicates
231
+ };
232
+ }
233
+ /**
234
+ * Cleanup old history entries
235
+ */
236
+ async cleanupOldEntries() {
237
+ const cutoffDate = new Date();
238
+ cutoffDate.setDate(cutoffDate.getDate() - this.config.history_retention_days);
239
+ const initialCount = this.history.length;
240
+ this.history = this.history.filter((entry) => {
241
+ const entryDate = new Date(entry.timestamp);
242
+ return entryDate >= cutoffDate;
243
+ });
244
+ const removedCount = initialCount - this.history.length;
245
+ if (removedCount > 0) {
246
+ console.error(`Cleaned up ${removedCount} old command history entries`);
247
+ }
248
+ }
249
+ /**
250
+ * Get history statistics
251
+ */
252
+ getHistoryStats() {
253
+ const commandCounts = new Map();
254
+ let entriesWithEvaluation = 0;
255
+ let entriesWithConfirmation = 0;
256
+ this.history.forEach((entry) => {
257
+ // Count commands
258
+ const baseCommand = entry.command.split(' ')[0];
259
+ if (baseCommand) {
260
+ commandCounts.set(baseCommand, (commandCounts.get(baseCommand) || 0) + 1);
261
+ }
262
+ // Check evaluation results
263
+ if (entry.llm_evaluation_result || entry.safety_classification) {
264
+ entriesWithEvaluation++;
265
+ }
266
+ // Check confirmations
267
+ if (entry.user_confirmation_context) {
268
+ entriesWithConfirmation++;
269
+ }
270
+ });
271
+ // Get top commands
272
+ const topCommands = Array.from(commandCounts.entries())
273
+ .sort((a, b) => b[1] - a[1])
274
+ .slice(0, 10)
275
+ .map(([command, count]) => ({ command, count }));
276
+ return {
277
+ totalEntries: this.history.length,
278
+ entriesWithEvaluation,
279
+ entriesWithConfirmation,
280
+ topCommands,
281
+ confirmationPatterns: [...this.userPatterns],
282
+ };
283
+ }
284
+ /**
285
+ * Search history
286
+ */
287
+ searchHistory(query) {
288
+ let filtered = this.history;
289
+ if (query.command) {
290
+ const searchTerm = query.command.toLowerCase();
291
+ filtered = filtered.filter((entry) => entry.command.toLowerCase().includes(searchTerm));
292
+ }
293
+ if (query.working_directory) {
294
+ filtered = filtered.filter((entry) => entry.working_directory === query.working_directory);
295
+ }
296
+ if (query.was_executed !== undefined) {
297
+ filtered = filtered.filter((entry) => entry.was_executed === query.was_executed);
298
+ }
299
+ if (query.safety_classification) {
300
+ filtered = filtered.filter((entry) => entry.safety_classification === query.safety_classification);
301
+ }
302
+ return filtered.slice(0, query.limit || 50);
303
+ }
304
+ /**
305
+ * Clear all history
306
+ */
307
+ async clearHistory() {
308
+ this.history = [];
309
+ this.userPatterns = [];
310
+ await this.saveHistory();
311
+ }
312
+ /**
313
+ * Get history file path
314
+ */
315
+ getHistoryPath() {
316
+ return this.historyPath;
317
+ }
318
+ }
319
+ //# sourceMappingURL=enhanced-history-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-history-manager.js","sourceRoot":"","sources":["../../src/core/enhanced-history-manager.ts"],"names":[],"mappings":"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"}