dsh-ssh-tui 0.5.2 → 0.5.4

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 (49) hide show
  1. package/README.en.md +36 -6
  2. package/README.md +24 -13
  3. package/lib/approval-reviewer.js +102 -17
  4. package/lib/approval-reviewer.js.map +1 -1
  5. package/lib/auto-approval.js +312 -29
  6. package/lib/auto-approval.js.map +1 -1
  7. package/lib/footer.js +337 -0
  8. package/lib/footer.js.map +1 -0
  9. package/lib/i18n/en.js +83 -8
  10. package/lib/i18n/en.js.map +1 -1
  11. package/lib/i18n/index.js +1 -0
  12. package/lib/i18n/index.js.map +1 -1
  13. package/lib/i18n/zh.js +83 -8
  14. package/lib/i18n/zh.js.map +1 -1
  15. package/lib/json-args.js +30 -0
  16. package/lib/json-args.js.map +1 -0
  17. package/lib/paint.js +262 -0
  18. package/lib/paint.js.map +1 -0
  19. package/lib/picker.js +407 -56
  20. package/lib/picker.js.map +1 -1
  21. package/lib/plan.js +369 -0
  22. package/lib/plan.js.map +1 -0
  23. package/lib/quota.js +408 -0
  24. package/lib/quota.js.map +1 -0
  25. package/lib/session-list.js +18 -21
  26. package/lib/session-list.js.map +1 -1
  27. package/lib/term-text.js +827 -0
  28. package/lib/term-text.js.map +1 -0
  29. package/lib/tool-present.js +744 -0
  30. package/lib/tool-present.js.map +1 -0
  31. package/lib/transcript-types.js +6 -0
  32. package/lib/transcript-types.js.map +1 -0
  33. package/lib/tui.js +747 -3077
  34. package/lib/tui.js.map +1 -1
  35. package/lib/types/approval-reviewer.d.ts +18 -4
  36. package/lib/types/auto-approval.d.ts +53 -2
  37. package/lib/types/footer.d.ts +155 -0
  38. package/lib/types/i18n/index.d.ts +2 -0
  39. package/lib/types/json-args.d.ts +7 -0
  40. package/lib/types/paint.d.ts +78 -0
  41. package/lib/types/picker.d.ts +99 -7
  42. package/lib/types/plan.d.ts +80 -0
  43. package/lib/types/quota.d.ts +94 -0
  44. package/lib/types/session-list.d.ts +13 -0
  45. package/lib/types/term-text.d.ts +130 -0
  46. package/lib/types/tool-present.d.ts +165 -0
  47. package/lib/types/transcript-types.d.ts +152 -0
  48. package/lib/types/tui.d.ts +39 -665
  49. package/package.json +1 -1
@@ -9,21 +9,28 @@
9
9
  * a rejection when nobody is watching. Real damage containment still comes
10
10
  * from the sandbox preset and git.
11
11
  */
12
+ import { parseJsonArgs } from './json-args.js';
12
13
  /**
13
- * Whole-command danger patterns, checked before anything else. A match keeps
14
- * the interactive prompt regardless of what else the command contains.
14
+ * Whole-command danger patterns, checked before anything else. A match
15
+ * auto-rejects. This is a UX heuristic, not a security boundary: obfuscated
16
+ * or interpreter-wrapped damage still has to be contained by the sandbox.
17
+ *
18
+ * Interpreter `-c`/`-e` is NOT here: the table cannot see the payload, so
19
+ * those shapes ask (AI review) instead of a blanket deny.
15
20
  */
