dsh-super-code 0.3.6 → 0.3.8

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 (64) hide show
  1. package/README.md +95 -63
  2. package/client/index.js +1049 -47
  3. package/cordis.patch.yml +1 -1
  4. package/docs/Changelog.md +19 -0
  5. package/docs/Compatibility.md +44 -0
  6. package/docs/EvaluationResults.md +134 -58
  7. package/docs/UsageGuide.md +112 -0
  8. package/lib/connection/directories.d.ts +30 -0
  9. package/lib/connection/directories.d.ts.map +1 -0
  10. package/lib/connection/directories.js +82 -0
  11. package/lib/connection/directories.js.map +1 -0
  12. package/lib/connection/git.d.ts +5 -0
  13. package/lib/connection/git.d.ts.map +1 -0
  14. package/lib/connection/git.js +86 -0
  15. package/lib/connection/git.js.map +1 -0
  16. package/lib/connection/http.d.ts +38 -0
  17. package/lib/connection/http.d.ts.map +1 -0
  18. package/lib/connection/http.js +275 -0
  19. package/lib/connection/http.js.map +1 -0
  20. package/lib/connection/service.d.ts +57 -0
  21. package/lib/connection/service.d.ts.map +1 -0
  22. package/lib/connection/service.js +168 -0
  23. package/lib/connection/service.js.map +1 -0
  24. package/lib/connection/store.d.ts +21 -0
  25. package/lib/connection/store.d.ts.map +1 -0
  26. package/lib/connection/store.js +139 -0
  27. package/lib/connection/store.js.map +1 -0
  28. package/lib/connection/tasks.d.ts +84 -0
  29. package/lib/connection/tasks.d.ts.map +1 -0
  30. package/lib/connection/tasks.js +270 -0
  31. package/lib/connection/tasks.js.map +1 -0
  32. package/lib/connection/types.d.ts +90 -0
  33. package/lib/connection/types.d.ts.map +1 -0
  34. package/lib/connection/types.js +21 -0
  35. package/lib/connection/types.js.map +1 -0
  36. package/lib/core/deletion-command.d.ts +3 -0
  37. package/lib/core/deletion-command.d.ts.map +1 -0
  38. package/lib/core/deletion-command.js +169 -0
  39. package/lib/core/deletion-command.js.map +1 -0
  40. package/lib/dsh/budgets.d.ts +5 -0
  41. package/lib/dsh/budgets.d.ts.map +1 -1
  42. package/lib/dsh/budgets.js +11 -0
  43. package/lib/dsh/budgets.js.map +1 -1
  44. package/lib/dsh/connection-host.d.ts +81 -0
  45. package/lib/dsh/connection-host.d.ts.map +1 -0
  46. package/lib/dsh/connection-host.js +130 -0
  47. package/lib/dsh/connection-host.js.map +1 -0
  48. package/lib/dsh/connection.d.ts +72 -0
  49. package/lib/dsh/connection.d.ts.map +1 -0
  50. package/lib/dsh/connection.js +183 -0
  51. package/lib/dsh/connection.js.map +1 -0
  52. package/lib/dsh/deletion-protection.d.ts +13 -0
  53. package/lib/dsh/deletion-protection.d.ts.map +1 -0
  54. package/lib/dsh/deletion-protection.js +68 -0
  55. package/lib/dsh/deletion-protection.js.map +1 -0
  56. package/lib/dsh/index.d.ts.map +1 -1
  57. package/lib/dsh/index.js +6 -0
  58. package/lib/dsh/index.js.map +1 -1
  59. package/lib/task-feedback-projection.d.ts +68 -0
  60. package/lib/task-feedback-projection.d.ts.map +1 -0
  61. package/lib/task-feedback-projection.js +176 -0
  62. package/lib/task-feedback-projection.js.map +1 -0
  63. package/package.json +7 -6
  64. package/presets/super-code/agent.cordis.yml +1 -1
