dsh-super-code 0.3.6 → 0.3.7

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,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;
@@ -1 +1 @@
1
- {"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW,CAAC;QACpB,UAAU,IAAI,CAAC,CAAC,GAAG,GAAG;YAAI,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE;KAC/C;CACF;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CASlC,CAAA;AAGF,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,aAAa,CAKvD,CAAA;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,aAAa,CAK/C,CAAA;AAuBF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAE1E;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAMxE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAG3E"}
1
+ {"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW,CAAC;QACpB,UAAU,IAAI,CAAC,CAAC,GAAG,GAAG;YAAI,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE;KAC/C;CACF;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAA;IAC9D,QAAQ,CAAC,oCAAoC,CAAC,EAAE,OAAO,CAAA;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CASlC,CAAA;AAGF,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,aAAa,CAOvD,CAAA;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,aAAa,CAO/C,CAAA;AAyBF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAE1E;AAED,8FAA8F;AAC9F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,sBAAsB,CAGhH;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAMxE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAG3E"}
@@ -14,18 +14,24 @@ export const budgetSchema = z.object({
14
14
  // SettingsProvider resolves plain data; volatile references belong only to Loader entries.
15
15
  export const settingsConfigurationSchema = z.object({
16
16
  applyToOfficialPresets: z.boolean().description('Apply common runtime budgets to Standard, PTC, Minimal and Create presets (default: off).'),
17
+ deletionProtection: z.union(['off', 'relaxed', 'strict', z.boolean()]).description('Deletion protection: off, relaxed (default; prefer trash, honor explicit rm requests), or strict (one-time confirmation). Legacy false/true mean off/strict.'),
18
+ deletionProtectionForOfficialPresets: z.boolean().description('Also protect official presets, independently of budget settings (default: off).'),
17
19
  budgets: budgetSchema.description('Optional runtime budgets; leave blank to follow the host.'),
18
20
  maxTasks: z.number().step(1).min(1).max(128),
19
21
  maxContextBytes: z.number().step(1).min(1024).max(262144),
20
22
  });
21
23
  export const configurationSchema = z.object({
22
24
  applyToOfficialPresets: settingsConfigurationSchema.dict.applyToOfficialPresets.extra('volatile', true),
25
+ deletionProtection: settingsConfigurationSchema.dict.deletionProtection.extra('volatile', true),
26
+ deletionProtectionForOfficialPresets: settingsConfigurationSchema.dict.deletionProtectionForOfficialPresets.extra('volatile', true),
23
27
  budgets: settingsConfigurationSchema.dict.budgets.extra('volatile', true),
24
28
  maxTasks: settingsConfigurationSchema.dict.maxTasks.extra('volatile', true),
25
29
  maxContextBytes: settingsConfigurationSchema.dict.maxContextBytes.extra('volatile', true),
26
30
  });
27
31
  const validConfiguration = json.object({
28
32
  applyToOfficialPresets: json.boolean().optional(),
33
+ deletionProtection: json.union([json.enum(['off', 'relaxed', 'strict']), json.boolean()]).optional(),
34
+ deletionProtectionForOfficialPresets: json.boolean().optional(),
29
35
  budgets: json.object({
30
36
  pressureBasis: json.enum(['host', 'window']).optional(),
31
37
  thresholdRatio: json.number().min(0.01).max(1).optional(),
@@ -50,6 +56,11 @@ const validConfiguration = json.object({
50
56
  export function validateConfiguration(config) {
51
57
  return validConfiguration.parse(config);
52
58
  }
59
+ /** Preserve saved boolean choices while new installations default to prompt-only guidance. */
60
+ export function deletionProtectionMode(config) {
61
+ const value = config.deletionProtection;
62
+ return value === true ? 'strict' : value === false ? 'off' : value ?? 'relaxed';
63
+ }
53
64
  /** Newer Loader schemas expose volatile fields as references; older hosts return plain values. */
54
65
  export function configurationValues(config) {
55
66
  return validateConfiguration(Object.fromEntries(Object.entries(config).flatMap(([key, value]) => {
@@ -1 +1 @@
1
- {"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Global registration with per-preset eligibility; no shell rewriting or remembered grants. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ declare module '@deepseek-ai/dsh-llm' {
4
+ interface MessageSourceMap {
5
+ 'dsh-super-code/deletion-protection': {
6
+ kind: 'dsh-super-code/deletion-protection';
7
+ };
8
+ }
9
+ }
10
+ export declare const DELETION_INSTRUCTION: string;
11
+ export declare const RELAXED_DELETION_INSTRUCTION: string;
12
+ export declare function applyDeletionProtection(ctx: Context): void;
13
+ //# sourceMappingURL=deletion-protection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-protection.d.ts","sourceRoot":"","sources":["../../src/dsh/deletion-protection.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AASlD,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,gBAAgB;QAAG,oCAAoC,EAAE;YAAE,IAAI,EAAE,oCAAoC,CAAA;SAAE,CAAA;KAAE;CACpH;AAED,eAAO,MAAM,oBAAoB,EAAE,MAA6xB,CAAA;AAEh0B,eAAO,MAAM,4BAA4B,EAAE,MAA+uB,CAAA;AAa1xB,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA4C1D"}
@@ -0,0 +1,68 @@
1
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
2
+ import { configurationOf, deletionProtectionMode } from './budgets.js';
3
+ import { deletionCommand } from '../core/deletion-command.js';
4
+ export const DELETION_INSTRUCTION = '删除文件或目录默认用 trash <path>(可恢复);仅清理临时文件、构建产物且我已确认时才用 rm。脚本、内联脚本和间接调用也不允许直接使用 rm 或其他永久删除命令,不得用脚本绕过删除保护;同样优先移动到回收站。确需清理临时文件或构建产物时,必须对具体命令和路径取得用户二次确认,仅对当前调用有效。trash 不可用时,改用其他可恢复的回收站方式或先停止,不得静默退回 rm。\nUse trash <path> (recoverable) by default for files and directories. Use rm only to clean temporary files or build artifacts after the user explicitly confirms the exact operation. Scripts, inline scripts, and indirect invocations must also avoid rm or other permanent deletion commands; never use a script to bypass this protection. Prefer a recoverable trash mechanism. An exception requires a separate user confirmation for this exact command and its paths, valid for this call only. If trash is unavailable, use another recoverable trash mechanism or stop; never silently fall back to rm.';
5
+ export const RELAXED_DELETION_INSTRUCTION = '删除文件或目录默认用 trash <path>(可恢复);仅清理临时文件、构建产物且我已确认时才用 rm。脚本、内联脚本和间接调用中也建议使用 trash 等可恢复命令,尽量避免 rm。当前为宽松模式:用户已明确说明需要使用 rm 时,可以按用户指定的范围使用,包括在脚本中使用;该明确要求可作为确认,无需本插件额外二次确认。用户没有明确要求时,不要自行改用永久删除。宿主原有权限检查仍然有效。\nUse trash <path> (recoverable) by default for files and directories; use rm for temporary files or build artifacts after confirmation. Scripts, inline scripts, and indirect calls should also prefer recoverable trash commands and avoid rm when possible. In relaxed mode, an explicit user request to use rm is sufficient confirmation within the requested scope, including in scripts; this plugin requires no additional confirmation. Without an explicit request, do not silently switch to permanent deletion. Host permission checks still apply.';
6
+ function instruction(mode) {
7
+ return mode === 'strict' ? DELETION_INSTRUCTION : mode === 'relaxed' ? RELAXED_DELETION_INSTRUCTION : '';
8
+ }
9
+ const corrective = 'SUPER_CODE_DELETE_PROTECTED: 已拦截永久删除命令。请使用 trash <path> 等可恢复的回收站命令,脚本也不得绕过。仅清理临时文件或构建产物且用户对当前命令二次确认后才可执行。\nPermanent deletion blocked. Use trash <path> or another recoverable trash command, including in scripts. Only temporary/build cleanup with a separate one-time user confirmation may proceed.';
10
+ const official = new Set(['standard', 'ptc', 'minimal', 'cordis']);
11
+ export function applyDeletionProtection(ctx) {
12
+ ctx.inject(['tools', 'systemPrompt'], owner => {
13
+ const modeFor = (agent) => {
14
+ const config = configurationOf(owner);
15
+ const mode = deletionProtectionMode(config);
16
+ if (mode === 'off' || !agent)
17
+ return 'off';
18
+ if (owner.tools.get('super_code_task', agent))
19
+ return mode;
20
+ const presets = owner.get('agentPresets');
21
+ return config.deletionProtectionForOfficialPresets === true && !!presets && official.has(presets.composedPreset(agent.ctx) ?? '') ? mode : 'off';
22
+ };
23
+ owner.systemPrompt.section({ name: 'super-code:deletion-protection', order: 95,
24
+ text: ({ agent }) => instruction(modeFor(agent)) });
25
+ // Minimal owns a complete system prompt and suppresses global context.
26
+ // Use its public pre-step message seam so the policy remains logged and replayable.
27
+ const minimalNotices = new WeakMap();
28
+ owner.on('agent/pre-step', async ({ agent }, next) => {
29
+ const result = await next();
30
+ const presets = owner.get('agentPresets');
31
+ if (result.kind !== 'enter' || presets?.composedPreset(agent.ctx) !== 'minimal')
32
+ return result;
33
+ const mode = modeFor(agent), previous = minimalNotices.get(agent);
34
+ if (previous === mode || mode === 'off' && previous === undefined)
35
+ return result;
36
+ minimalNotices.set(agent, mode);
37
+ const notice = createUserMessage({ source: { kind: 'dsh-super-code/deletion-protection' }, content: [{ type: 'text',
38
+ text: mode === 'off' ? '此预设的删除保护已关闭,先前的删除保护提示不再适用;宿主自身权限检查仍然有效。\nDeletion protection is now disabled for this preset. Earlier deletion-protection notices no longer apply; host permission checks still apply.'
39
+ : (previous === undefined ? '' : '删除保护模式已切换,以下规则取代先前的删除保护规则。\nThe deletion-protection mode has changed; the following rules replace earlier deletion-protection instructions.\n') + instruction(mode),
40
+ }] });
41
+ return { ...result, messages: [...result.messages, notice] };
42
+ });
43
+ owner.on('tools/execute', async (exec, next) => {
44
+ if (modeFor(exec.agent) !== 'strict' || !['bash', 'pwsh'].includes(exec.name))
45
+ return next();
46
+ const args = exec.arguments;
47
+ if (typeof args?.command !== 'string' || !deletionCommand(args.command, exec.name === 'pwsh'))
48
+ return next();
49
+ exec.signal.throwIfAborted();
50
+ const approval = owner.get('approval');
51
+ if (!approval || !exec.agent)
52
+ throw new Error(corrective + '\n当前宿主无可用确认渠道,命令未执行。 No approval channel is available; nothing ran.');
53
+ const reason = `删除保护:建议改用 trash。仅在本次操作是临时文件或构建产物清理时,确认以下命令的永久删除;其他文件请选择拒绝。\nDeletion protection: prefer trash. Approve permanent deletion only for temporary files or build artifacts in this exact call; reject other deletions.\n${typeof args.workdir === 'string' ? `工作目录 / Workdir: ${args.workdir}\n` : ''}${args.command}`;
54
+ let outcome;
55
+ try {
56
+ outcome = await approval.request({ agent: exec.agent, toolName: exec.name, callId: exec.callId, reason, signal: exec.signal });
57
+ }
58
+ catch {
59
+ throw new Error(corrective + '\n确认渠道不可用,命令未执行。 Approval failed; nothing ran.');
60
+ }
61
+ exec.signal.throwIfAborted();
62
+ if (outcome !== 'allowed-once')
63
+ throw new Error(corrective + `\n确认结果 / Approval: ${outcome}`);
64
+ return next();
65
+ });
66
+ });
67
+ }
68
+ //# sourceMappingURL=deletion-protection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-protection.js","sourceRoot":"","sources":["../../src/dsh/deletion-protection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAOlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,eAAO,MAAM,IAAI,eAAe,CAAA;AAChC,eAAO,MAAM,MAAM,EAAE,OAAO,mBAAyC,CAAA;AAgBrE,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAanF;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAQlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKjD,eAAO,MAAM,IAAI,eAAe,CAAA;AAChC,eAAO,MAAM,MAAM,EAAE,OAAO,mBAAyC,CAAA;AAgBrE,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAenF;AAED,eAAe,KAAK,CAAA"}
package/lib/dsh/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Host projections and preset installation; execution belongs to Harness. */
2
2
  import { applyPresetInstallation } from './preset-installation.js';
3
3
  import { superAgentUsageProjectionDefinition } from '../super-agent-usage.js';
4
+ import { taskFeedbackProjection } from '../task-feedback-projection.js';
4
5
  import { taskMemoryProjection } from '../task-memory-projection.js';
5
6
  import { LongMemoryStore, longMemoryDomainSpec } from '../long-memory.js';
6
7
  import { memoryUsageProjection } from '../memory-usage-projection.js';
@@ -8,6 +9,7 @@ import { SuperCodeMemory } from './memory-library.js';
8
9
  import { configurationSchema } from './budgets.js';
9
10
  import { applyBudgetSettings } from './budget-settings.js';
10
11
  import { applyOfficialBudgets } from './official-budgets.js';
12
+ import { applyDeletionProtection } from './deletion-protection.js';
11
13
  export const name = 'super-code';
12
14
  export const Config = configurationSchema;
13
15
  async function installLongMemory(ctx) {
@@ -27,6 +29,7 @@ async function installLongMemory(ctx) {
27
29
  export async function apply(ctx, config = {}) {
28
30
  applyBudgetSettings(ctx, config);
29
31
  applyOfficialBudgets(ctx);
32
+ applyDeletionProtection(ctx);
30
33
  applyPresetInstallation(ctx);
31
34
  ctx.inject(['superCodeLongMemory', 'sessions'], owner => {
32
35
  new SuperCodeMemory(owner, owner.get('superCodeLongMemory'));
@@ -34,6 +37,7 @@ export async function apply(ctx, config = {}) {
34
37
  ctx.inject(['sessionProjections'], projectionCtx => {
35
38
  projectionCtx.sessionProjections.register(superAgentUsageProjectionDefinition);
36
39
  projectionCtx.sessionProjections.register(taskMemoryProjection);
40
+ projectionCtx.sessionProjections.register(taskFeedbackProjection);
37
41
  projectionCtx.sessionProjections.register(memoryUsageProjection);
38
42
  });
39
43
  await installLongMemory(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAA;AAChC,MAAM,CAAC,MAAM,MAAM,GAA+B,mBAAmB,CAAA;AAErE,KAAK,UAAU,iBAAiB,CAAC,GAAY;IAC3C,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAmB,CAAA;YAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACxD,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC9F,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;QACpG,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,SAAwB,EAAE;IAClE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAChC,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACzB,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE;QACtD,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAoB,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC,EAAE;QACjD,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAA;QAC9E,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;QAC/D,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAA;AAChC,MAAM,CAAC,MAAM,MAAM,GAA+B,mBAAmB,CAAA;AAErE,KAAK,UAAU,iBAAiB,CAAC,GAAY;IAC3C,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAmB,CAAA;YAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACxD,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC9F,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;QACpG,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,SAAwB,EAAE;IAClE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAChC,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACzB,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE;QACtD,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAoB,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC,EAAE;QACjD,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAA;QAC9E,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;QAC/D,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QACjE,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,eAAe,KAAK,CAAA"}
@@ -0,0 +1,68 @@
1
+ import type { SessionEvent } from '@deepseek-ai/dsh-session';
2
+ import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection';
3
+ interface FileFact {
4
+ path: string;
5
+ operation: 'write' | 'edit' | 'create' | 'patch';
6
+ seq: number;
7
+ tool: string;
8
+ callId: string;
9
+ }
10
+ interface Activity {
11
+ callId: string;
12
+ tool: string;
13
+ description: string;
14
+ seq: number;
15
+ status: 'running' | 'succeeded' | 'failed' | 'interrupted';
16
+ parent: string;
17
+ }
18
+ export interface TaskFeedbackView {
19
+ request: string;
20
+ latestRequest: string;
21
+ phase: 'idle' | 'running' | 'waiting' | 'error' | 'interrupted';
22
+ goal: {
23
+ kind: 'none';
24
+ } | {
25
+ kind: 'recorded';
26
+ text: string;
27
+ status: string;
28
+ };
29
+ todos: {
30
+ content: string;
31
+ status: 'pending' | 'in_progress' | 'completed';
32
+ }[];
33
+ activities: Activity[];
34
+ files: FileFact[];
35
+ omittedActivities: number;
36
+ omittedFiles: number;
37
+ omittedTodos: number;
38
+ }
39
+ export interface TaskFeedbackState extends TaskFeedbackView {
40
+ inherited: number;
41
+ cursor: number;
42
+ cwd: string;
43
+ approvals: string[];
44
+ pending: {
45
+ callId: string;
46
+ turn: number;
47
+ step: number;
48
+ files: {
49
+ path: string;
50
+ operation: FileFact['operation'];
51
+ }[];
52
+ }[];
53
+ }
54
+ declare module '@deepseek-ai/dsh-session-projection/types' {
55
+ interface SessionProjectionStateMap {
56
+ superCodeFeedback: TaskFeedbackState;
57
+ }
58
+ interface SessionProjectionMap {
59
+ superCodeFeedback: TaskFeedbackView;
60
+ }
61
+ }
62
+ /** Pure, bounded and idempotent for repeated event delivery. Fork history is not attributed to a child. */
63
+ export declare function foldTaskFeedback(state: TaskFeedbackState, event: SessionEvent): TaskFeedbackState;
64
+ export declare const taskFeedbackProjection: ProjectionDefinition<'superCodeFeedback', TaskFeedbackState> & {
65
+ wire: NonNullable<ProjectionDefinition<'superCodeFeedback', TaskFeedbackState>['wire']>;
66
+ };
67
+ export {};
68
+ //# sourceMappingURL=task-feedback-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-feedback-projection.d.ts","sourceRoot":"","sources":["../src/task-feedback-projection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAsB/E,UAAU,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAChI,UAAU,QAAQ;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAClF,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IACvG,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3E,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;KAAE,EAAE,CAAA;IAC7E,UAAU,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CACjH;AACD,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAA;CACvH;AAED,OAAO,QAAQ,2CAA2C,CAAC;IACzD,UAAU,yBAAyB;QAAG,iBAAiB,EAAE,iBAAiB,CAAA;KAAE;IAC5E,UAAU,oBAAoB;QAAG,iBAAiB,EAAE,gBAAgB,CAAA;KAAE;CACvE;AA+ED,2GAA2G;AAC3G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAuCjG;AAED,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,GAAG;IAClG,IAAI,EAAE,WAAW,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;CAUxF,CAAA"}