16
21
  export const DANGER_PATTERNS = [
17
- /(?:curl|wget)\b[^|;&]*\|\s*(?:sudo\s+)?(?:ba|z|da|k)?sh\b/, // … | sh
18
- /\brm\s+(?:-\w+\s+)*-\w*[rf]/i, // rm -r / -f / -rf variants
19
- /\brm\s+[^|;&]*\s\/(?:\s|$)/, // rm … / (filesystem root)
22
+ /(?:curl|wget|fetch)\b[^|;&]*\|\s*(?:sudo\s+)?(?:ba|z|da|k|fi)?sh\b/,
23
+ /\beval\b[^|;&]*(?:\$\(|`)/,
24
+ /\brm\b(?:\s+[^\s;|&]+)*\s+-\w*[rf]/i,
25
+ /\brm\b(?:\s+[^\s;|&]+)*\s+--(?:recursive|force|dir)\b/i,
26
+ /\brm\s+(?:--\s+)?\/(?:\s|$)/,
20
27
  /\bsudo\b/,
28
+ /\b(?:chmod|chown)\s+(?:-\w+\s+)*-R\b/,
21
29
  /\bmkfs\.\w/,
22
30
  /\bdd\b[^|;&]*of=\/dev\//,
23
- /\b(?:shutdown|reboot)\b|\binit\s+[06]\b/,
24
- /:\(\)\s*\{.*\};\s*:/, // fork bomb
31
+ /\b(?:shutdown|reboot|halt|poweroff)\b|\binit\s+[06]\b/,
32
+ /:\(\)\s*\{.*\};\s*:/,
25
33
  /\bgit\s+push\b[^|;&]*(?:--force|\s-f\b|\s\+\S)/,
26
- /\b(?:npm|pnpm|yarn)\s+publish\b/,
27
34
  /\bfind\b[^|;&]*\s(?:-exec\b|-delete\b)/,
28
35
  />>?\s*\/dev\/(?:sd|nvme|hd)/,
29
36
  /\bcrontab\s+-r\b/,
@@ -31,9 +38,10 @@ export const DANGER_PATTERNS = [
31
38
  /**
32
39
  * Segment-level allow patterns: low-risk, high-frequency reads, builds, and
33
40
  * tests. A command auto-approves only when EVERY segment matches one of these.
41
+ * `env`/`printenv` stay off this list — process env often holds keys.
34
42
  */
35
43
  export const ALLOW_SEGMENT_PATTERNS = [
36
- /^(?:ls|cat|head|tail|wc|file|stat|du|df|which|whoami|pwd|date|env|printenv|sleep|clear|true|false)\b/,
44
+ /^(?:ls|cat|head|tail|wc|file|stat|du|df|which|whoami|pwd|date|sleep|clear|true|false)\b/,
37
45
  /^(?:grep|rg|fd|ag)\b/,
38
46
  /^(?:git)\s+(?:status|log|diff|show|branch|remote|tag|rev-parse|blame|ls-files|describe|shortlog|worktree\s+list)\b/,
39
47
  /^(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?(?:test|build|lint|typecheck|check|ci)\b/,
@@ -47,55 +55,280 @@ export const ALLOW_SEGMENT_PATTERNS = [
47
55
  /^(?:echo)\b/,
48
56
  /^(?:mkdir|touch)\b/,
49
57
  /^(?:tee)\b/,
58
+ /^(?:cp|mv|install)\b/,
59
+ /^(?:rm)\s+(?!-\w*[rf]|--(?:recursive|force|dir)\b)/,
50
60
  ];
51
- /** Split a shell command into segments at &&, ||, ; and | boundaries. */
52
- function segments(command) {
53
- return command
54
- .split(/(?:\|\||&&|;|\|)/u)
55
- .map(segment => segment.trim())
56
- .filter(segment => segment !== '');
61
+ const READ_SEGMENT = /^(?:ls|cat|head|tail|wc|file|stat|du|df|which|whoami|pwd|date|sleep|clear|true|false|grep|rg|fd|ag)\b/u;
62
+ const MUTATING_SEGMENT = /^(?:cp|mv|install|rm|mkdir|touch|tee|ln|chmod|chown)\b/u;
63
+ const SHELL_TOOL_NAMES = new Set(['bash', 'pwsh']);
64
+ const SAFE_NETWORK_TOOLS = new Set(['web_fetch', 'web_search']);
65
+ const WORKSPACE_FILE_TOOLS = new Set(['read', 'edit', 'write', 'str_replace_editor']);
66
+ const WORKSPACE_WRITE_ESCALATION = 'workspace-write';
67
+ const DANGER_ESCALATION = 'danger-full-access';
68
+ /**
69
+ * Split a shell command into segments at &&, ||, ; and | boundaries,
70
+ * skipping those operators when they sit inside quotes or a here-doc
71
+ * terminator. Nested quoting is best-effort — the sandbox still owns
72
+ * real damage containment.
73
+ */
74
+ export function segments(command) {
75
+ const out = [];
76
+ let current = '';
77
+ let quote = null;
78
+ let escaped = false;
79
+ let hereDoc = null;
80
+ const chars = Array.from(command);
81
+ for (let i = 0; i < chars.length; i += 1) {
82
+ const ch = chars[i] ?? '';
83
+ if (hereDoc !== null) {
84
+ current += ch;
85
+ if (ch === '\n') {
86
+ const lineStart = current.lastIndexOf('\n', current.length - 2) + 1;
87
+ const line = current.slice(lineStart, -1).trim();
88
+ if (line === hereDoc)
89
+ hereDoc = null;
90
+ }
91
+ continue;
92
+ }
93
+ if (quote === null && escaped === false && ch === '\\') {
94
+ escaped = true;
95
+ current += ch;
96
+ continue;
97
+ }
98
+ if (escaped) {
99
+ escaped = false;
100
+ current += ch;
101
+ continue;
102
+ }
103
+ if (quote !== null) {
104
+ current += ch;
105
+ if (ch === quote)
106
+ quote = null;
107
+ continue;
108
+ }
109
+ if (ch === "'" || ch === '"' || ch === '`') {
110
+ quote = ch;
111
+ current += ch;
112
+ continue;
113
+ }
114
+ if (ch === '<' && chars[i + 1] === '<') {
115
+ const rest = chars.slice(i).join('');
116
+ const match = /^(<<[-]?[ \t]*)(?:\\)?(['"]?)(\w+)\2/u.exec(rest);
117
+ if (match !== null && match[3] !== undefined) {
118
+ hereDoc = match[3];
119
+ current += match[0];
120
+ i += match[0].length - 1;
121
+ continue;
122
+ }
123
+ }
124
+ if ((ch === '&' && chars[i + 1] === '&') || (ch === '|' && chars[i + 1] === '|')) {
125
+ pushSegment(out, current);
126
+ current = '';
127
+ i += 1;
128
+ continue;
129
+ }
130
+ if (ch === ';' || ch === '|') {
131
+ pushSegment(out, current);
132
+ current = '';
133
+ continue;
134
+ }
135
+ current += ch;
136
+ }
137
+ pushSegment(out, current);
138
+ return out;
139
+ }
140
+ function pushSegment(out, raw) {
141
+ const trimmed = raw.trim();
142
+ if (trimmed !== '')
143
+ out.push(trimmed);
57
144
  }
58
145
  /** True when the segment redirects into an absolute filesystem path. */
59
146
  function redirectsToRoot(segment) {
60
147
  return /(?:^|\s)>>?\s*(?:\/(?!tmp\/|var\/tmp\/|home\/)|~)/u.test(segment);
61
148
  }
149
+ /**
150
+ * System-sensitive paths. Matching is token-prefix-aware so `src/etc/config.ts`
151
+ * and `/root/project/lib/foo` do not count as `/etc` or `/lib`. `/root` itself
152
+ * (the root home) is sensitive; a workspace under `/root/…` is not.
153
+ */
154
+ const SYSTEM_DIR = /^\/(?:etc|boot|usr|bin|sbin|lib|proc|sys|dev)(?:\/|$)/u;
155
+ const ROOT_HOME_SENSITIVE = /^\/root(?:\/(?:\.ssh|\.gnupg|\.npmrc|\.env|\.config)(?:\/|$)|$)/u;
156
+ const CREDENTIAL_LEAF = /(?:^|\/)(?:\.ssh|\.gnupg|\.npmrc|\.env|id_(?:rsa|ed25519)|\.config\/dsh-publish)(?:\/|$)/u;
157
+ export function touchesSensitivePath(text) {
158
+ return text.split(/\s+/u).some(tokenLooksSensitive);
159
+ }
160
+ function tokenLooksSensitive(token) {
161
+ const trimmed = token.replace(/^['"]|['"]$/gu, '');
162
+ if (trimmed === '')
163
+ return false;
164
+ if (trimmed.startsWith('~/') && CREDENTIAL_LEAF.test(trimmed.slice(1)))
165
+ return true;
166
+ if (SYSTEM_DIR.test(trimmed) || ROOT_HOME_SENSITIVE.test(trimmed))
167
+ return true;
168
+ if (/^\/var\/log(?:\/|$)/u.test(trimmed))
169
+ return true;
170
+ if (CREDENTIAL_LEAF.test(trimmed))
171
+ return true;
172
+ return false;
173
+ }
174
+ function segmentTouchesSensitivePath(segment) {
175
+ return segment.split(/\s+/u).some(tokenLooksSensitive);
176
+ }
177
+ const classified = (decision, risk, reasonKey) => ({ decision, risk, reasonKey });
62
178
  /**
63
179
  * Classify one shell command line. Danger anywhere auto-rejects; otherwise
64
180
  * the command auto-approves only when every segment is a recognized low-risk
65
181
  * pattern — unknown shapes ask (and detach to a rejection when unattended).
66
182
  */
67
183
  export function classifyCommand(command) {
184
+ return classifyCommandDetailed(command).decision;
185
+ }
186
+ const INTERPRETER_WRAPPER = /^(?:python3?|node|nodejs|perl|ruby|php|lua|bash|sh|zsh)\s+-[ce]\b/u;
187
+ export function classifyCommandDetailed(command) {
68
188
  const trimmed = command.trim();
69
189
  if (trimmed === '')
70
- return 'ask';
190
+ return classified('ask', 'medium', 'empty');
191
+ // Interpreter -c/-e payloads are opaque to the table. Ask (AI review)
192
+ // instead of denying because a quoted `rm -rf` happens to match DANGER_PATTERNS.
193
+ if (INTERPRETER_WRAPPER.test(trimmed))
194
+ return classified('ask', 'medium', 'unrecognized');
71
195
  for (const pattern of DANGER_PATTERNS) {
72
196
  if (pattern.test(trimmed))
73
- return 'deny';
197
+ return classified('deny', 'high', 'dangerPattern');
74
198
  }
75
199
  const parts = segments(trimmed);
76
200
  if (parts.length === 0)
77
- return 'ask';
201
+ return classified('ask', 'medium', 'empty');
78
202
  for (const segment of parts) {
79
203
  if (redirectsToRoot(segment))
80
- return 'deny';
81
- if (!ALLOW_SEGMENT_PATTERNS.some(pattern => pattern.test(segment)))
82
- return 'ask';
204
+ return classified('deny', 'high', 'redirectRoot');
205
+ const sensitive = segmentTouchesSensitivePath(segment);
206
+ if (sensitive && (MUTATING_SEGMENT.test(segment) || READ_SEGMENT.test(segment))) {
207
+ return classified('deny', 'high', 'sensitivePath');
208
+ }
209
+ if (!ALLOW_SEGMENT_PATTERNS.some(pattern => pattern.test(segment))) {
210
+ return classified('ask', 'medium', 'unrecognized');
211
+ }
83
212
  }
84
- return 'allow';
213
+ return classified('allow', 'low', 'allowlist');
214
+ }
215
+ function looksLikePrivateUrl(url) {
216
+ const raw = url.trim();
217
+ if (raw === '')
218
+ return false;
219
+ if (/^(?:file|ftp):/iu.test(raw))
220
+ return true;
221
+ try {
222
+ const parsed = new URL(raw.includes('://') ? raw : `https://${raw}`);
223
+ const host = parsed.hostname.toLowerCase();
224
+ if (host === 'localhost' || host === '::1' || host.endsWith('.local'))
225
+ return true;
226
+ if (/^127\./u.test(host) || /^10\./u.test(host) || /^192\.168\./u.test(host) || /^172\.(1[6-9]|2\d|3[0-1])\./u.test(host)) {
227
+ return true;
228
+ }
229
+ return false;
230
+ }
231
+ catch {
232
+ return /(?:localhost|127\.\d|192\.168\.|10\.\d)/u.test(raw);
233
+ }
234
+ }
235
+ function pathFromToolArgs(args) {
236
+ if (args === null)
237
+ return '';
238
+ for (const key of ['file_path', 'path', 'file']) {
239
+ const value = args[key];
240
+ if (typeof value === 'string' && value.trim() !== '')
241
+ return value;
242
+ }
243
+ return '';
244
+ }
245
+ function isWorkspacePath(filePath, workspaceCwd) {
246
+ const trimmed = filePath.trim();
247
+ if (trimmed === '')
248
+ return false;
249
+ if (trimmed.startsWith('~/') || trimmed === '~')
250
+ return false;
251
+ if (workspaceCwd !== undefined && workspaceCwd.trim() !== '') {
252
+ const cwd = workspaceCwd.replace(/\/+$/u, '');
253
+ if (trimmed === cwd || trimmed.startsWith(`${cwd}/`))
254
+ return true;
255
+ // Relative paths are workspace-relative for harness file tools.
256
+ if (!trimmed.startsWith('/'))
257
+ return true;
258
+ return false;
259
+ }
260
+ return !trimmed.startsWith('/');
261
+ }
262
+ function parseEscalation(reason, args) {
263
+ const fromArgs = typeof args?.sandbox_permissions === 'string' ? args.sandbox_permissions.trim() : '';
264
+ const justification = typeof args?.justification === 'string' ? args.justification.trim() : '';
265
+ if (fromArgs !== '')
266
+ return { requested: fromArgs, justification };
267
+ const match = reason?.match(/escalate sandbox to ([^\s:]+)/iu);
268
+ return {
269
+ requested: match?.[1],
270
+ justification: justification !== '' ? justification : (reason ?? '').trim(),
271
+ };
85
272
  }
86
- /** Tools whose output is read-only network information. */
87
- const SAFE_NETWORK_TOOLS = new Set(['web_fetch', 'web_search']);
88
273
  /**
89
274
  * Classify one approval request. `command` is the decoded shell command when
90
275
  * the pending call is a shell tool. 'deny' auto-rejects (the model reads the
91
276
  * rejection and adapts); 'ask' falls through to the interactive prompt.
92
277
  */
93
278
  export function classifyApproval(toolName, command) {
94
- if (SAFE_NETWORK_TOOLS.has(toolName))
95
- return 'allow';
279
+ return classifyApprovalDetailed({ toolName, command }).decision;
280
+ }
281
+ export function classifyApprovalDetailed(input) {
282
+ const toolName = input.toolName;
283
+ const parsed = input.args !== undefined ? parseJsonArgs(input.args) : null;
284
+ const command = (input.command ?? (typeof parsed?.command === 'string' ? parsed.command : undefined));
285
+ const reason = input.reason;
286
+ const workspaceCwd = input.workspaceCwd;
287
+ if (SAFE_NETWORK_TOOLS.has(toolName)) {
288
+ const url = typeof parsed?.url === 'string' ? parsed.url
289
+ : typeof parsed?.query === 'string' ? parsed.query
290
+ : typeof parsed?.q === 'string' ? parsed.q
291
+ : command ?? '';
292
+ if (looksLikePrivateUrl(url) || /^file:/iu.test(url)) {
293
+ return classified('deny', 'high', 'privateUrl');
294
+ }
295
+ if (url.trim() === '')
296
+ return classified('allow', 'low', 'networkRead');
297
+ if (toolName === 'web_search')
298
+ return classified('allow', 'low', 'networkRead');
299
+ // Fetch of a public URL still asks — the page body is untrusted.
300
+ return classified('ask', 'medium', 'networkFetch');
301
+ }
302
+ if (WORKSPACE_FILE_TOOLS.has(toolName)) {
303
+ const filePath = pathFromToolArgs(parsed);
304
+ if (filePath !== '' && segmentTouchesSensitivePath(filePath)) {
305
+ return classified('deny', 'high', 'sensitivePath');
306
+ }
307
+ if (filePath !== '' && isWorkspacePath(filePath, workspaceCwd)) {
308
+ return classified('allow', 'low', 'workspaceFile');
309
+ }
310
+ return classified('ask', 'medium', 'unrecognized');
311
+ }
312
+ const escalation = parseEscalation(reason, parsed);
313
+ if (escalation.requested === WORKSPACE_WRITE_ESCALATION && escalation.justification !== '') {
314
+ return classified('allow', 'low', 'sandboxWiden');
315
+ }
316
+ if (escalation.requested === DANGER_ESCALATION) {
317
+ // Still classify the underlying command; danger-full-access is not a
318
+ // free pass, but a user-authorized home-directory probe should not be
319
+ // denied solely because it asked to widen.
320
+ if (command !== undefined && command.trim() !== '') {
321
+ const inner = classifyCommandDetailed(command);
322
+ if (inner.decision === 'allow')
323
+ return inner;
324
+ if (inner.decision === 'deny')
325
+ return inner;
326
+ }
327
+ return classified('ask', 'medium', 'sandboxDanger');
328
+ }
96
329
  if (command === undefined || command.trim() === '')
97
- return 'ask';
98
- return classifyCommand(command);
330
+ return classified('ask', 'medium', 'unrecognized');
331
+ return classifyCommandDetailed(command);
99
332
  }
100
333
  /**
101
334
  * Decode the shell command of a streamed tool call from its raw JSON args.
@@ -112,13 +345,63 @@ export function commandFromArgs(toolName, args) {
112
345
  return undefined;
113
346
  }
114
347
  }
348
+ function firstNonEmpty(...values) {
349
+ for (const value of values) {
350
+ if (value !== undefined && value.trim() !== '')
351
+ return value;
352
+ }
353
+ return undefined;
354
+ }
355
+ /**
356
+ * Pull a shell command out of an approval-request `reason` when the
357
+ * classifier never saw the tool-call JSON (sandbox escalation, missing
358
+ * callId, or a card whose args were not recorded).
359
+ */
360
+ export function commandFromApprovalReason(reason) {
361
+ if (reason === undefined)
362
+ return undefined;
363
+ const patterns = [
364
+ /(?:command|cmd|shell)\s*[:=]\s*((?:cp|mv|rm|mkdir|touch|cat|ls|install|tee|git|npm|pnpm|yarn|python3?|node)\b[^\n]+)/iu,
365
+ /(?:escalat\w+|提权|升权)[^\n]*:\s*((?:cp|mv|rm|mkdir|touch|cat|ls|install|tee)\b[^\n]+)/iu,
366
+ /(?:run|running|执行)\s*[`'"]([^`'"]+)[`'"]/iu,
367
+ /\$\s+([^\n]+)/u,
368
+ /(?:^|[\s:])((?:cp|mv|rm|mkdir|touch|cat|ls|install|tee)\b[^\n]+)/iu,
369
+ ];
370
+ for (const pattern of patterns) {
371
+ const match = reason.match(pattern);
372
+ const command = match?.[1]?.trim().replace(/^[`'"]|[`'"]$/gu, '');
373
+ if (command !== undefined && command !== '' && /\s/u.test(command))
374
+ return command;
375
+ }
376
+ const trimmed = reason.trim();
377
+ if (/^(?:cp|mv|rm|mkdir|touch|cat|ls|chmod|chown|install|tee)\b/u.test(trimmed))
378
+ return trimmed;
379
+ return undefined;
380
+ }
381
+ /**
382
+ * Resolve the command the classifier should see for one approval request.
383
+ * Prefer the streamed bash/pwsh card, then a command already decoded on the
384
+ * card, then the request's reason text.
385
+ */
386
+ export function commandForApprovalRequest(input) {
387
+ const fromRow = input.row === undefined
388
+ ? undefined
389
+ : firstNonEmpty(commandFromArgs(input.row.name, input.row.args), SHELL_TOOL_NAMES.has(input.row.name) ? input.row.command : undefined);
390
+ const fromReason = commandFromApprovalReason(input.reason);
391
+ return firstNonEmpty(fromRow, SHELL_TOOL_NAMES.has(input.toolName) ? fromReason : undefined);
392
+ }
115
393
  /** Parse the /approval argument into a mode. */
116
394
  export function parseAutoApprovalMode(raw) {
117
395
  const id = raw.trim().toLowerCase();
118
- if (id === 'auto')
396
+ if (id === 'auto' || id === 'on')
119
397
  return 'auto';
120
398
  if (id === 'off' || id === 'ask' || id === 'manual')
121
399
  return 'off';
122
400
  return undefined;
123
401
  }
402
+ /** True when `/approval <arg>` should print the current mode and counters. */
403
+ export function isApprovalStatusArg(raw) {
404
+ const id = raw.trim().toLowerCase();
405
+ return id === 'status' || id === 'stat' || id === 'info' || id === 'show';
406
+ }
124
407
  //# sourceMappingURL=auto-approval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-approval.js","sourceRoot":"","sources":["../src/auto-approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-approval.js","sourceRoot":"","sources":["../src/auto-approval.ts"],"names":[],"mappings":"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"}