@spences10/pi-confirm-destructive 0.0.10 → 0.0.11

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.
@@ -0,0 +1,11 @@
1
+ import type { ExtensionContext } from '@earendil-works/pi-coding-agent';
2
+ import type { DestructiveAction } from './types.js';
3
+ export type ConfirmDecision = 'allow' | 'allow-similar' | 'block';
4
+ export declare function confirm_action(action: DestructiveAction, ctx: ExtensionContext): Promise<ConfirmDecision>;
5
+ export declare function blocked_reason(action: DestructiveAction): string;
6
+ export declare function blocked_bash_result(action: DestructiveAction): {
7
+ output: string;
8
+ exitCode: number;
9
+ cancelled: boolean;
10
+ truncated: boolean;
11
+ };
@@ -0,0 +1,24 @@
1
+ export async function confirm_action(action, ctx) {
2
+ if (!ctx.hasUI)
3
+ return 'block';
4
+ const choice = await ctx.ui.select(`${action.title}\n${action.description}`, ['Allow once', 'Allow similar for this session', 'Block']);
5
+ if (choice === 'Allow once')
6
+ return 'allow';
7
+ if (choice === 'Allow similar for this session') {
8
+ return 'allow-similar';
9
+ }
10
+ ctx.ui.notify('Destructive action blocked', 'info');
11
+ return 'block';
12
+ }
13
+ export function blocked_reason(action) {
14
+ return `Blocked destructive action: ${action.reason}`;
15
+ }
16
+ export function blocked_bash_result(action) {
17
+ return {
18
+ output: `${blocked_reason(action)}\n`,
19
+ exitCode: 130,
20
+ cancelled: false,
21
+ truncated: false,
22
+ };
23
+ }
24
+ //# sourceMappingURL=confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,MAAyB,EACzB,GAAqB;IAErB,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CACjC,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,EAAE,EACxC,CAAC,YAAY,EAAE,gCAAgC,EAAE,OAAO,CAAC,CACzD,CAAC;IAEF,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,MAAM,KAAK,gCAAgC,EAAE,CAAC;QACjD,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAyB;IACvD,OAAO,+BAA+B,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC5D,OAAO;QACN,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI;QACrC,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;KAChB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -92,13 +92,17 @@ function is_path_within(parent, child) {
92
92
  const rel = relative(parent, child);
93
93
  return Boolean(rel) && !rel.startsWith('..') && !isAbsolute(rel);
94
94
  }
