sema-core 2.0.14 → 2.0.16
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.
- package/README.md +1 -31
- package/dist/core/Conversation.d.ts.map +1 -1
- package/dist/core/Conversation.js +6 -3
- package/dist/core/Conversation.js.map +1 -1
- package/dist/core/SemaCore.d.ts +4 -2
- package/dist/core/SemaCore.d.ts.map +1 -1
- package/dist/core/SemaCore.js +4 -2
- package/dist/core/SemaCore.js.map +1 -1
- package/dist/core/SemaEngine.d.ts.map +1 -1
- package/dist/core/SemaEngine.js +23 -3
- package/dist/core/SemaEngine.js.map +1 -1
- package/dist/events/types.d.ts +9 -0
- package/dist/events/types.d.ts.map +1 -1
- package/dist/manager/ConfManager.d.ts.map +1 -1
- package/dist/manager/ConfManager.js +2 -16
- package/dist/manager/ConfManager.js.map +1 -1
- package/dist/manager/PermissionManager.d.ts.map +1 -1
- package/dist/manager/PermissionManager.js +81 -6
- package/dist/manager/PermissionManager.js.map +1 -1
- package/dist/prompt/compact.d.ts +15 -1
- package/dist/prompt/compact.d.ts.map +1 -1
- package/dist/prompt/compact.js +59 -18
- package/dist/prompt/compact.js.map +1 -1
- package/dist/prompt/inputPredict.d.ts +2 -0
- package/dist/prompt/inputPredict.d.ts.map +1 -0
- package/dist/prompt/inputPredict.js +44 -0
- package/dist/prompt/inputPredict.js.map +1 -0
- package/dist/prompt/permission.d.ts +1 -1
- package/dist/prompt/permission.d.ts.map +1 -1
- package/dist/prompt/permission.js +38 -5
- package/dist/prompt/permission.js.map +1 -1
- package/dist/services/agents/genSystemReminder.d.ts +10 -1
- package/dist/services/agents/genSystemReminder.d.ts.map +1 -1
- package/dist/services/agents/genSystemReminder.js +48 -2
- package/dist/services/agents/genSystemReminder.js.map +1 -1
- package/dist/services/commands/runCommand.d.ts.map +1 -1
- package/dist/services/commands/runCommand.js +13 -3
- package/dist/services/commands/runCommand.js.map +1 -1
- package/dist/services/mcp/MCPManager.d.ts +19 -5
- package/dist/services/mcp/MCPManager.d.ts.map +1 -1
- package/dist/services/mcp/MCPManager.js +71 -22
- package/dist/services/mcp/MCPManager.js.map +1 -1
- package/dist/services/plugins/pluginsManager.d.ts.map +1 -1
- package/dist/services/plugins/pluginsManager.js +12 -0
- package/dist/services/plugins/pluginsManager.js.map +1 -1
- package/dist/services/skills/skillsManager.d.ts +18 -3
- package/dist/services/skills/skillsManager.d.ts.map +1 -1
- package/dist/services/skills/skillsManager.js +49 -4
- package/dist/services/skills/skillsManager.js.map +1 -1
- package/dist/tools/PickOption.d.ts.map +1 -1
- package/dist/tools/PickOption.js +6 -0
- package/dist/tools/PickOption.js.map +1 -1
- package/dist/tools/Skill.d.ts.map +1 -1
- package/dist/tools/Skill.js +3 -2
- package/dist/tools/Skill.js.map +1 -1
- package/dist/tools/SubAgent.js +7 -7
- package/dist/tools/SubAgent.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/settings.d.ts +3 -1
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/types/skill.d.ts +2 -0
- package/dist/types/skill.d.ts.map +1 -1
- package/dist/util/agentStats.d.ts +3 -1
- package/dist/util/agentStats.d.ts.map +1 -1
- package/dist/util/agentStats.js +17 -3
- package/dist/util/agentStats.js.map +1 -1
- package/dist/util/autoRunContext.d.ts +2 -0
- package/dist/util/autoRunContext.d.ts.map +1 -1
- package/dist/util/autoRunContext.js +2 -0
- package/dist/util/autoRunContext.js.map +1 -1
- package/dist/util/compact.d.ts +16 -1
- package/dist/util/compact.d.ts.map +1 -1
- package/dist/util/compact.js +117 -4
- package/dist/util/compact.js.map +1 -1
- package/dist/util/history.d.ts +1 -1
- package/dist/util/history.d.ts.map +1 -1
- package/dist/util/history.js +21 -5
- package/dist/util/history.js.map +1 -1
- package/dist/util/inputPredict.d.ts +15 -0
- package/dist/util/inputPredict.d.ts.map +1 -0
- package/dist/util/inputPredict.js +135 -0
- package/dist/util/inputPredict.js.map +1 -0
- package/dist/util/message.d.ts +1 -1
- package/dist/util/message.d.ts.map +1 -1
- package/dist/util/message.js +2 -2
- package/dist/util/message.js.map +1 -1
- package/dist/util/shellSafety.d.ts +38 -2
- package/dist/util/shellSafety.d.ts.map +1 -1
- package/dist/util/shellSafety.js +495 -12
- package/dist/util/shellSafety.js.map +1 -1
- package/package.json +1 -1
package/dist/util/shellSafety.js
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasRedirection = hasRedirection;
|
|
4
|
+
exports.classifyCommandSubstitutions = classifyCommandSubstitutions;
|
|
4
5
|
exports.hasDangerousCommand = hasDangerousCommand;
|
|
5
6
|
exports.isUnsafeForPrefixAuth = isUnsafeForPrefixAuth;
|
|
7
|
+
exports.classifyDangerousCommand = classifyDangerousCommand;
|
|
6
8
|
exports.isReadonlySafeCommand = isReadonlySafeCommand;
|
|
9
|
+
const path_1 = require("path");
|
|
7
10
|
const commands_1 = require("./commands");
|
|
8
11
|
// 仅凭首词即可判定安全的「真只读」单命令。
|
|
9
|
-
// find 列入只读,但需额外排除危险动作 flag(见
|
|
12
|
+
// find 列入只读,但需额外排除危险动作 flag(见 ALWAYS_DANGEROUS_FIND_FLAGS),
|
|
13
|
+
// -exec/-execdir 则按目标命令递归分类(见 classifyFindExecTargets)。
|
|
10
14
|
const READONLY_COMMANDS = new Set([
|
|
11
15
|
'pwd', 'tree', 'date', 'which', 'find',
|
|
12
16
|
'ls', 'grep', 'head', 'tail', 'cat', 'du', 'wc', 'echo', 'env', 'printenv',
|
|
13
17
|
]);
|
|
14
|
-
// find
|
|
15
|
-
//
|
|
16
|
-
|
|
18
|
+
// find 的确定性危险 flag:删除(-delete)、写文件(-fprintf/-fprint/-fprint0/-fls)、
|
|
19
|
+
// 交互确认(-ok/-okdir,会在非 tty 下挂住 shell,且同样是命令执行原语)。
|
|
20
|
+
// 命中即确定性危险,无目标命令可细分;整段正则匹配(含 -exec 目标内),fail-closed。
|
|
21
|
+
// -exec/-execdir 不在此列:它们的危险性取决于目标命令,由 classifyFindExecTargets 递归分类。
|
|
22
|
+
const ALWAYS_DANGEROUS_FIND_FLAGS = /(^|\s)-(ok(dir)?|delete|fprint(0|f)?|fls)\b/;
|
|
17
23
|
// 仅允许整条精确匹配的完整命令(多词命令不能按首词放行,如 git 仅放行只读子命令)
|
|
18
24
|
const SAFE_FULL_COMMANDS = new Set([
|
|
19
25
|
'git status', 'git diff', 'git log', 'git branch',
|
|
@@ -121,13 +127,246 @@ function hasRedirection(command) {
|
|
|
121
127
|
}
|
|
122
128
|
// 危险首词:危险性在参数里、不该按首词前缀授权的命令。授权 rm:* / sudo:* 等会把
|
|
123
129
|
// `rm -rf /`、任意 `sudo ...` 一并放行,故这些命令不提供前缀授权、也不被已存前缀覆盖。
|
|
124
|
-
|
|
125
|
-
|
|
130
|
+
// 内部分两档(见 classifyDangerousCommand):
|
|
131
|
+
// 硬危险(sudo/dd/chmod/kill 等)→ 永远确定性转人工,不给模型裁决权;
|
|
132
|
+
// 删除类(rm/rmdir/mv,另有 find -delete)→ 目标路径确定性落在项目内/临时目录时降为
|
|
133
|
+
// 灰区,AutoRun 档位交快速模型结合上下文判断。
|
|
134
|
+
// 本集合保持两档并集不变:前缀授权禁令、find -exec 目标与 $() 替换的递归分类仍按
|
|
135
|
+
// 「一律危险」处理(-exec rm / $(rm ...) 不参与放宽)。
|
|
136
|
+
const HARD_DANGEROUS_COMMANDS = new Set([
|
|
137
|
+
'dd', 'shred', 'truncate',
|
|
126
138
|
'chmod', 'chown', 'chgrp',
|
|
127
139
|
'kill', 'killall', 'pkill',
|
|
128
140
|
'sudo', 'doas', 'su',
|
|
129
|
-
'mv',
|
|
130
141
|
]);
|
|
142
|
+
const DELETE_COMMANDS = new Set(['rm', 'rmdir', 'mv']);
|
|
143
|
+
const DANGEROUS_PREFIX_COMMANDS = new Set([...HARD_DANGEROUS_COMMANDS, ...DELETE_COMMANDS]);
|
|
144
|
+
const FIND_EXEC_TOKENS = new Set(['-exec', '-execdir']);
|
|
145
|
+
// shell 解释器:-exec sh -c '...' 是任意命令执行原语,与危险首词同级,
|
|
146
|
+
// 不给模型判断机会(isDangerousSubcommand 只查首词集合,覆盖不到这里)
|
|
147
|
+
const SHELL_INTERPRETERS = new Set(['sh', 'bash', 'zsh', 'dash', 'ksh', 'fish']);
|
|
148
|
+
// 剥掉 token 两侧成对的引号(find -exec cat {} ';' 中的 ';' → ;),用于识别结束符与 {}
|
|
149
|
+
function unquoteToken(t) {
|
|
150
|
+
if (t.length >= 2 && ((t.startsWith("'") && t.endsWith("'")) || (t.startsWith('"') && t.endsWith('"')))) {
|
|
151
|
+
return t.slice(1, -1);
|
|
152
|
+
}
|
|
153
|
+
return t;
|
|
154
|
+
}
|
|
155
|
+
function classifyExecTarget(target) {
|
|
156
|
+
const t = target.trim();
|
|
157
|
+
// 空目标(-exec ; / -exec +)不是合法 find 语法,按解析异常 fail-closed
|
|
158
|
+
if (!t)
|
|
159
|
+
return 'dangerous';
|
|
160
|
+
const first = t.split(/\s+/)[0];
|
|
161
|
+
if (SHELL_INTERPRETERS.has(first))
|
|
162
|
+
return 'dangerous';
|
|
163
|
+
// 递归复用顶层分类:危险首词/嵌套 find 危险 flag → dangerous;只读安全 → readonly;其余 → gray
|
|
164
|
+
if (isDangerousSubcommand(t))
|
|
165
|
+
return 'dangerous';
|
|
166
|
+
if (isReadonlySafeSubcommand(t))
|
|
167
|
+
return 'readonly';
|
|
168
|
+
return 'gray';
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 提取 find 段内所有 -exec/-execdir 的目标命令(-exec 到 ;/+ 结束符之间、剥掉 {}),
|
|
172
|
+
* 逐个分类后取最严结果:任一 dangerous → dangerous;否则任一 gray → gray;全 readonly → readonly。
|
|
173
|
+
*
|
|
174
|
+
* 结束符识别 token 级精确匹配 ; 或 +(含引号包裹形式)。`\;` 形式经 splitCommand 的转义占位
|
|
175
|
+
* 处理后 `;` 会被当作命令分隔符消耗掉,段内只残留孤立的 `\`,找不到结束符 → fail-closed 判
|
|
176
|
+
* dangerous,与现状(一律危险)一致,不放宽。
|
|
177
|
+
*/
|
|
178
|
+
function classifyFindExecTargets(seg) {
|
|
179
|
+
const tokens = seg.trim().split(/\s+/);
|
|
180
|
+
let cls = 'no-exec';
|
|
181
|
+
let i = 0;
|
|
182
|
+
while (i < tokens.length) {
|
|
183
|
+
if (!FIND_EXEC_TOKENS.has(tokens[i])) {
|
|
184
|
+
i++;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const targetTokens = [];
|
|
188
|
+
let j = i + 1;
|
|
189
|
+
let foundEnd = false;
|
|
190
|
+
for (; j < tokens.length; j++) {
|
|
191
|
+
const bare = unquoteToken(tokens[j]);
|
|
192
|
+
if (bare === ';' || bare === '+') {
|
|
193
|
+
foundEnd = true;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
if (bare !== '{}')
|
|
197
|
+
targetTokens.push(tokens[j]);
|
|
198
|
+
}
|
|
199
|
+
// 找不到结束符(\; 被打散 / 命令截断)→ fail-closed
|
|
200
|
+
if (!foundEnd)
|
|
201
|
+
return 'dangerous';
|
|
202
|
+
const c = classifyExecTarget(targetTokens.join(' '));
|
|
203
|
+
if (c === 'dangerous')
|
|
204
|
+
return 'dangerous';
|
|
205
|
+
if (c === 'gray')
|
|
206
|
+
cls = 'gray';
|
|
207
|
+
else if (cls === 'no-exec')
|
|
208
|
+
cls = 'readonly';
|
|
209
|
+
i = j + 1;
|
|
210
|
+
}
|
|
211
|
+
return cls;
|
|
212
|
+
}
|
|
213
|
+
// ==================== $() 命令替换分类 ====================
|
|
214
|
+
// 命令替换嵌套深度上限:正常命令极少超过 2 层,超限按解析失败 fail-closed
|
|
215
|
+
const MAX_SUBSTITUTION_DEPTH = 3;
|
|
216
|
+
// 骨架占位符:替换 $(...) 后参与分词/分类,纯字母数字下划线,不会引入新的注入特征
|
|
217
|
+
const SUBST_PLACEHOLDER = '__SUBST__';
|
|
218
|
+
/**
|
|
219
|
+
* 从 $( 之后的位置找配对的右括号,返回其下标;找不到返回 -1。
|
|
220
|
+
* 括号仅在引号外计数(含 $(a (b) c) 的子 shell 嵌套);单引号内全字面;
|
|
221
|
+
* 双引号内 ) 为字面不计数。双引号内再嵌 $( 会重新进入命令上下文,解析
|
|
222
|
+
* 复杂度陡增 → fail-closed;替换内任何位置出现反引号同样 fail-closed。
|
|
223
|
+
*/
|
|
224
|
+
function findSubstitutionEnd(s, start) {
|
|
225
|
+
let depth = 1;
|
|
226
|
+
let inSingle = false;
|
|
227
|
+
let inDouble = false;
|
|
228
|
+
for (let i = start; i < s.length; i++) {
|
|
229
|
+
const c = s[i];
|
|
230
|
+
if (inSingle) {
|
|
231
|
+
if (c === "'")
|
|
232
|
+
inSingle = false;
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (c === '\\') {
|
|
236
|
+
i++;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (inDouble) {
|
|
240
|
+
if (c === '$' && s[i + 1] === '(')
|
|
241
|
+
return -1;
|
|
242
|
+
if (c === '`')
|
|
243
|
+
return -1;
|
|
244
|
+
if (c === '"')
|
|
245
|
+
inDouble = false;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (c === "'") {
|
|
249
|
+
inSingle = true;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (c === '"') {
|
|
253
|
+
inDouble = true;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (c === '`')
|
|
257
|
+
return -1;
|
|
258
|
+
if (c === '(') {
|
|
259
|
+
depth++;
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (c === ')') {
|
|
263
|
+
depth--;
|
|
264
|
+
if (depth === 0)
|
|
265
|
+
return i;
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return -1;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* 提取整条命令中所有顶层 $(...) 命令替换:返回骨架(替换为占位符)与各内层命令文本。
|
|
273
|
+
* 出现反引号(agent 不使用该写法,且无嵌套边界、解析不可靠)、括号不配对、引号不闭合
|
|
274
|
+
* → 返回 null(fail-closed,维持确定性拦截)。
|
|
275
|
+
* 必须在 splitCommand 之前调用:底层 shell-quote 不理解 $() 边界,会把内层的 && / | / ;
|
|
276
|
+
* 当作顶层分隔符拆散替换体。
|
|
277
|
+
*/
|
|
278
|
+
function extractCommandSubstitutions(command) {
|
|
279
|
+
let inSingle = false;
|
|
280
|
+
let inDouble = false;
|
|
281
|
+
let skeleton = '';
|
|
282
|
+
const inners = [];
|
|
283
|
+
for (let i = 0; i < command.length; i++) {
|
|
284
|
+
const c = command[i];
|
|
285
|
+
const next = command[i + 1];
|
|
286
|
+
if (inSingle) {
|
|
287
|
+
if (c === "'")
|
|
288
|
+
inSingle = false;
|
|
289
|
+
skeleton += c;
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
if (c === '\\') {
|
|
293
|
+
skeleton += c + (next ?? '');
|
|
294
|
+
i++;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (c === '`')
|
|
298
|
+
return null;
|
|
299
|
+
if (c === '$' && next === '(') {
|
|
300
|
+
const end = findSubstitutionEnd(command, i + 2);
|
|
301
|
+
if (end < 0)
|
|
302
|
+
return null;
|
|
303
|
+
inners.push(command.slice(i + 2, end));
|
|
304
|
+
skeleton += SUBST_PLACEHOLDER;
|
|
305
|
+
i = end;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
if (!inDouble && c === "'") {
|
|
309
|
+
inSingle = true;
|
|
310
|
+
skeleton += c;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (c === '"') {
|
|
314
|
+
inDouble = !inDouble;
|
|
315
|
+
skeleton += c;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
skeleton += c;
|
|
319
|
+
}
|
|
320
|
+
if (inSingle || inDouble)
|
|
321
|
+
return null;
|
|
322
|
+
return { skeleton, inners };
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* 对「注入特征仅可能来自 $() 命令替换」的整条命令做递归分类。
|
|
326
|
+
* 内层命令先递归分类(内层自身可含 && / | / 嵌套 $() 等);随后骨架经 splitCommand
|
|
327
|
+
* 分段,逐段按顶层三层规则判定:危险首词/解释器/嵌套危险 find → dangerous;
|
|
328
|
+
* 只读安全 → readonly;其余 → gray。骨架残留任何注入特征(换行等)→ dangerous。
|
|
329
|
+
*
|
|
330
|
+
* 供权限闸门使用:dangerous → 确定性转人工(不给模型机会);readonly/gray → 交
|
|
331
|
+
* AutoRun 模型判断。刻意不提供确定性放行——放行与否只由模型或人工裁决,解析器
|
|
332
|
+
* 误差最多把命令送去模型,绝不静默放过。
|
|
333
|
+
*/
|
|
334
|
+
function classifyCommandSubstitutions(command, depth = 0) {
|
|
335
|
+
if (depth > MAX_SUBSTITUTION_DEPTH)
|
|
336
|
+
return 'dangerous';
|
|
337
|
+
const parsed = extractCommandSubstitutions(command);
|
|
338
|
+
if (!parsed)
|
|
339
|
+
return 'dangerous';
|
|
340
|
+
let worst = 'readonly';
|
|
341
|
+
for (const inner of parsed.inners) {
|
|
342
|
+
const c = classifyCommandSubstitutions(inner, depth + 1);
|
|
343
|
+
if (c === 'dangerous')
|
|
344
|
+
return 'dangerous';
|
|
345
|
+
if (c === 'gray')
|
|
346
|
+
worst = 'gray';
|
|
347
|
+
}
|
|
348
|
+
let segs;
|
|
349
|
+
try {
|
|
350
|
+
segs = (0, commands_1.splitCommand)(parsed.skeleton);
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return 'dangerous';
|
|
354
|
+
}
|
|
355
|
+
if (segs.length === 0)
|
|
356
|
+
return 'dangerous';
|
|
357
|
+
for (const seg of segs) {
|
|
358
|
+
if ((0, commands_1.hasCommandInjection)(seg))
|
|
359
|
+
return 'dangerous';
|
|
360
|
+
const first = seg.trim().split(/\s+/)[0] ?? '';
|
|
361
|
+
if (SHELL_INTERPRETERS.has(first))
|
|
362
|
+
return 'dangerous';
|
|
363
|
+
if (isDangerousSubcommand(seg))
|
|
364
|
+
return 'dangerous';
|
|
365
|
+
if (!isReadonlySafeSubcommand(seg))
|
|
366
|
+
worst = 'gray';
|
|
367
|
+
}
|
|
368
|
+
return worst;
|
|
369
|
+
}
|
|
131
370
|
function isDangerousSubcommand(seg) {
|
|
132
371
|
const s = seg.trim();
|
|
133
372
|
const first = s.split(/\s+/)[0] ?? '';
|
|
@@ -135,16 +374,21 @@ function isDangerousSubcommand(seg) {
|
|
|
135
374
|
return true;
|
|
136
375
|
if (first.startsWith('mkfs'))
|
|
137
376
|
return true; // mkfs / mkfs.ext4 等格式化
|
|
138
|
-
if (first === 'find'
|
|
139
|
-
|
|
377
|
+
if (first === 'find') {
|
|
378
|
+
if (ALWAYS_DANGEROUS_FIND_FLAGS.test(s))
|
|
379
|
+
return true;
|
|
380
|
+
if (classifyFindExecTargets(s) === 'dangerous')
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
140
383
|
return false;
|
|
141
384
|
}
|
|
142
385
|
/**
|
|
143
386
|
* 命令是否含「语义危险」子命令:危险首词(rm/sudo/mv 等)或 find 危险 flag。
|
|
144
387
|
* 不含重定向——重定向是否危险取决于路径(项目内可能安全),应交给上层模型判断。
|
|
145
388
|
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
389
|
+
* 用于前缀授权禁令(isUnsafeForPrefixAuth):命中即不提供/不匹配前缀授权。
|
|
390
|
+
* AutoRun 权限闸门改用 classifyDangerousCommand 做进一步分级(硬危险 / 删除类灰区),
|
|
391
|
+
* 两者的「危险」集合严格一致。解析失败保守按「危险」处理(fail-closed)。
|
|
148
392
|
*/
|
|
149
393
|
function hasDangerousCommand(command) {
|
|
150
394
|
let segs;
|
|
@@ -166,6 +410,236 @@ function hasDangerousCommand(command) {
|
|
|
166
410
|
function isUnsafeForPrefixAuth(command) {
|
|
167
411
|
return hasRedirection(command) || hasDangerousCommand(command);
|
|
168
412
|
}
|
|
413
|
+
// ==================== 危险命令分级(硬危险 / 删除类灰区) ====================
|
|
414
|
+
// find 的「非删除」硬危险 flag:写文件(-fprintf/-fprint/-fprint0/-fls)与交互确认(-ok/-okdir)。
|
|
415
|
+
// 与 ALWAYS_DANGEROUS_FIND_FLAGS 的差集是 -delete —— 后者单独识别为删除类灰区。
|
|
416
|
+
const FIND_HARD_ACTION_FLAGS = /(^|\s)-(ok(dir)?|fprint(0|f)?|fls)\b/;
|
|
417
|
+
const FIND_DELETE_FLAG = /(^|\s)-delete\b/;
|
|
418
|
+
/**
|
|
419
|
+
* 引号感知的段内分词:按空白拆 token,剥掉引号字符,标记通配符与展开特征。
|
|
420
|
+
* splitCommand 的输出段保留了原始引号(如 rm "my file.txt"),朴素 split(/\s+/)
|
|
421
|
+
* 会把带空格的引号路径拆碎,这里必须自己扫描。引号不闭合 → null(fail-closed)。
|
|
422
|
+
*/
|
|
423
|
+
function tokenizeSeg(seg) {
|
|
424
|
+
const tokens = [];
|
|
425
|
+
let cur = '';
|
|
426
|
+
let globIndex = -1;
|
|
427
|
+
let hasExpansion = false;
|
|
428
|
+
let started = false;
|
|
429
|
+
let inSingle = false;
|
|
430
|
+
let inDouble = false;
|
|
431
|
+
const push = () => {
|
|
432
|
+
if (started)
|
|
433
|
+
tokens.push({ text: cur, globIndex, hasExpansion });
|
|
434
|
+
cur = '';
|
|
435
|
+
globIndex = -1;
|
|
436
|
+
hasExpansion = false;
|
|
437
|
+
started = false;
|
|
438
|
+
};
|
|
439
|
+
for (let i = 0; i < seg.length; i++) {
|
|
440
|
+
const c = seg[i];
|
|
441
|
+
if (inSingle) {
|
|
442
|
+
if (c === "'") {
|
|
443
|
+
inSingle = false;
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
cur += c;
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
if (c === '\\') {
|
|
450
|
+
const next = seg[i + 1];
|
|
451
|
+
if (next === undefined)
|
|
452
|
+
return null;
|
|
453
|
+
cur += next;
|
|
454
|
+
i++;
|
|
455
|
+
started = true;
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
if (inDouble) {
|
|
459
|
+
if (c === '"') {
|
|
460
|
+
inDouble = false;
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
if (c === '$' || c === '`')
|
|
464
|
+
hasExpansion = true;
|
|
465
|
+
cur += c;
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
if (c === "'") {
|
|
469
|
+
inSingle = true;
|
|
470
|
+
started = true;
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
if (c === '"') {
|
|
474
|
+
inDouble = true;
|
|
475
|
+
started = true;
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
if (/\s/.test(c)) {
|
|
479
|
+
push();
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
if (c === '$' || c === '`')
|
|
483
|
+
hasExpansion = true;
|
|
484
|
+
if ((c === '*' || c === '?' || c === '[') && globIndex < 0)
|
|
485
|
+
globIndex = cur.length;
|
|
486
|
+
cur += c;
|
|
487
|
+
started = true;
|
|
488
|
+
}
|
|
489
|
+
if (inSingle || inDouble)
|
|
490
|
+
return null;
|
|
491
|
+
push();
|
|
492
|
+
return tokens;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* 单个删除目标 token 是否可静态确认落在允许范围。
|
|
496
|
+
* 含变量/命令替换、~ 展开 → 不可静态解析 → 拒绝;
|
|
497
|
+
* cwd 不可靠(命令里出现 cd/pushd)时相对路径拒绝;
|
|
498
|
+
* 通配符目标退化为「其字面前缀的目录部分」按 globdir 交策略回调。
|
|
499
|
+
*/
|
|
500
|
+
function checkDeleteTarget(t, isDeletableTarget, cwdUnreliable) {
|
|
501
|
+
if (t.hasExpansion)
|
|
502
|
+
return false;
|
|
503
|
+
const text = t.text;
|
|
504
|
+
if (!text || text.startsWith('~'))
|
|
505
|
+
return false;
|
|
506
|
+
if (cwdUnreliable && !(0, path_1.isAbsolute)(text))
|
|
507
|
+
return false;
|
|
508
|
+
if (t.globIndex >= 0) {
|
|
509
|
+
const prefix = text.slice(0, t.globIndex);
|
|
510
|
+
const slash = prefix.lastIndexOf('/');
|
|
511
|
+
const dir = slash >= 0 ? prefix.slice(0, slash + 1) : '';
|
|
512
|
+
return isDeletableTarget(dir || '.', 'globdir');
|
|
513
|
+
}
|
|
514
|
+
return isDeletableTarget(text, 'literal');
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* rm/rmdir/mv 段的目标提取与校验:跳过 flag,`--` 之后全按操作数;
|
|
518
|
+
* mv --target-directory=DIR 的 DIR 也计入目标(-t DIR 的 DIR 不带 - 前缀,天然计入)。
|
|
519
|
+
* 无任何操作数(如裸 `rm -rf`)→ hard。
|
|
520
|
+
*/
|
|
521
|
+
function checkDeleteOperands(seg, isDeletableTarget, cwdUnreliable) {
|
|
522
|
+
const tokens = tokenizeSeg(seg);
|
|
523
|
+
if (!tokens || tokens.length === 0)
|
|
524
|
+
return 'hard';
|
|
525
|
+
const operands = [];
|
|
526
|
+
let afterDoubleDash = false;
|
|
527
|
+
for (let i = 1; i < tokens.length; i++) {
|
|
528
|
+
const t = tokens[i];
|
|
529
|
+
if (!afterDoubleDash) {
|
|
530
|
+
if (t.text === '--') {
|
|
531
|
+
afterDoubleDash = true;
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
if (t.text.startsWith('--target-directory=')) {
|
|
535
|
+
const v = t.text.slice('--target-directory='.length);
|
|
536
|
+
operands.push({ text: v, globIndex: t.globIndex >= 0 ? Math.max(0, t.globIndex - '--target-directory='.length) : -1, hasExpansion: t.hasExpansion });
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
if (t.text.startsWith('-') && t.text !== '-')
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
operands.push(t);
|
|
543
|
+
}
|
|
544
|
+
if (operands.length === 0)
|
|
545
|
+
return 'hard';
|
|
546
|
+
for (const t of operands) {
|
|
547
|
+
if (!checkDeleteTarget(t, isDeletableTarget, cwdUnreliable))
|
|
548
|
+
return 'hard';
|
|
549
|
+
}
|
|
550
|
+
return 'deletable';
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* find … -delete 段的起始路径提取与校验:跳过 find 前置全局选项(-H/-L/-P/-O/-D val),
|
|
554
|
+
* 收集表达式(- 开头 / ( / !)之前的位置参数为起始路径;无起始路径按 find 默认的 `.`。
|
|
555
|
+
* 删除发生在起始路径目录树内,按 globdir 语义交策略回调。
|
|
556
|
+
*/
|
|
557
|
+
function checkFindDeleteTargets(seg, isDeletableTarget, cwdUnreliable) {
|
|
558
|
+
const tokens = tokenizeSeg(seg);
|
|
559
|
+
if (!tokens || tokens.length === 0)
|
|
560
|
+
return 'hard';
|
|
561
|
+
const paths = [];
|
|
562
|
+
let i = 1;
|
|
563
|
+
while (i < tokens.length && /^-(H|L|P|O\S*|D)$/.test(tokens[i].text)) {
|
|
564
|
+
if (tokens[i].text === '-D')
|
|
565
|
+
i++;
|
|
566
|
+
i++;
|
|
567
|
+
}
|
|
568
|
+
for (; i < tokens.length; i++) {
|
|
569
|
+
const t = tokens[i];
|
|
570
|
+
if (t.text.startsWith('-') || t.text === '(' || t.text === '!')
|
|
571
|
+
break;
|
|
572
|
+
paths.push(t);
|
|
573
|
+
}
|
|
574
|
+
if (paths.length === 0)
|
|
575
|
+
paths.push({ text: '.', globIndex: -1, hasExpansion: false });
|
|
576
|
+
for (const t of paths) {
|
|
577
|
+
// 起始路径含通配符(find dist/* -delete):shell 已展开,逐个匹配项都是目录起点,
|
|
578
|
+
// checkDeleteTarget 会按 globdir 退化到字面前缀目录,语义一致
|
|
579
|
+
const ok = t.globIndex >= 0
|
|
580
|
+
? checkDeleteTarget(t, isDeletableTarget, cwdUnreliable)
|
|
581
|
+
: (!t.hasExpansion && !!t.text && !t.text.startsWith('~') &&
|
|
582
|
+
!(cwdUnreliable && !(0, path_1.isAbsolute)(t.text)) && isDeletableTarget(t.text, 'globdir'));
|
|
583
|
+
if (!ok)
|
|
584
|
+
return 'hard';
|
|
585
|
+
}
|
|
586
|
+
return 'deletable';
|
|
587
|
+
}
|
|
588
|
+
function classifyDangerousSeg(seg, isDeletableTarget, cwdUnreliable) {
|
|
589
|
+
const s = seg.trim();
|
|
590
|
+
const first = s.split(/\s+/)[0] ?? '';
|
|
591
|
+
if (HARD_DANGEROUS_COMMANDS.has(first) || first.startsWith('mkfs'))
|
|
592
|
+
return 'hard';
|
|
593
|
+
if (first === 'find') {
|
|
594
|
+
if (FIND_HARD_ACTION_FLAGS.test(s) || classifyFindExecTargets(s) === 'dangerous')
|
|
595
|
+
return 'hard';
|
|
596
|
+
if (!FIND_DELETE_FLAG.test(s))
|
|
597
|
+
return 'none';
|
|
598
|
+
if (REDIRECTION_RE.test(s))
|
|
599
|
+
return 'hard';
|
|
600
|
+
return checkFindDeleteTargets(s, isDeletableTarget, cwdUnreliable);
|
|
601
|
+
}
|
|
602
|
+
if (DELETE_COMMANDS.has(first)) {
|
|
603
|
+
// 删除命令夹带重定向属反常组合,不细分,fail-closed
|
|
604
|
+
if (REDIRECTION_RE.test(s))
|
|
605
|
+
return 'hard';
|
|
606
|
+
return checkDeleteOperands(s, isDeletableTarget, cwdUnreliable);
|
|
607
|
+
}
|
|
608
|
+
return 'none';
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* 整条命令的危险分级:逐子命令取最严(任一 hard → hard;否则任一 deletable → deletable)。
|
|
612
|
+
* 与 hasDangerousCommand 严格对齐:本函数返回 none 当且仅当 hasDangerousCommand 为 false,
|
|
613
|
+
* 即分级只在「现状确定性转人工」的集合内部细分,绝不扩大放行面。
|
|
614
|
+
*
|
|
615
|
+
* 命令里出现 cd/pushd/popd 时后续子命令的 cwd 无法静态跟踪,相对路径目标一律拒绝
|
|
616
|
+
* (绝对路径不受影响)。解析失败 fail-closed 判 hard。
|
|
617
|
+
*
|
|
618
|
+
* @param isDeletableTarget 路径策略回调:判定单个删除目标(已解析为字面路径)是否落在
|
|
619
|
+
* 允许删除的范围(由调用方定义,通常为项目内或系统临时目录,排除项目根自身与 .git)
|
|
620
|
+
*/
|
|
621
|
+
function classifyDangerousCommand(command, isDeletableTarget) {
|
|
622
|
+
let segs;
|
|
623
|
+
try {
|
|
624
|
+
segs = (0, commands_1.splitCommand)(command);
|
|
625
|
+
}
|
|
626
|
+
catch {
|
|
627
|
+
return 'hard';
|
|
628
|
+
}
|
|
629
|
+
const cwdUnreliable = segs.some(seg => {
|
|
630
|
+
const first = seg.trim().split(/\s+/)[0];
|
|
631
|
+
return first === 'cd' || first === 'pushd' || first === 'popd';
|
|
632
|
+
});
|
|
633
|
+
let cls = 'none';
|
|
634
|
+
for (const seg of segs) {
|
|
635
|
+
const c = classifyDangerousSeg(seg, isDeletableTarget, cwdUnreliable);
|
|
636
|
+
if (c === 'hard')
|
|
637
|
+
return 'hard';
|
|
638
|
+
if (c === 'deletable')
|
|
639
|
+
cls = 'deletable';
|
|
640
|
+
}
|
|
641
|
+
return cls;
|
|
642
|
+
}
|
|
169
643
|
function isReadonlySafeSubcommand(seg) {
|
|
170
644
|
if (!seg.trim())
|
|
171
645
|
return false;
|
|
@@ -180,8 +654,17 @@ function isReadonlySafeSubcommand(seg) {
|
|
|
180
654
|
const first = s.split(/\s+/)[0];
|
|
181
655
|
if (!READONLY_COMMANDS.has(first))
|
|
182
656
|
return false;
|
|
183
|
-
|
|
657
|
+
// env 带任何参数即是「执行任意命令」的包装器(env rm -rf /),只有裸 env(打印环境变量)才只读
|
|
658
|
+
if (first === 'env' && s.split(/\s+/).length > 1)
|
|
184
659
|
return false;
|
|
660
|
+
if (first === 'find') {
|
|
661
|
+
if (ALWAYS_DANGEROUS_FIND_FLAGS.test(s))
|
|
662
|
+
return false;
|
|
663
|
+
// 只有「无 -exec」或「所有 -exec 目标均只读安全」的 find 才算只读;gray/dangerous 不走快速通道
|
|
664
|
+
const cls = classifyFindExecTargets(s);
|
|
665
|
+
if (cls !== 'no-exec' && cls !== 'readonly')
|
|
666
|
+
return false;
|
|
667
|
+
}
|
|
185
668
|
return true;
|
|
186
669
|
}
|
|
187
670
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellSafety.js","sourceRoot":"","sources":["../../src/util/shellSafety.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shellSafety.js","sourceRoot":"","sources":["../../src/util/shellSafety.ts"],"names":[],"mappings":"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"}
|