@dotsetlabs/tollgate 0.2.2 → 0.3.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 (194) hide show
  1. package/README.md +138 -0
  2. package/dist/analyzers/filesystem.d.ts +5 -0
  3. package/dist/analyzers/filesystem.d.ts.map +1 -1
  4. package/dist/analyzers/filesystem.js +61 -7
  5. package/dist/analyzers/filesystem.js.map +1 -1
  6. package/dist/analyzers/loader.d.ts +5 -0
  7. package/dist/analyzers/loader.d.ts.map +1 -1
  8. package/dist/analyzers/loader.js +112 -6
  9. package/dist/analyzers/loader.js.map +1 -1
  10. package/dist/analyzers/prompt-injection.d.ts +1 -0
  11. package/dist/analyzers/prompt-injection.d.ts.map +1 -1
  12. package/dist/analyzers/prompt-injection.js +48 -2
  13. package/dist/analyzers/prompt-injection.js.map +1 -1
  14. package/dist/analyzers/shell.d.ts +8 -0
  15. package/dist/analyzers/shell.d.ts.map +1 -1
  16. package/dist/analyzers/shell.js +109 -8
  17. package/dist/analyzers/shell.js.map +1 -1
  18. package/dist/analyzers/sql.d.ts.map +1 -1
  19. package/dist/analyzers/sql.js +8 -7
  20. package/dist/analyzers/sql.js.map +1 -1
  21. package/dist/approval/interactive.d.ts +1 -1
  22. package/dist/approval/interactive.d.ts.map +1 -1
  23. package/dist/approval/interactive.js +13 -1
  24. package/dist/approval/interactive.js.map +1 -1
  25. package/dist/approval/rate-limiter.d.ts +115 -0
  26. package/dist/approval/rate-limiter.d.ts.map +1 -0
  27. package/dist/approval/rate-limiter.js +200 -0
  28. package/dist/approval/rate-limiter.js.map +1 -0
  29. package/dist/approval/url-validator.d.ts +51 -0
  30. package/dist/approval/url-validator.d.ts.map +1 -0
  31. package/dist/approval/url-validator.js +184 -0
  32. package/dist/approval/url-validator.js.map +1 -0
  33. package/dist/approval/webhook.d.ts +48 -0
  34. package/dist/approval/webhook.d.ts.map +1 -1
  35. package/dist/approval/webhook.js +89 -0
  36. package/dist/approval/webhook.js.map +1 -1
  37. package/dist/audit/integrity.d.ts +107 -0
  38. package/dist/audit/integrity.d.ts.map +1 -0
  39. package/dist/audit/integrity.js +191 -0
  40. package/dist/audit/integrity.js.map +1 -0
  41. package/dist/audit/logger.d.ts.map +1 -1
  42. package/dist/audit/logger.js +6 -5
  43. package/dist/audit/logger.js.map +1 -1
  44. package/dist/audit/redaction.js +6 -4
  45. package/dist/audit/redaction.js.map +1 -1
  46. package/dist/cli/commands/guard.d.ts +97 -0
  47. package/dist/cli/commands/guard.d.ts.map +1 -0
  48. package/dist/cli/commands/guard.js +456 -0
  49. package/dist/cli/commands/guard.js.map +1 -0
  50. package/dist/cli/commands/serve.js +1 -1
  51. package/dist/cli/commands/serve.js.map +1 -1
  52. package/dist/cli/index.js +3 -0
  53. package/dist/cli/index.js.map +1 -1
  54. package/dist/cli/input-validation.d.ts +83 -0
  55. package/dist/cli/input-validation.d.ts.map +1 -0
  56. package/dist/cli/input-validation.js +237 -0
  57. package/dist/cli/input-validation.js.map +1 -0
  58. package/dist/cli/ui.js +2 -2
  59. package/dist/cli/ui.js.map +1 -1
  60. package/dist/guard/alternatives/index.d.ts +68 -0
  61. package/dist/guard/alternatives/index.d.ts.map +1 -0
  62. package/dist/guard/alternatives/index.js +224 -0
  63. package/dist/guard/alternatives/index.js.map +1 -0
  64. package/dist/guard/alternatives/registry.d.ts +16 -0
  65. package/dist/guard/alternatives/registry.d.ts.map +1 -0
  66. package/dist/guard/alternatives/registry.js +518 -0
  67. package/dist/guard/alternatives/registry.js.map +1 -0
  68. package/dist/guard/alternatives/types.d.ts +86 -0
  69. package/dist/guard/alternatives/types.d.ts.map +1 -0
  70. package/dist/guard/alternatives/types.js +5 -0
  71. package/dist/guard/alternatives/types.js.map +1 -0
  72. package/dist/guard/approval/enhanced-terminal.d.ts +110 -0
  73. package/dist/guard/approval/enhanced-terminal.d.ts.map +1 -0
  74. package/dist/guard/approval/enhanced-terminal.js +387 -0
  75. package/dist/guard/approval/enhanced-terminal.js.map +1 -0
  76. package/dist/guard/config.d.ts +80 -0
  77. package/dist/guard/config.d.ts.map +1 -0
  78. package/dist/guard/config.js +260 -0
  79. package/dist/guard/config.js.map +1 -0
  80. package/dist/guard/context/directory.d.ts +35 -0
  81. package/dist/guard/context/directory.d.ts.map +1 -0
  82. package/dist/guard/context/directory.js +243 -0
  83. package/dist/guard/context/directory.js.map +1 -0
  84. package/dist/guard/context/environment.d.ts +31 -0
  85. package/dist/guard/context/environment.d.ts.map +1 -0
  86. package/dist/guard/context/environment.js +204 -0
  87. package/dist/guard/context/environment.js.map +1 -0
  88. package/dist/guard/context/git.d.ts +52 -0
  89. package/dist/guard/context/git.d.ts.map +1 -0
  90. package/dist/guard/context/git.js +278 -0
  91. package/dist/guard/context/git.js.map +1 -0
  92. package/dist/guard/context/index.d.ts +64 -0
  93. package/dist/guard/context/index.d.ts.map +1 -0
  94. package/dist/guard/context/index.js +227 -0
  95. package/dist/guard/context/index.js.map +1 -0
  96. package/dist/guard/context/project.d.ts +47 -0
  97. package/dist/guard/context/project.d.ts.map +1 -0
  98. package/dist/guard/context/project.js +281 -0
  99. package/dist/guard/context/project.js.map +1 -0
  100. package/dist/guard/context/types.d.ts +152 -0
  101. package/dist/guard/context/types.d.ts.map +1 -0
  102. package/dist/guard/context/types.js +7 -0
  103. package/dist/guard/context/types.js.map +1 -0
  104. package/dist/guard/engine.d.ts +107 -0
  105. package/dist/guard/engine.d.ts.map +1 -0
  106. package/dist/guard/engine.js +430 -0
  107. package/dist/guard/engine.js.map +1 -0
  108. package/dist/guard/enhanced-engine.d.ts +151 -0
  109. package/dist/guard/enhanced-engine.d.ts.map +1 -0
  110. package/dist/guard/enhanced-engine.js +622 -0
  111. package/dist/guard/enhanced-engine.js.map +1 -0
  112. package/dist/guard/hooks/index.d.ts +50 -0
  113. package/dist/guard/hooks/index.d.ts.map +1 -0
  114. package/dist/guard/hooks/index.js +325 -0
  115. package/dist/guard/hooks/index.js.map +1 -0
  116. package/dist/guard/index.d.ts +29 -0
  117. package/dist/guard/index.d.ts.map +1 -0
  118. package/dist/guard/index.js +31 -0
  119. package/dist/guard/index.js.map +1 -0
  120. package/dist/guard/learning/index.d.ts +136 -0
  121. package/dist/guard/learning/index.d.ts.map +1 -0
  122. package/dist/guard/learning/index.js +314 -0
  123. package/dist/guard/learning/index.js.map +1 -0
  124. package/dist/guard/learning/pattern-extractor.d.ts +50 -0
  125. package/dist/guard/learning/pattern-extractor.d.ts.map +1 -0
  126. package/dist/guard/learning/pattern-extractor.js +372 -0
  127. package/dist/guard/learning/pattern-extractor.js.map +1 -0
  128. package/dist/guard/learning/rule-suggester.d.ts +67 -0
  129. package/dist/guard/learning/rule-suggester.d.ts.map +1 -0
  130. package/dist/guard/learning/rule-suggester.js +345 -0
  131. package/dist/guard/learning/rule-suggester.js.map +1 -0
  132. package/dist/guard/learning/types.d.ts +211 -0
  133. package/dist/guard/learning/types.d.ts.map +1 -0
  134. package/dist/guard/learning/types.js +18 -0
  135. package/dist/guard/learning/types.js.map +1 -0
  136. package/dist/guard/preview/effects.d.ts +15 -0
  137. package/dist/guard/preview/effects.d.ts.map +1 -0
  138. package/dist/guard/preview/effects.js +413 -0
  139. package/dist/guard/preview/effects.js.map +1 -0
  140. package/dist/guard/preview/index.d.ts +49 -0
  141. package/dist/guard/preview/index.d.ts.map +1 -0
  142. package/dist/guard/preview/index.js +196 -0
  143. package/dist/guard/preview/index.js.map +1 -0
  144. package/dist/guard/preview/parser.d.ts +34 -0
  145. package/dist/guard/preview/parser.d.ts.map +1 -0
  146. package/dist/guard/preview/parser.js +292 -0
  147. package/dist/guard/preview/parser.js.map +1 -0
  148. package/dist/guard/preview/types.d.ts +140 -0
  149. package/dist/guard/preview/types.d.ts.map +1 -0
  150. package/dist/guard/preview/types.js +5 -0
  151. package/dist/guard/preview/types.js.map +1 -0
  152. package/dist/guard/reversibility/index.d.ts +88 -0
  153. package/dist/guard/reversibility/index.d.ts.map +1 -0
  154. package/dist/guard/reversibility/index.js +310 -0
  155. package/dist/guard/reversibility/index.js.map +1 -0
  156. package/dist/guard/types.d.ts +192 -0
  157. package/dist/guard/types.d.ts.map +1 -0
  158. package/dist/guard/types.js +8 -0
  159. package/dist/guard/types.js.map +1 -0
  160. package/dist/index.d.ts +10 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +24 -0
  163. package/dist/index.js.map +1 -1
  164. package/dist/orchestrator/manager.d.ts.map +1 -1
  165. package/dist/orchestrator/manager.js +6 -1
  166. package/dist/orchestrator/manager.js.map +1 -1
  167. package/dist/policy/engine.d.ts.map +1 -1
  168. package/dist/policy/engine.js +11 -3
  169. package/dist/policy/engine.js.map +1 -1
  170. package/dist/policy/parser.d.ts.map +1 -1
  171. package/dist/policy/parser.js +3 -0
  172. package/dist/policy/parser.js.map +1 -1
  173. package/dist/proxy/server.d.ts.map +1 -1
  174. package/dist/proxy/server.js +8 -6
  175. package/dist/proxy/server.js.map +1 -1
  176. package/dist/session/manager.d.ts +2 -2
  177. package/dist/session/manager.d.ts.map +1 -1
  178. package/dist/session/manager.js +106 -88
  179. package/dist/session/manager.js.map +1 -1
  180. package/dist/session/signing.d.ts +88 -0
  181. package/dist/session/signing.d.ts.map +1 -0
  182. package/dist/session/signing.js +166 -0
  183. package/dist/session/signing.js.map +1 -0
  184. package/dist/session/types.d.ts +2 -0
  185. package/dist/session/types.d.ts.map +1 -1
  186. package/dist/session/types.js.map +1 -1
  187. package/dist/utils/security-logger.d.ts +146 -0
  188. package/dist/utils/security-logger.d.ts.map +1 -0
  189. package/dist/utils/security-logger.js +222 -0
  190. package/dist/utils/security-logger.js.map +1 -0
  191. package/dist/wizard.d.ts.map +1 -1
  192. package/dist/wizard.js +7 -1
  193. package/dist/wizard.js.map +1 -1
  194. package/package.json +3 -2
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Safer Alternatives Engine for Shell Guardian
3
+ *
4
+ * Suggests safer ways to accomplish the same goal as a risky command.
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import { getAlternativeMappings } from './registry.js';
8
+ export { getAlternativeMappings, ALTERNATIVE_MAPPINGS } from './registry.js';
9
+ /**
10
+ * Default options for the alternatives finder.
11
+ */
12
+ const DEFAULT_OPTIONS = {
13
+ maxAlternatives: 5,
14
+ minSafetyImprovement: 10,
15
+ checkToolAvailability: false,
16
+ };
17
+ /**
18
+ * Find safer alternatives for a command.
19
+ *
20
+ * @param command - The command to find alternatives for
21
+ * @param context - Enhanced context information
22
+ * @param analysis - Risk analysis of the command
23
+ * @param options - Finder options
24
+ * @returns Alternative suggestions
25
+ */
26
+ export function findAlternatives(command, context, analysis, options) {
27
+ const opts = { ...DEFAULT_OPTIONS, ...options };
28
+ const mappings = getAlternativeMappings();
29
+ const matchedPatterns = [];
30
+ const contextFactors = [];
31
+ let alternatives = [];
32
+ // Record context factors
33
+ if (context.project) {
34
+ contextFactors.push(`Project: ${context.project.type}`);
35
+ }
36
+ if (context.git?.isRepo) {
37
+ contextFactors.push('Git repository');
38
+ if (context.git.hasUncommittedChanges) {
39
+ contextFactors.push('Has uncommitted changes');
40
+ }
41
+ }
42
+ if (context.directory) {
43
+ contextFactors.push(`Directory sensitivity: ${context.directory.sensitivity}`);
44
+ }
45
+ if (context.environment?.type !== 'development') {
46
+ contextFactors.push(`Environment: ${context.environment?.type}`);
47
+ }
48
+ // Check each mapping
49
+ for (const mapping of mappings) {
50
+ const match = command.match(mapping.pattern);
51
+ if (match) {
52
+ matchedPatterns.push(mapping.description);
53
+ const generatorContext = {
54
+ context,
55
+ match,
56
+ command,
57
+ };
58
+ try {
59
+ const suggestions = mapping.suggest(generatorContext);
60
+ alternatives.push(...suggestions);
61
+ }
62
+ catch (error) {
63
+ // Skip this mapping on error
64
+ console.error(`Error generating alternatives for ${mapping.description}:`, error);
65
+ }
66
+ }
67
+ }
68
+ // Filter by minimum safety improvement
69
+ alternatives = alternatives.filter(alt => alt.safetyImprovement >= opts.minSafetyImprovement);
70
+ // Check tool availability if requested
71
+ if (opts.checkToolAvailability) {
72
+ alternatives = alternatives.map(alt => {
73
+ if (alt.requiresTool && !isToolAvailable(alt.requiresTool)) {
74
+ return {
75
+ ...alt,
76
+ reason: `${alt.reason} (Requires installing ${alt.requiresTool})`,
77
+ };
78
+ }
79
+ return alt;
80
+ });
81
+ }
82
+ // Sort by safety improvement (highest first)
83
+ alternatives.sort((a, b) => b.safetyImprovement - a.safetyImprovement);
84
+ // Limit number of alternatives
85
+ alternatives = alternatives.slice(0, opts.maxAlternatives);
86
+ // Determine original risk level
87
+ const originalRisk = analysis?.risk || 'write';
88
+ return {
89
+ originalCommand: command,
90
+ originalRisk,
91
+ alternatives,
92
+ noAlternativesReason: alternatives.length === 0
93
+ ? 'No safer alternatives found for this command'
94
+ : undefined,
95
+ metadata: {
96
+ matchedPatterns,
97
+ contextFactors,
98
+ },
99
+ };
100
+ }
101
+ /**
102
+ * Check if a command-line tool is available.
103
+ */
104
+ function isToolAvailable(toolName) {
105
+ try {
106
+ execSync(`which ${toolName}`, { stdio: 'pipe' });
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ }
113
+ /**
114
+ * Format alternatives for display.
115
+ *
116
+ * @param result - Alternative result to format
117
+ * @returns Formatted string for terminal display
118
+ */
119
+ export function formatAlternatives(result) {
120
+ if (result.alternatives.length === 0) {
121
+ return result.noAlternativesReason || 'No alternatives available';
122
+ }
123
+ const lines = [];
124
+ lines.push('Safer alternatives:');
125
+ lines.push('');
126
+ for (let i = 0; i < result.alternatives.length; i++) {
127
+ const alt = result.alternatives[i];
128
+ const num = i + 1;
129
+ const reversibleIcon = alt.reversible ? '↩' : '⚠';
130
+ lines.push(` [${num}] ${alt.command}`);
131
+ lines.push(` ${alt.reason}`);
132
+ lines.push(` Safety: +${alt.safetyImprovement}% ${reversibleIcon} ${alt.reversible ? 'Reversible' : 'Not reversible'}`);
133
+ if (alt.requiresTool) {
134
+ lines.push(` Requires: ${alt.requiresTool}`);
135
+ if (alt.installInstructions) {
136
+ lines.push(` Install: ${alt.installInstructions}`);
137
+ }
138
+ }
139
+ lines.push('');
140
+ }
141
+ return lines.join('\n');
142
+ }
143
+ /**
144
+ * Get the safest alternative if available.
145
+ */
146
+ export function getSafestAlternative(result) {
147
+ if (result.alternatives.length === 0) {
148
+ return undefined;
149
+ }
150
+ // Already sorted by safety improvement
151
+ return result.alternatives[0];
152
+ }
153
+ /**
154
+ * Get only reversible alternatives.
155
+ */
156
+ export function getReversibleAlternatives(result) {
157
+ return result.alternatives.filter(alt => alt.reversible);
158
+ }
159
+ /**
160
+ * Check if better alternatives exist (significant safety improvement).
161
+ */
162
+ export function hasBetterAlternatives(result, minImprovement = 50) {
163
+ return result.alternatives.some(alt => alt.safetyImprovement >= minImprovement);
164
+ }
165
+ /**
166
+ * Create a summary of available alternatives.
167
+ */
168
+ export function summarizeAlternatives(result) {
169
+ if (result.alternatives.length === 0) {
170
+ return 'No safer alternatives available';
171
+ }
172
+ const count = result.alternatives.length;
173
+ const safest = result.alternatives[0];
174
+ const reversibleCount = result.alternatives.filter(a => a.reversible).length;
175
+ return `${count} alternative${count > 1 ? 's' : ''} available. ` +
176
+ `Safest: "${safest.command}" (+${safest.safetyImprovement}% safer). ` +
177
+ `${reversibleCount} reversible.`;
178
+ }
179
+ /**
180
+ * AlternativesFinder class for stateful alternative finding.
181
+ */
182
+ export class AlternativesFinder {
183
+ options;
184
+ toolCache = new Map();
185
+ constructor(options) {
186
+ this.options = { ...DEFAULT_OPTIONS, ...options };
187
+ }
188
+ /**
189
+ * Find alternatives for a command.
190
+ */
191
+ find(command, context, analysis) {
192
+ return findAlternatives(command, context, analysis, this.options);
193
+ }
194
+ /**
195
+ * Check if a tool is available (cached).
196
+ */
197
+ isToolAvailable(toolName) {
198
+ if (this.toolCache.has(toolName)) {
199
+ return this.toolCache.get(toolName);
200
+ }
201
+ const available = isToolAvailable(toolName);
202
+ this.toolCache.set(toolName, available);
203
+ return available;
204
+ }
205
+ /**
206
+ * Get install instructions for missing tools.
207
+ */
208
+ getMissingToolInstructions(result) {
209
+ const missing = new Map();
210
+ for (const alt of result.alternatives) {
211
+ if (alt.requiresTool && !this.isToolAvailable(alt.requiresTool)) {
212
+ missing.set(alt.requiresTool, alt.installInstructions || `Install ${alt.requiresTool}`);
213
+ }
214
+ }
215
+ return missing;
216
+ }
217
+ }
218
+ /**
219
+ * Create an alternatives finder instance.
220
+ */
221
+ export function createAlternativesFinder(options) {
222
+ return new AlternativesFinder(options);
223
+ }
224
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guard/alternatives/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Alternatives Registry for Shell Guardian
3
+ *
4
+ * Comprehensive mapping of dangerous commands to safer alternatives.
5
+ */
6
+ import type { AlternativeMapping } from './types.js';
7
+ /**
8
+ * Registry of alternative command mappings.
9
+ * Sorted by priority (higher priority checked first).
10
+ */
11
+ export declare const ALTERNATIVE_MAPPINGS: AlternativeMapping[];
12
+ /**
13
+ * Get all alternative mappings sorted by priority.
14
+ */
15
+ export declare function getAlternativeMappings(): AlternativeMapping[];
16
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/guard/alternatives/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAC;AAGvE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EA8hBpD,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,EAAE,CAI7D"}