95
- function is_agent_temp_path(path) {
95
+ function is_temp_path(path) {
96
96
  const temp_root = resolve(tmpdir());
97
97
  const absolute = resolve(path);
98
- if (!is_path_within(temp_root, absolute))
98
+ return (absolute === temp_root || is_path_within(temp_root, absolute));
99
+ }
100
+ function is_agent_temp_path(path) {
101
+ if (!is_temp_path(path))
99
102
  return false;
100
- const first_segment = relative(temp_root, absolute).split(/[\\/]+/)[0];
101
- return /^my-pi-(audit|sandbox|temp|tmp|work)-/.test(first_segment);
103
+ const temp_root = resolve(tmpdir());
104
+ const first_segment = relative(temp_root, resolve(path)).split(/[\\/]+/)[0];
105
+ return /^my-pi-(audit|sandbox|temp|tmp|work|session)-/.test(first_segment);
102
106
  }
103
107
  function parse_shell_words(command) {
104
108
  const words = [];
@@ -122,6 +126,77 @@ function extract_command_paths(command, command_name) {
122
126
  .slice(command_index + 1)
123
127
  .filter((word) => word !== '--' && !word.startsWith('-'));
124
128
  }
129
+ function option_takes_value(command_name, option) {
130
+ const value_options = {
131
+ mkdir: ['-m', '--mode', '-Z', '--context'],
132
+ touch: ['-r', '--reference', '-d', '--date', '-t'],
133
+ };
134
+ return value_options[command_name]?.includes(option) ?? false;
135
+ }
136
+ function extract_simple_create_paths(command, cwd) {
137
+ if (/[;&|`$()<>]/.test(command))
138
+ return [];
139
+ const words = parse_shell_words(command);
140
+ const command_name = words[0];
141
+ if (!['mkdir', 'touch'].includes(command_name))
142
+ return [];
143
+ const paths = [];
144
+ for (let index = 1; index < words.length; index += 1) {
145
+ const word = words[index];
146
+ if (!word || word === '--')
147
+ continue;
148
+ if (word.startsWith('-')) {
149
+ if (option_takes_value(command_name, word))
150
+ index += 1;
151
+ continue;
152
+ }
153
+ const absolute = resolve(cwd, word);
154
+ if (is_temp_path(absolute) && !existsSync(absolute)) {
155
+ paths.push(absolute);
156
+ }
157
+ }
158
+ return paths;
159
+ }
160
+ function extract_redirect_create_paths(command, cwd) {
161
+ const paths = [];
162
+ const pattern = /(?:^|\s)(?:[12]>>|>>|&>|[12]?>)(?:\s*)("[^"]+"|'[^']+'|\S+)/g;
163
+ let match;
164
+ while ((match = pattern.exec(command))) {
165
+ const raw = match[1];
166
+ const path = raw.replace(/^(['"])(.*)\1$/, '$2');
167
+ const absolute = resolve(cwd, path);
168
+ if (is_temp_path(absolute) && !existsSync(absolute)) {
169
+ paths.push(absolute);
170
+ }
171
+ }
172
+ return paths;
173
+ }
174
+ function extract_bash_create_paths(command, cwd) {
175
+ return [
176
+ ...extract_simple_create_paths(command, cwd),
177
+ ...extract_redirect_create_paths(command, cwd),
178
+ ];
179
+ }
180
+ function command_may_create_temp_path(command) {
181
+ return /^\s*mktemp\b/.test(command);
182
+ }
183
+ function text_content(event) {
184
+ return event.content
185
+ .map((part) => {
186
+ if ('text' in part && typeof part.text === 'string') {
187
+ return part.text;
188
+ }
189
+ return '';
190
+ })
191
+ .join('');
192
+ }
193
+ function extract_created_temp_paths_from_result(event) {
194
+ return text_content(event)
195
+ .split(/\r?\n/)
196
+ .map((line) => line.trim())
197
+ .filter((line) => line && is_temp_path(line) && existsSync(line))
198
+ .map((line) => resolve(line));
199
+ }
125
200
  function describe_path_risk(cwd, paths) {
126
201
  const risky = paths.filter((path) => !is_git_recoverable(cwd, path));
127
202
  if (risky.length === 0)
@@ -329,6 +404,8 @@ function blocked_bash_result(action) {
329
404
  export default async function confirm_destructive(pi) {
330
405
  const allowed_for_session = new Set();
331
406
  const pending_created_files = new Map();
407
+ const pending_bash_created_paths = new Map();
408
+ const bash_may_create_temp_path = new Set();
332
409
  const session_created_files = new Set();
333
410
  function is_allowed(action) {
334
411
  return allowed_for_session.has(action.allow_key);
@@ -353,6 +430,18 @@ export default async function confirm_destructive(pi) {
353
430
  }
354
431
  }
355
432
  }
433
+ if (event.toolName === 'bash') {
434
+ const command = event.input.command;
435
+ if (typeof command === 'string') {
436
+ const paths = extract_bash_create_paths(command, ctx.cwd);
437
+ if (paths.length > 0) {
438
+ pending_bash_created_paths.set(event.toolCallId, paths);
439
+ }
440
+ if (command_may_create_temp_path(command)) {
441
+ bash_may_create_temp_path.add(event.toolCallId);
442
+ }
443
+ }
444
+ }
356
445
  const action = assess_tool_call(event, ctx.cwd, session_created_files);
357
446
  if (!action)
358
447
  return;
@@ -365,11 +454,29 @@ export default async function confirm_destructive(pi) {
365
454
  });
366
455
  pi.on('tool_result', async (event) => {
367
456
  const absolute = pending_created_files.get(event.toolCallId);
368
- if (!absolute)
369
- return;
370
- pending_created_files.delete(event.toolCallId);
371
- if (event.toolName === 'write' && !event.isError) {
372
- session_created_files.add(absolute);
457
+ if (absolute) {
458
+ pending_created_files.delete(event.toolCallId);
459
+ if (event.toolName === 'write' && !event.isError) {
460
+ session_created_files.add(absolute);
461
+ }
462
+ }
463
+ const bash_paths = pending_bash_created_paths.get(event.toolCallId);
464
+ if (bash_paths) {
465
+ pending_bash_created_paths.delete(event.toolCallId);
466
+ if (event.toolName === 'bash' && !event.isError) {
467
+ for (const path of bash_paths) {
468
+ if (existsSync(path))
469
+ session_created_files.add(path);
470
+ }
471
+ }
472
+ }
473
+ if (bash_may_create_temp_path.has(event.toolCallId)) {
474
+ bash_may_create_temp_path.delete(event.toolCallId);
475
+ if (event.toolName === 'bash' && !event.isError) {
476
+ for (const path of extract_created_temp_paths_from_result(event)) {
477
+ session_created_files.add(path);
478
+ }
479
+ }
373
480
  }
374
481
  });
375
482
  pi.on('user_bash', async (event, ctx) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function preview(value: string, max?: number): string;
2
+ export declare function parse_shell_words(command: string): string[];
3
+ export declare function extract_command_paths(command: string, command_name: 'rm' | 'git-rm'): string[] | undefined;
4
+ export declare function extract_bash_create_paths(command: string, cwd: string): string[];
5
+ export declare function command_may_create_temp_path(command: string): boolean;
@@ -0,0 +1,93 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { isAbsolute, relative, resolve } from 'node:path';
4
+ export function preview(value, max = 500) {
5
+ const normalized = value.trim().replace(/\s+/g, ' ');
6
+ return normalized.length > max
7
+ ? `${normalized.slice(0, max - 1)}…`
8
+ : normalized;
9
+ }
10
+ export function parse_shell_words(command) {
11
+ const words = [];
12
+ const pattern = /"((?:\\.|[^"])*)"|'([^']*)'|(\S+)/g;
13
+ let match;
14
+ while ((match = pattern.exec(command))) {
15
+ words.push(match[1] ?? match[2] ?? match[3]);
16
+ }
17
+ return words;
18
+ }
19
+ export function extract_command_paths(command, command_name) {
20
+ if (/[;&|`$()<>]/.test(command))
21
+ return undefined;
22
+ const words = parse_shell_words(command);
23
+ const command_index = command_name === 'rm'
24
+ ? words.findIndex((word) => ['rm', 'rmdir', 'unlink', 'shred'].includes(word))
25
+ : words.findIndex((word, index) => word === 'rm' && words[index - 1] === 'git');
26
+ if (command_index === -1)
27
+ return undefined;
28
+ return words
29
+ .slice(command_index + 1)
30
+ .filter((word) => word !== '--' && !word.startsWith('-'));
31
+ }
32
+ function option_takes_value(command_name, option) {
33
+ const value_options = {
34
+ mkdir: ['-m', '--mode', '-Z', '--context'],
35
+ touch: ['-r', '--reference', '-d', '--date', '-t'],
36
+ };
37
+ return value_options[command_name]?.includes(option) ?? false;
38
+ }
39
+ function is_temp_path(path) {
40
+ const temp_root = resolve(tmpdir());
41
+ const absolute = resolve(path);
42
+ const rel = relative(temp_root, absolute);
43
+ return (absolute === temp_root ||
44
+ (Boolean(rel) && !rel.startsWith('..') && !isAbsolute(rel)));
45
+ }
46
+ function extract_simple_create_paths(command, cwd) {
47
+ if (/[;&|`$()<>]/.test(command))
48
+ return [];
49
+ const words = parse_shell_words(command);
50
+ const command_name = words[0];
51
+ if (!['mkdir', 'touch'].includes(command_name))
52
+ return [];
53
+ const paths = [];
54
+ for (let index = 1; index < words.length; index += 1) {
55
+ const word = words[index];
56
+ if (!word || word === '--')
57
+ continue;
58
+ if (word.startsWith('-')) {
59
+ if (option_takes_value(command_name, word))
60
+ index += 1;
61
+ continue;
62
+ }
63
+ const absolute = resolve(cwd, word);
64
+ if (is_temp_path(absolute) && !existsSync(absolute)) {
65
+ paths.push(absolute);
66
+ }
67
+ }
68
+ return paths;
69
+ }
70
+ function extract_redirect_create_paths(command, cwd) {
71
+ const paths = [];
72
+ const pattern = /(?:^|\s)(?:[12]>>|>>|&>|[12]?>)(?:\s*)("[^"]+"|'[^']+'|\S+)/g;
73
+ let match;
74
+ while ((match = pattern.exec(command))) {
75
+ const raw = match[1];
76
+ const path = raw.replace(/^(['"])(.*)\1$/, '$2');
77
+ const absolute = resolve(cwd, path);
78
+ if (is_temp_path(absolute) && !existsSync(absolute)) {
79
+ paths.push(absolute);
80
+ }
81
+ }
82
+ return paths;
83
+ }
84
+ export function extract_bash_create_paths(command, cwd) {
85
+ return [
86
+ ...extract_simple_create_paths(command, cwd),
87
+ ...extract_redirect_create_paths(command, cwd),
88
+ ];
89
+ }
90
+ export function command_may_create_temp_path(command) {
91
+ return /^\s*mktemp\b/.test(command);
92
+ }
93
+ //# sourceMappingURL=parsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing.js","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolCallEvent } from '@earendil-works/pi-coding-agent';
2
+ import type { DestructiveAction } from './types.js';
3
+ export declare function is_temp_path(path: string): boolean;
4
+ export declare function assess_bash_command(command: string, cwd?: string, session_created_paths?: ReadonlySet<string>): DestructiveAction | undefined;
5
+ export declare function assess_tool_call(event: ToolCallEvent, cwd: string, session_created_paths?: ReadonlySet<string>): DestructiveAction | undefined;
@@ -0,0 +1,283 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { isAbsolute, relative, resolve } from 'node:path';
5
+ import { extract_command_paths, preview } from './parsing.js';
6
+ const DESTRUCTIVE_COMMAND_PATTERNS = [
7
+ {
8
+ pattern: /(^|[;&|]\s*)(npx\s+|pnpx\s+|pnpm\s+exec\s+|bunx\s+)?prisma\s+(migrate\s+reset|db\s+push\b[^;&|]*--force-reset|db\s+execute\b)/,
9
+ reason: 'Runs a potentially destructive Prisma database operation',
10
+ allow_key: 'bash:prisma-destructive',
11
+ },
12
+ {
13
+ pattern: /(^|[;&|]\s*)(psql|mysql|mariadb|sqlite3)\b[^;&|]*\b(drop|delete\s+from|truncate|alter\s+table|update\s+\S+\s+set)\b/i,
14
+ reason: 'Runs destructive SQL through a database CLI',
15
+ allow_key: 'bash:db-cli-destructive-sql',
16
+ },
17
+ {
18
+ pattern: /(^|[;&|]\s*)find\b[^;&|]*(\s-delete\b|-exec\s+(sudo\s+)?rm\b)/,
19
+ reason: 'Deletes files found by find',
20
+ allow_key: 'bash:find-delete',
21
+ },
22
+ {
23
+ pattern: /(^|[;&|]\s*)git\s+clean\b[^;&|]*-[a-zA-Z]*[fdx][a-zA-Z]*/,
24
+ reason: 'Deletes untracked files or directories',
25
+ allow_key: 'bash:git-clean',
26
+ },
27
+ {
28
+ pattern: /(^|[;&|]\s*)git\s+(checkout|restore)\b[^;&|]*(\s--\s+\.\s*$|\s\.\s*$)/,
29
+ reason: 'Discards working tree changes',
30
+ allow_key: 'bash:git-discard-all',
31
+ },
32
+ {
33
+ pattern: /(^|[;&|]\s*)rsync\b[^;&|]*\s--delete\b/,
34
+ reason: 'Deletes destination files during sync',
35
+ allow_key: 'bash:rsync-delete',
36
+ },
37
+ {
38
+ pattern: /(^|[;&|]\s*)truncate\b[^;&|]*(\s-s\s*0\b|\s--size\s*=?\s*0\b)/,
39
+ reason: 'Empties file contents',
40
+ allow_key: 'bash:truncate-zero',
41
+ },
42
+ {
43
+ pattern: /(^|[;&|]\s*)dd\b[^;&|]*\bof=/,
44
+ reason: 'Overwrites a device or file with dd',
45
+ allow_key: 'bash:dd-output',
46
+ },
47
+ {
48
+ pattern: /(^|[;&|]\s*)(mkfs|fdisk|parted|wipefs)\b/,
49
+ reason: 'Modifies disks or filesystems',
50
+ allow_key: 'bash:disk-tool',
51
+ },
52
+ ];
53
+ const DESTRUCTIVE_CUSTOM_TOOL_NAME = /(^|[_-])(delete|destroy|drop|remove|archive|execute_write_query|execute_schema_query|bulk_insert)([_-]|$)/i;
54
+ function git(args, cwd) {
55
+ try {
56
+ return execFileSync('git', ['-C', cwd, ...args], {
57
+ encoding: 'utf-8',
58
+ stdio: ['ignore', 'pipe', 'ignore'],
59
+ }).trim();
60
+ }
61
+ catch {
62
+ return undefined;
63
+ }
64
+ }
65
+ function is_git_repo(cwd) {
66
+ return git(['rev-parse', '--is-inside-work-tree'], cwd) === 'true';
67
+ }
68
+ function get_git_recoverability(cwd, path) {
69
+ if (!is_git_repo(cwd))
70
+ return 'not-git';
71
+ const status = git(['status', '--porcelain=v1', '--', path], cwd);
72
+ if (status === undefined)
73
+ return 'not-git';
74
+ if (status.length > 0) {
75
+ return status.split('\n').some((line) => line.startsWith('??'))
76
+ ? 'untracked'
77
+ : 'tracked-dirty';
78
+ }
79
+ const tracked = git(['ls-files', '--', path], cwd);
80
+ return tracked ? 'tracked-clean' : 'untracked';
81
+ }
82
+ function is_git_recoverable(cwd, path) {
83
+ return get_git_recoverability(cwd, path) === 'tracked-clean';
84
+ }
85
+ function is_path_within(parent, child) {
86
+ const rel = relative(parent, child);
87
+ return Boolean(rel) && !rel.startsWith('..') && !isAbsolute(rel);
88
+ }
89
+ export function is_temp_path(path) {
90
+ const temp_root = resolve(tmpdir());
91
+ const absolute = resolve(path);
92
+ return (absolute === temp_root || is_path_within(temp_root, absolute));
93
+ }
94
+ function is_agent_temp_path(path) {
95
+ if (!is_temp_path(path))
96
+ return false;
97
+ const temp_root = resolve(tmpdir());
98
+ const first_segment = relative(temp_root, resolve(path)).split(/[\\/]+/)[0];
99
+ return /^my-pi-(audit|sandbox|temp|tmp|work|session)-/.test(first_segment);
100
+ }
101
+ function describe_path_risk(cwd, paths) {
102
+ const risky = paths.filter((path) => !is_git_recoverable(cwd, path));
103
+ if (risky.length === 0)
104
+ return 'Deletes git-recoverable files';
105
+ const risks = new Set(risky.map((path) => get_git_recoverability(cwd, path)));
106
+ if (risks.has('untracked')) {
107
+ return 'Deletes untracked files or directories that git cannot restore';
108
+ }
109
+ if (risks.has('tracked-dirty')) {
110
+ return 'Deletes files with uncommitted changes';
111
+ }
112
+ return 'Deletes files outside git recovery';
113
+ }
114
+ function assess_rm_command(command, cwd, session_created_paths = new Set()) {
115
+ if (!/(^|[;&|]\s*)(sudo\s+)?(rm|rmdir|unlink|shred)\b/.test(command)) {
116
+ return undefined;
117
+ }
118
+ const paths = extract_command_paths(command, 'rm');
119
+ if (paths && paths.length > 0) {
120
+ if (paths.every((path) => {
121
+ const absolute = resolve(cwd, path);
122
+ return (session_created_paths.has(absolute) ||
123
+ is_agent_temp_path(absolute));
124
+ })) {
125
+ return undefined;
126
+ }
127
+ if (paths.every((path) => is_git_recoverable(cwd, path))) {
128
+ return undefined;
129
+ }
130
+ }
131
+ const reason = paths?.length
132
+ ? describe_path_risk(cwd, paths)
133
+ : 'Deletes files or directories';
134
+ return {
135
+ title: 'Confirm destructive command?',
136
+ description: `${reason}: ${preview(command)}`,
137
+ reason,
138
+ allow_key: 'bash:rm-risky',
139
+ };
140
+ }
141
+ function assess_git_rm_command(command, cwd) {
142
+ if (!/(^|[;&|]\s*)git\s+rm\b/.test(command))
143
+ return undefined;
144
+ if (/\s-f\b|\s--force\b/.test(command)) {
145
+ return {
146
+ title: 'Confirm forced git removal?',
147
+ description: `Forced git removal can discard uncommitted file changes: ${preview(command)}`,
148
+ reason: 'Force-removes files from git',
149
+ allow_key: 'bash:git-rm-force',
150
+ };
151
+ }
152
+ const paths = extract_command_paths(command, 'git-rm');
153
+ if (paths &&
154
+ paths.length > 0 &&
155
+ paths.every((path) => is_git_recoverable(cwd, path))) {
156
+ return undefined;
157
+ }
158
+ const reason = paths?.length
159
+ ? describe_path_risk(cwd, paths)
160
+ : 'Deletes tracked files from git';
161
+ return {
162
+ title: 'Confirm git removal?',
163
+ description: `${reason}: ${preview(command)}`,
164
+ reason,
165
+ allow_key: 'bash:git-rm-risky',
166
+ };
167
+ }
168
+ function assess_git_reset_hard(command, cwd) {
169
+ if (!/(^|[;&|]\s*)git\s+reset\b[^;&|]*--hard\b/.test(command)) {
170
+ return undefined;
171
+ }
172
+ if (git(['status', '--porcelain=v1'], cwd) === '')
173
+ return undefined;
174
+ return {
175
+ title: 'Confirm hard reset?',
176
+ description: `This can discard uncommitted tracked changes: ${preview(command)}`,
177
+ reason: 'Discards uncommitted tracked changes',
178
+ allow_key: 'bash:git-reset-hard',
179
+ };
180
+ }
181
+ export function assess_bash_command(command, cwd = process.cwd(), session_created_paths = new Set()) {
182
+ const normalized = command.trim();
183
+ if (!normalized)
184
+ return undefined;
185
+ const specific = assess_rm_command(normalized, cwd, session_created_paths) ??
186
+ assess_git_rm_command(normalized, cwd) ??
187
+ assess_git_reset_hard(normalized, cwd);
188
+ if (specific)
189
+ return specific;
190
+ const match = DESTRUCTIVE_COMMAND_PATTERNS.find(({ pattern }) => pattern.test(normalized));
191
+ if (!match)
192
+ return undefined;
193
+ return {
194
+ title: 'Confirm destructive command?',
195
+ description: `${match.reason}: ${preview(normalized)}`,
196
+ reason: match.reason,
197
+ allow_key: match.allow_key,
198
+ };
199
+ }
200
+ function assess_file_write(cwd, path, session_created_paths = new Set()) {
201
+ if (typeof path !== 'string' || !path.trim())
202
+ return undefined;
203
+ const absolute = resolve(cwd, path);
204
+ if (!existsSync(absolute))
205
+ return undefined;
206
+ if (session_created_paths.has(absolute))
207
+ return undefined;
208
+ if (is_git_recoverable(cwd, path))
209
+ return undefined;
210
+ const reason = get_git_recoverability(cwd, path) === 'tracked-dirty'
211
+ ? 'Overwrites a file with uncommitted changes'
212
+ : 'Overwrites an untracked file git cannot restore';
213
+ return {
214
+ title: 'Confirm file overwrite?',
215
+ description: `${reason}: ${path}`,
216
+ reason,
217
+ allow_key: 'write:risky-overwrite',
218
+ };
219
+ }
220
+ function assess_file_edit(cwd, input, session_created_paths = new Set()) {
221
+ const path = typeof input.path === 'string' ? input.path : undefined;
222
+ const edits = Array.isArray(input.edits) ? input.edits : [];
223
+ let removed_chars = 0;
224
+ let added_chars = 0;
225
+ for (const edit of edits) {
226
+ if (!edit || typeof edit !== 'object')
227
+ continue;
228
+ const old_text = edit.oldText;
229
+ const new_text = edit.newText;
230
+ if (typeof old_text === 'string') {
231
+ removed_chars += old_text.length;
232
+ }
233
+ if (typeof new_text === 'string')
234
+ added_chars += new_text.length;
235
+ }
236
+ if (removed_chars === 0 || removed_chars - added_chars < 200) {
237
+ return undefined;
238
+ }
239
+ if (path && session_created_paths.has(resolve(cwd, path))) {
240
+ return undefined;
241
+ }
242
+ if (path && is_git_recoverable(cwd, path))
243
+ return undefined;
244
+ return {
245
+ title: 'Confirm large content removal?',
246
+ description: `This edit removes ${removed_chars - added_chars} more characters than it adds${path ? ` in ${path}` : ''}.`,
247
+ reason: path
248
+ ? 'Removes substantial content from a file git cannot fully restore'
249
+ : 'Removes substantial file content',
250
+ allow_key: 'edit:large-removal-risky',
251
+ };
252
+ }
253
+ function assess_custom_tool(event) {
254
+ if (!DESTRUCTIVE_CUSTOM_TOOL_NAME.test(event.toolName)) {
255
+ return undefined;
256
+ }
257
+ const input = event.input;
258
+ const query = typeof input.query === 'string'
259
+ ? `\n\nQuery: ${preview(input.query)}`
260
+ : '';
261
+ return {
262
+ title: 'Confirm destructive tool call?',
263
+ description: `Tool ${event.toolName} appears destructive.${query}`,
264
+ reason: `Potentially destructive tool: ${event.toolName}`,
265
+ allow_key: `tool:${event.toolName}`,
266
+ };
267
+ }
268
+ export function assess_tool_call(event, cwd, session_created_paths = new Set()) {
269
+ if (event.toolName === 'bash') {
270
+ const command = event.input.command;
271
+ return typeof command === 'string'
272
+ ? assess_bash_command(command, cwd, session_created_paths)
273
+ : undefined;
274
+ }
275
+ if (event.toolName === 'write') {
276
+ return assess_file_write(cwd, event.input.path, session_created_paths);
277
+ }
278
+ if (event.toolName === 'edit') {
279
+ return assess_file_edit(cwd, event.input, session_created_paths);
280
+ }
281
+ return assess_custom_tool(event);
282
+ }
283
+ //# sourceMappingURL=risk-assessment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-assessment.js","sourceRoot":"","sources":["../src/risk-assessment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ToolCallEvent, ToolResultEvent } from '@earendil-works/pi-coding-agent';
2
+ export declare function extract_created_temp_paths_from_result(event: ToolResultEvent): string[];
3
+ export declare class CreatedPathTracker {
4
+ readonly session_created_files: Set<string>;
5
+ private readonly pending_created_files;
6
+ private readonly pending_bash_created_paths;
7
+ private readonly bash_may_create_temp_path;
8
+ get session_created_paths(): ReadonlySet<string>;
9
+ record_tool_call(event: ToolCallEvent, cwd: string): void;
10
+ record_tool_result(event: ToolResultEvent): void;
11
+ }
@@ -0,0 +1,81 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { command_may_create_temp_path, extract_bash_create_paths, } from './parsing.js';
4
+ import { is_temp_path } from './risk-assessment.js';
5
+ function text_content(event) {
6
+ return event.content
7
+ .map((part) => {
8
+ if ('text' in part && typeof part.text === 'string') {
9
+ return part.text;
10
+ }
11
+ return '';
12
+ })
13
+ .join('');
14
+ }
15
+ export function extract_created_temp_paths_from_result(event) {
16
+ return text_content(event)
17
+ .split(/\r?\n/)
18
+ .map((line) => line.trim())
19
+ .filter((line) => line && is_temp_path(line) && existsSync(line))
20
+ .map((line) => resolve(line));
21
+ }
22
+ export class CreatedPathTracker {
23
+ session_created_files = new Set();
24
+ pending_created_files = new Map();
25
+ pending_bash_created_paths = new Map();
26
+ bash_may_create_temp_path = new Set();
27
+ get session_created_paths() {
28
+ return this.session_created_files;
29
+ }
30
+ record_tool_call(event, cwd) {
31
+ if (event.toolName === 'write') {
32
+ const path = event.input.path;
33
+ if (typeof path === 'string' && path.trim()) {
34
+ const absolute = resolve(cwd, path);
35
+ if (!existsSync(absolute)) {
36
+ this.pending_created_files.set(event.toolCallId, absolute);
37
+ }
38
+ }
39
+ }
40
+ if (event.toolName === 'bash') {
41
+ const command = event.input.command;
42
+ if (typeof command === 'string') {
43
+ const paths = extract_bash_create_paths(command, cwd);
44
+ if (paths.length > 0) {
45
+ this.pending_bash_created_paths.set(event.toolCallId, paths);
46
+ }
47
+ if (command_may_create_temp_path(command)) {
48
+ this.bash_may_create_temp_path.add(event.toolCallId);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ record_tool_result(event) {
54
+ const absolute = this.pending_created_files.get(event.toolCallId);
55
+ if (absolute) {
56
+ this.pending_created_files.delete(event.toolCallId);
57
+ if (event.toolName === 'write' && !event.isError) {
58
+ this.session_created_files.add(absolute);
59
+ }
60
+ }
61
+ const bash_paths = this.pending_bash_created_paths.get(event.toolCallId);
62
+ if (bash_paths) {
63
+ this.pending_bash_created_paths.delete(event.toolCallId);
64
+ if (event.toolName === 'bash' && !event.isError) {
65
+ for (const path of bash_paths) {
66
+ if (existsSync(path))
67
+ this.session_created_files.add(path);
68
+ }
69
+ }
70
+ }
71
+ if (this.bash_may_create_temp_path.has(event.toolCallId)) {
72
+ this.bash_may_create_temp_path.delete(event.toolCallId);
73
+ if (event.toolName === 'bash' && !event.isError) {
74
+ for (const path of extract_created_temp_paths_from_result(event)) {
75
+ this.session_created_files.add(path);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface DestructiveAction {
2
+ title: string;
3
+ description: string;
4
+ reason: string;
5
+ allow_key: string;
6
+ }
7
+ export interface DestructiveCommandPattern {
8
+ pattern: RegExp;
9
+ reason: string;
10
+ allow_key: string;
11
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spences10/pi-confirm-destructive",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Pi extension that confirms destructive actions before they run",
5
5
  "keywords": [
6
6
  "confirm",
@@ -52,6 +52,8 @@
52
52
  "check:self": "tsc --noEmit -p tsconfig.json",
53
53
  "test": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run test:self",
54
54
  "test:self": "vitest run",
55
- "test:watch": "vitest"
55
+ "test:watch": "vitest",
56
+ "coverage:self": "vitest run --coverage",
57
+ "coverage": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run coverage:self"
56
58
  }
57
59
  }