@@ -0,0 +1,270 @@
1
+ import { randomUUID, createHash } from 'node:crypto';
2
+ import { realpath, stat } from 'node:fs/promises';
3
+ import { isAbsolute, relative, sep } from 'node:path';
4
+ import { setTimeout as pause } from 'node:timers/promises';
5
+ import { activeTask, ConnectionError } from './types.js';
6
+ import { gitSnapshot, gitWorktreeRoot, workspaceChanges } from './git.js';
7
+ export function withinDirectory(root, cwd) {
8
+ const path = relative(root, cwd);
9
+ return path === '' || (!path.startsWith(`..${sep}`) && path !== '..' && !isAbsolute(path));
10
+ }
11
+ function digest(value) { return createHash('sha256').update(JSON.stringify(value)).digest('hex'); }
12
+ export class DelegatedTasks {
13
+ store;
14
+ host;
15
+ configuration;
16
+ records = [];
17
+ tail = Promise.resolve();
18
+ closed = false;
19
+ constructor(store, host, configuration) {
20
+ this.store = store;
21
+ this.host = host;
22
+ this.configuration = configuration;
23
+ }
24
+ async initialize() {
25
+ this.records = await this.store.tasks();
26
+ for (const task of this.records)
27
+ if (activeTask(task.status))
28
+ this.event(task, 'interrupted', 'Service restarted; no request was replayed. Observe or explicitly continue this task.');
29
+ await this.persist();
30
+ }
31
+ exclusive(run) {
32
+ const operation = this.tail.then(run);
33
+ this.tail = operation.catch(() => { });
34
+ return operation;
35
+ }
36
+ event(task, status, message) {
37
+ task.status = status;
38
+ task.updatedAt = Date.now();
39
+ task.events.push({ cursor: ++task.sequence, time: task.updatedAt, status, message: message.slice(0, 1000) });
40
+ task.events = task.events.slice(-200);
41
+ }
42
+ async persist() { await this.store.saveTasks(this.records); }
43
+ owned(id) {
44
+ const task = this.records.find(row => row.id === id);
45
+ if (!task)
46
+ throw new ConnectionError('task-not-found');
47
+ return task;
48
+ }
49
+ enabled() {
50
+ if (this.closed || !this.configuration().enabled)
51
+ throw new ConnectionError('connection-disabled');
52
+ }
53
+ async directory(cwd) {
54
+ if (!isAbsolute(cwd))
55
+ throw new ConnectionError('absolute-directory-required');
56
+ let canonical;
57
+ try {
58
+ canonical = await realpath(cwd);
59
+ if (!(await stat(canonical)).isDirectory())
60
+ throw new Error();
61
+ }
62
+ catch {
63
+ throw new ConnectionError('directory-unavailable');
64
+ }
65
+ const roots = await Promise.all(this.configuration().allowedDirectories.map(path => realpath(path)));
66
+ if (!roots.some(root => withinDirectory(root, canonical)))
67
+ throw new ConnectionError('directory-not-allowed');
68
+ return canonical;
69
+ }
70
+ async capacity(cwd, except = '') {
71
+ const pending = this.records.filter(row => row.id !== except && (activeTask(row.status) || row.status === 'interrupted'));
72
+ if (pending.length >= this.configuration().maxConnections)
73
+ throw new ConnectionError('concurrency-limit');
74
+ const root = await gitWorktreeRoot(cwd);
75
+ const roots = await Promise.all(pending.map(row => gitWorktreeRoot(row.cwd)));
76
+ if (pending.some((row, index) => withinDirectory(row.cwd, cwd) || withinDirectory(cwd, row.cwd)
77
+ || root !== false && root === roots[index]))
78
+ throw new ConnectionError('workspace-busy');
79
+ }
80
+ async run(input) {
81
+ const task = await this.exclusive(async () => {
82
+ this.enabled();
83
+ const cwd = await this.directory(input.cwd);
84
+ const fingerprint = digest({ cwd, prompt: input.prompt, client: input.client ?? 'mcp' });
85
+ const prior = this.records.find(row => row.requestId === input.requestId);
86
+ if (prior) {
87
+ if (prior.fingerprint !== fingerprint)
88
+ throw new ConnectionError('request-conflict');
89
+ if (input.connectionId && prior.connectionId !== input.connectionId) {
90
+ prior.connectionId = input.connectionId;
91
+ await this.persist();
92
+ }
93
+ return prior;
94
+ }
95
+ if (this.records.length >= 200)
96
+ throw new ConnectionError('task-history-full');
97
+ await this.capacity(cwd);
98
+ const preset = await this.host.preset(), id = `sc-${randomUUID()}`, now = Date.now();
99
+ const row = { id, sessionId: id, requestId: input.requestId, fingerprint, cwd, preset,
100
+ client: input.client ?? 'mcp', status: 'starting', cancellationRequested: false, createdAt: now, updatedAt: now, currentRequest: randomUUID(),
101
+ output: '', sequence: 0, events: [], operations: {}, baseline: await gitSnapshot(cwd), ...(input.connectionId ? { connectionId: input.connectionId } : {}) };
102
+ this.event(row, 'starting', 'Dispatch intent saved. A DSH turn ending does not verify task acceptance.');
103
+ this.records.push(row);
104
+ await this.persist();
105
+ try {
106
+ await this.host.create(row.sessionId, cwd, preset);
107
+ }
108
+ catch {
109
+ this.event(row, 'failed', 'Session creation failed. No prompt was sent.');
110
+ await this.persist();
111
+ return row;
112
+ }
113
+ try {
114
+ await this.host.prompt(row.sessionId, row.currentRequest, input.prompt);
115
+ this.event(row, 'running', 'Prompt accepted by DSH.');
116
+ }
117
+ catch {
118
+ this.event(row, 'interrupted', 'Prompt admission could not be confirmed. No automatic retry; inspect the DSH session before continuing.');
119
+ }
120
+ await this.persist();
121
+ return row;
122
+ });
123
+ return this.view(task.id, 0);
124
+ }
125
+ async send(input) {
126
+ await this.exclusive(async () => {
127
+ this.enabled();
128
+ const task = this.owned(input.taskId), fingerprint = digest(input.prompt);
129
+ const cwd = await this.directory(input.cwd ?? task.cwd);
130
+ if (cwd !== task.cwd)
131
+ throw new ConnectionError('task-directory-mismatch');
132
+ const prior = Object.hasOwn(task.operations, input.requestId) ? task.operations[input.requestId] : false;
133
+ if (prior) {
134
+ if (prior !== fingerprint)
135
+ throw new ConnectionError('request-conflict');
136
+ if (input.connectionId && task.connectionId !== input.connectionId) {
137
+ task.connectionId = input.connectionId;
138
+ await this.persist();
139
+ }
140
+ return;
141
+ }
142
+ if (Object.keys(task.operations).length >= 128)
143
+ throw new ConnectionError('task-operation-limit');
144
+ await this.refresh(task);
145
+ if (task.status === 'cancelling' || task.status === 'waiting_confirmation')
146
+ throw new ConnectionError('resolve-in-dsh-first');
147
+ await this.capacity(task.cwd, task.id);
148
+ // Persist the operation before admission. A retry observes this intent; it never resends it.
149
+ Object.defineProperty(task.operations, input.requestId, { value: fingerprint, enumerable: true, configurable: true, writable: true });
150
+ task.currentRequest = randomUUID();
151
+ task.cancellationRequested = false;
152
+ if (input.connectionId)
153
+ task.connectionId = input.connectionId;
154
+ this.event(task, 'starting', 'Explicit continuation intent saved.');
155
+ await this.persist();
156
+ try {
157
+ await this.host.prompt(task.sessionId, task.currentRequest, input.prompt);
158
+ this.event(task, 'running', 'Continuation accepted by DSH.');
159
+ }
160
+ catch {
161
+ this.event(task, 'interrupted', 'Continuation admission could not be confirmed; no automatic retry.');
162
+ }
163
+ await this.persist();
164
+ });
165
+ return this.view(input.taskId, 0);
166
+ }
167
+ async cancel(id) {
168
+ await this.exclusive(async () => {
169
+ this.enabled();
170
+ const task = this.owned(id);
171
+ await this.refresh(task);
172
+ if (!activeTask(task.status) && task.status !== 'interrupted')
173
+ return;
174
+ task.cancellationRequested = true;
175
+ this.event(task, 'cancelling', 'Cancellation requested; waiting for the root and managed descendants to stop.');
176
+ await this.persist();
177
+ try {
178
+ await this.host.cancel(task.sessionId);
179
+ }
180
+ catch {
181
+ this.event(task, 'unavailable', 'Could not confirm cancellation of the complete task tree. Check DSH.');
182
+ await this.persist();
183
+ return;
184
+ }
185
+ await this.refresh(task);
186
+ await this.persist();
187
+ });
188
+ return this.view(id, 0);
189
+ }
190
+ async refresh(task) {
191
+ if (!activeTask(task.status) && task.status !== 'interrupted')
192
+ return;
193
+ if (task.cancellationRequested)
194
+ await this.host.cancel(task.sessionId).catch(() => { });
195
+ const observation = await this.host.observe(task.sessionId, task.currentRequest, task.cancellationRequested);
196
+ const status = task.cancellationRequested
197
+ ? ['finished', 'interrupted', 'failed'].includes(observation.status) ? 'cancelled' : observation.status === 'unavailable' ? 'unavailable' : 'cancelling'
198
+ : observation.status;
199
+ const changed = task.output !== observation.output;
200
+ task.output = observation.output.slice(-12000);
201
+ if (task.status !== status || changed) {
202
+ this.event(task, status, observation.detail);
203
+ await this.persist();
204
+ }
205
+ }
206
+ async tick() {
207
+ await this.exclusive(async () => {
208
+ if (this.closed)
209
+ return;
210
+ for (const task of this.records)
211
+ if (activeTask(task.status) || task.status === 'interrupted') {
212
+ try {
213
+ await this.refresh(task);
214
+ }
215
+ catch {
216
+ if (task.status !== 'unavailable') {
217
+ this.event(task, 'unavailable', 'Task observation is unavailable; no request was replayed.');
218
+ await this.persist();
219
+ }
220
+ }
221
+ }
222
+ });
223
+ }
224
+ async view(id, cursor) {
225
+ const task = await this.exclusive(async () => { const row = this.owned(id); await this.refresh(row); return structuredClone(row); });
226
+ return { taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, preset: task.preset, client: task.client,
227
+ status: task.status, createdAt: task.createdAt, updatedAt: task.updatedAt, output: task.output,
228
+ events: task.events.filter(event => event.cursor > cursor), cursor: task.sequence,
229
+ eventsTruncated: cursor < (task.events[0]?.cursor ?? 1) - 1, acceptance: 'not-verified',
230
+ workspace: await workspaceChanges(task.cwd, task.baseline) };
231
+ }
232
+ async list(cursor) {
233
+ return this.exclusive(async () => {
234
+ const rows = [...this.records].reverse();
235
+ return { tasks: rows.slice(cursor, cursor + 25).map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client, status: task.status, updatedAt: task.updatedAt })),
236
+ nextCursor: cursor + 25 < rows.length ? cursor + 25 : false };
237
+ });
238
+ }
239
+ async sessions(cwd, limit, status) {
240
+ this.enabled();
241
+ const canonical = await this.directory(cwd);
242
+ return this.exclusive(async () => {
243
+ const rows = this.records.filter(task => task.cwd === canonical).sort((a, b) => b.updatedAt - a.updatedAt || b.createdAt - a.createdAt).slice(0, Math.min(Math.max(limit, 1), 25));
244
+ const reusable = new Set(['finished', 'failed', 'cancelled']);
245
+ const activeTasks = this.records.filter(task => activeTask(task.status) || task.status === 'interrupted').length;
246
+ return { cwd: canonical, connections: status.connections, maxConnections: status.maxConnections,
247
+ availableConnections: Math.max(status.maxConnections - status.connections, 0),
248
+ activeTasks, availableTasks: Math.max(status.maxConnections - activeTasks, 0),
249
+ sessions: rows.map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client, status: task.status,
250
+ createdAt: task.createdAt, updatedAt: task.updatedAt, connectionCount: task.connectionId && status.ids.includes(task.connectionId) ? 1 : 0,
251
+ reusable: reusable.has(task.status) })) };
252
+ });
253
+ }
254
+ overview() {
255
+ return [...this.records].reverse().map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client,
256
+ connectionId: task.connectionId ?? '', status: task.status, updatedAt: task.updatedAt }));
257
+ }
258
+ async wait(id, cursor, waitMs, signal) {
259
+ const deadline = Date.now() + Math.min(Math.max(waitMs, 0), 30000);
260
+ let view = await this.view(id, cursor);
261
+ while (activeTask(view.status) && view.status !== 'waiting_confirmation' && view.cursor <= cursor && Date.now() < deadline) {
262
+ signal?.throwIfAborted();
263
+ await pause(Math.min(250, Math.max(1, deadline - Date.now())), undefined, { signal });
264
+ view = await this.view(id, cursor);
265
+ }
266
+ return view;
267
+ }
268
+ async close() { await this.exclusive(async () => { this.closed = true; await this.persist(); }); }
269
+ }
270
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/connection/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ export interface ConnectionConfig {
3
+ enabled: boolean;
4
+ port: number;
5
+ allowedDirectories: string[];
6
+ knownDirectories: string[];
7
+ maxConcurrent: number;
8
+ maxConnections: number;
9
+ directoriesConfigured: boolean;
10
+ }
11
+ export declare const connectionConfigSchema: z.ZodType<ConnectionConfig>;
12
+ export declare const defaultConnectionConfig: ConnectionConfig;
13
+ export type TaskStatus = 'starting' | 'running' | 'waiting_confirmation' | 'cancelling' | 'finished' | 'failed' | 'cancelled' | 'interrupted' | 'unavailable';
14
+ export interface TaskEvent {
15
+ cursor: number;
16
+ time: number;
17
+ status: TaskStatus;
18
+ message: string;
19
+ }
20
+ export interface GitSnapshot {
21
+ available: boolean;
22
+ root: string;
23
+ head: string;
24
+ fingerprint: string;
25
+ dirty: string[];
26
+ }
27
+ export interface WorkspaceChanges {
28
+ available: boolean;
29
+ baselineDirty: string[];
30
+ currentDirty: string[];
31
+ changedSinceStart: boolean;
32
+ headChanged: boolean;
33
+ diffStat: string;
34
+ truncated: boolean;
35
+ attribution: 'workspace-observation';
36
+ }
37
+ export interface DelegatedTask {
38
+ id: string;
39
+ requestId: string;
40
+ fingerprint: string;
41
+ sessionId: string;
42
+ cwd: string;
43
+ preset: string;
44
+ client: string;
45
+ status: TaskStatus;
46
+ cancellationRequested: boolean;
47
+ createdAt: number;
48
+ updatedAt: number;
49
+ currentRequest: string;
50
+ output: string;
51
+ sequence: number;
52
+ events: TaskEvent[];
53
+ operations: Record<string, string>;
54
+ baseline: GitSnapshot;
55
+ connectionId?: string;
56
+ }
57
+ export interface TaskView {
58
+ taskId: string;
59
+ sessionId: string;
60
+ cwd: string;
61
+ preset: string;
62
+ client: string;
63
+ status: TaskStatus;
64
+ createdAt: number;
65
+ updatedAt: number;
66
+ output: string;
67
+ events: TaskEvent[];
68
+ cursor: number;
69
+ eventsTruncated: boolean;
70
+ acceptance: 'not-verified';
71
+ workspace: WorkspaceChanges;
72
+ }
73
+ export interface HostObservation {
74
+ status: 'running' | 'waiting_confirmation' | 'finished' | 'failed' | 'interrupted' | 'unavailable';
75
+ output: string;
76
+ detail: string;
77
+ }
78
+ export interface DelegationHost {
79
+ preset(): Promise<string>;
80
+ create(sessionId: string, cwd: string, preset: string): Promise<void>;
81
+ prompt(sessionId: string, requestId: string, prompt: string): Promise<void>;
82
+ observe(sessionId: string, requestId: string, cancelling?: boolean): Promise<HostObservation>;
83
+ cancel(sessionId: string): Promise<void>;
84
+ }
85
+ export declare class ConnectionError extends Error {
86
+ readonly code: string;
87
+ constructor(code: string);
88
+ }
89
+ export declare function activeTask(status: TaskStatus): boolean;
90
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export const connectionConfigSchema = z.object({
3
+ enabled: z.boolean(), port: z.number().int().min(1024).max(65535),
4
+ allowedDirectories: z.array(z.string().min(1).max(4096)).max(32),
5
+ knownDirectories: z.array(z.string().min(1).max(4096)).max(128).default([]),
6
+ maxConcurrent: z.number().int().min(1).max(32),
7
+ maxConnections: z.number().int().min(1).max(32).default(3),
8
+ directoriesConfigured: z.boolean().default(false),
9
+ }).strict();
10
+ export const defaultConnectionConfig = { enabled: false, port: 23457, allowedDirectories: [], knownDirectories: [], maxConcurrent: 3, maxConnections: 3, directoriesConfigured: false };
11
+ export class ConnectionError extends Error {
12
+ code;
13
+ constructor(code) {
14
+ super(code);
15
+ this.code = code;
16
+ }
17
+ }
18
+ export function activeTask(status) {
19
+ return ['starting', 'running', 'waiting_confirmation', 'cancelling', 'unavailable'].includes(status);
20
+ }
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,sBAAsB,GAAgC,CAAC,CAAC,MAAM,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACjE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAClD,CAAC,CAAC,MAAM,EAAE,CAAA;AACX,MAAM,CAAC,MAAM,uBAAuB,GAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAA;AAwBzM,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACZ;IAA5B,YAA4B,IAAY;QAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAA3B,SAAI,GAAJ,IAAI,CAAQ;IAAgB,CAAC;CAC1D;AACD,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACtG,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Static inspection is deliberately bounded; opaque external scripts are governed by the prompt. */
2
+ export declare function deletionCommand(input: string, powershell?: boolean, depth?: number): boolean;
3
+ //# sourceMappingURL=deletion-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-command.d.ts","sourceRoot":"","sources":["../../src/core/deletion-command.ts"],"names":[],"mappings":"AAqDA,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,UAAQ,EAAE,KAAK,SAAI,GAAG,OAAO,CAkDrF"}
@@ -0,0 +1,169 @@
1
+ function shellWords(input, powershell) {
2
+ const commands = [], substitutions = [];
3
+ let words = [], value = '', quote = '', quoted = false, started = false;
4
+ const word = () => {
5
+ if (started)
6
+ words.push({ text: value, quoted });
7
+ value = '';
8
+ quoted = false;
9
+ started = false;
10
+ };
11
+ const command = () => { word(); if (words.length)
12
+ commands.push(words); words = []; };
13
+ for (let i = 0; i < input.length; i++) {
14
+ const char = input[i];
15
+ if (char === (powershell ? '`' : '\\') && quote !== "'") {
16
+ if (input[i + 1] !== '\n') {
17
+ value += input[i + 1] ?? '';
18
+ started = true;
19
+ }
20
+ i++;
21
+ continue;
22
+ }
23
+ if (!powershell && char === '`' && quote !== "'") {
24
+ let end = i + 1;
25
+ while (end < input.length && input[end] !== '`')
26
+ end++;
27
+ substitutions.push(input.slice(i + 1, end));
28
+ value += '$substitution';
29
+ started = true;
30
+ i = end;
31
+ continue;
32
+ }
33
+ if (char === '$' && input[i + 1] === '(' && quote !== "'") {
34
+ let end = i + 2, depth = 1, innerQuote = '';
35
+ for (; end < input.length; end++) {
36
+ const next = input[end];
37
+ if (next === (powershell ? '`' : '\\')) {
38
+ end++;
39
+ continue;
40
+ }
41
+ if (innerQuote) {
42
+ if (next === innerQuote)
43
+ innerQuote = '';
44
+ continue;
45
+ }
46
+ if (next === "'" || next === '"') {
47
+ innerQuote = next;
48
+ continue;
49
+ }
50
+ if (next === '(')
51
+ depth++;
52
+ if (next === ')' && --depth === 0)
53
+ break;
54
+ }
55
+ substitutions.push(input.slice(i + 2, end));
56
+ value += '$substitution';
57
+ started = true;
58
+ i = end;
59
+ continue;
60
+ }
61
+ if (quote) {
62
+ if (char === quote)
63
+ quote = '';
64
+ else
65
+ value += char;
66
+ continue;
67
+ }
68
+ if (char === "'" || char === '"') {
69
+ quote = char;
70
+ quoted = true;
71
+ started = true;
72
+ continue;
73
+ }
74
+ if (char === '#' && !started) {
75
+ while (i + 1 < input.length && input[i + 1] !== '\n')
76
+ i++;
77
+ continue;
78
+ }
79
+ if (char === '&' && /[<>]$/.test(value)) {
80
+ value += char;
81
+ continue;
82
+ }
83
+ if (';|&\n(){}'.includes(char)) {
84
+ command();
85
+ if (char === '&' && powershell)
86
+ words.push({ text: '&', quoted: false });
87
+ continue;
88
+ }
89
+ if (/\s/.test(char)) {
90
+ word();
91
+ continue;
92
+ }
93
+ value += char;
94
+ started = true;
95
+ }
96
+ command();
97
+ return { commands, substitutions };
98
+ }
99
+ function executable(word) { return word.split(/[\\/]/).at(-1).toLowerCase().replace(/\.exe$/, ''); }
100
+ /** Static inspection is deliberately bounded; opaque external scripts are governed by the prompt. */
101
+ export function deletionCommand(input, powershell = false, depth = 0) {
102
+ if (depth > 12 || input.length > 262144)
103
+ return true;
104
+ const parsed = shellWords(input, powershell);
105
+ if (parsed.substitutions.some(script => deletionCommand(script, powershell, depth + 1)))
106
+ return true;
107
+ for (const original of parsed.commands) {
108
+ const words = [...original];
109
+ let invoked = false;
110
+ while (words.length) {
111
+ const first = words[0], name = executable(first.text);
112
+ if (/^\d*[<>]/.test(first.text)) {
113
+ words.shift();
114
+ if (/[<>]&?$/.test(first.text))
115
+ words.shift();
116
+ continue;
117
+ }
118
+ if (/^[A-Za-z_][\w]*=/.test(first.text) || ['!', 'then', 'do', 'else', 'elif', 'if', 'while', 'until', '&', '.'].includes(name)) {
119
+ if (name === '&')
120
+ invoked = true;
121
+ words.shift();
122
+ continue;
123
+ }
124
+ if (powershell && first.quoted && !invoked)
125
+ break; // A bare quoted PowerShell string is not a command.
126
+ if (['rm', 'rmdir', 'unlink', 'shred'].includes(name) || powershell && ['remove-item', 'ri', 'rd', 'del', 'erase'].includes(name))
127
+ return true;
128
+ if (['command', 'builtin', 'exec', 'sudo', 'doas', 'env', 'nohup', 'nice', 'xargs', 'time', 'timeout', 'busybox'].includes(name)) {
129
+ words.shift();
130
+ if (name === 'command' && ['-v', '-V'].includes(words[0]?.text ?? ''))
131
+ break;
132
+ const valued = ['sudo', 'doas'].includes(name) ? ['-u', '-g', '-h', '-p', '-C', '-D', '--user', '--group', '--chdir']
133
+ : name === 'xargs' ? ['-n', '-P', '-I', '-s', '-a', '-d', '-L', '--max-args', '--replace']
134
+ : name === 'env' ? ['-u', '--unset', '-C', '--chdir', '-S', '--split-string'] : name === 'nice' ? ['-n', '--adjustment']
135
+ : name === 'timeout' ? ['-s', '--signal', '-k', '--kill-after'] : name === 'time' ? ['-o', '-f', '--output', '--format'] : [];
136
+ // Arguments to common wrapper options are data, not executable names.
137
+ while (words[0]?.text.startsWith('-')) {
138
+ const option = words.shift().text;
139
+ if (valued.includes(option)) {
140
+ const argument = words.shift();
141
+ if (name === 'env' && ['-S', '--split-string'].includes(option) && argument && deletionCommand('env ' + argument.text, powershell, depth + 1))
142
+ return true;
143
+ }
144
+ }
145
+ if (name === 'timeout')
146
+ words.shift(); // Mandatory duration before the actual command.
147
+ continue;
148
+ }
149
+ const args = words.slice(1);
150
+ if (name === 'find') {
151
+ if (args.some(arg => arg.text === '-delete'))
152
+ return true;
153
+ const start = args.findIndex(arg => ['-exec', '-execdir', '-ok', '-okdir'].includes(arg.text));
154
+ if (start >= 0 && deletionCommand(args.slice(start + 1).map(arg => arg.text).join(' '), powershell, depth + 1))
155
+ return true;
156
+ }
157
+ if (['sh', 'bash', 'zsh', 'dash', 'ksh', 'fish', 'pwsh', 'powershell', 'cmd'].includes(name)) {
158
+ const code = args.findIndex(arg => /^-[a-z]*c[a-z]*$/i.test(arg.text) || ['-command', '/c', '/k'].includes(arg.text.toLowerCase()));
159
+ if (code >= 0 && deletionCommand(args.slice(code + 1).map(arg => arg.text).join(' '), ['pwsh', 'powershell', 'cmd'].includes(name), depth + 1))
160
+ return true;
161
+ }
162
+ if (['eval', 'invoke-expression', 'iex'].includes(name) && deletionCommand(args.map(arg => arg.text).join(' '), powershell, depth + 1))
163
+ return true;
164
+ break;
165
+ }
166
+ }
167
+ return false;
168
+ }
169
+ //# sourceMappingURL=deletion-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-command.js","sourceRoot":"","sources":["../../src/core/deletion-command.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,11 @@ export interface Budgets {
18
18
  readonly ptcTimeoutMs?: number;
19
19
  readonly ptcMaxTimeoutMs?: number;
20
20
  }
21
+ export type DeletionProtectionMode = 'off' | 'relaxed' | 'strict';
21
22
  export interface Configuration {
22
23
  readonly applyToOfficialPresets?: boolean;
24
+ readonly deletionProtection?: DeletionProtectionMode | boolean;
25
+ readonly deletionProtectionForOfficialPresets?: boolean;
23
26
  readonly budgets?: Budgets;
24
27
  readonly maxTasks?: number;
25
28
  readonly maxContextBytes?: number;
@@ -28,6 +31,8 @@ export declare const budgetSchema: z<Budgets>;
28
31
  export declare const settingsConfigurationSchema: z<Configuration>;
29
32
  export declare const configurationSchema: z<Configuration>;
30
33
  export declare function validateConfiguration(config: Configuration): Configuration;
34
+ /** Preserve saved boolean choices while new installations default to prompt-only guidance. */
35
+ export declare function deletionProtectionMode(config: Pick<Configuration, 'deletionProtection'>): DeletionProtectionMode;
31
36
  /** Newer Loader schemas expose volatile fields as references; older hosts return plain values. */
32
37
  export declare function configurationValues(config: Configuration): Configuration;
33
38
  export declare function configurationOf(ctx: Context, agent?: object): Configuration;