@dommaker/harness 0.8.0 → 0.8.1

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,85 @@
1
+ /**
2
+ * 命令门禁 - Command Gate
3
+ * SEC-006: 命令黑名单
4
+ *
5
+ * 检查命令是否安全,防止执行危险操作
6
+ */
7
+ import type { GateResult, CommandGateConfig, CommandBlacklistRule } from './types';
8
+ /**
9
+ * 黑名单级别
10
+ */
11
+ export type BlacklistLevel = 'block' | 'warn' | 'audit';
12
+ /**
13
+ * 默认黑名单规则
14
+ *
15
+ * 级别说明:
16
+ * - block: 禁止执行,直接拒绝
17
+ * - warn: 允许执行,但记录警告
18
+ * - audit: 允许执行,但记录审计日志
19
+ */
20
+ export declare const DEFAULT_COMMAND_BLACKLIST: CommandBlacklistRule[];
21
+ /**
22
+ * 命令门禁
23
+ */
24
+ export declare class CommandGate {
25
+ private config;
26
+ private blacklist;
27
+ constructor(config?: Partial<CommandGateConfig>);
28
+ /**
29
+ * 检查命令
30
+ */
31
+ check(command: string): Promise<GateResult>;
32
+ /**
33
+ * 检查黑名单
34
+ */
35
+ private checkBlacklist;
36
+ /**
37
+ * 格式化成功消息
38
+ */
39
+ private formatSuccessMessage;
40
+ /**
41
+ * 格式化阻止消息
42
+ */
43
+ private formatBlockMessage;
44
+ /**
45
+ * 快速检查(不生成完整 GateResult)
46
+ */
47
+ isAllowed(command: string): boolean;
48
+ /**
49
+ * 获取命令风险等级
50
+ */
51
+ getRiskLevel(command: string): 'high' | 'medium' | 'low';
52
+ /**
53
+ * 获取黑名单规则
54
+ */
55
+ getBlacklist(): CommandBlacklistRule[];
56
+ /**
57
+ * 添加自定义规则
58
+ */
59
+ addRule(rule: CommandBlacklistRule): void;
60
+ /**
61
+ * 移除规则
62
+ */
63
+ removeRule(id: string): boolean;
64
+ /**
65
+ * 获取配置
66
+ */
67
+ getConfig(): Required<CommandGateConfig>;
68
+ }
69
+ /**
70
+ * 创建命令门禁
71
+ */
72
+ export declare function createCommandGate(config?: Partial<CommandGateConfig>): CommandGate;
73
+ /**
74
+ * 获取默认命令门禁
75
+ */
76
+ export declare function getCommandGate(): CommandGate;
77
+ /**
78
+ * 快速检查命令是否允许
79
+ */
80
+ export declare function isCommandAllowed(command: string): boolean;
81
+ /**
82
+ * 快速获取命令风险等级
83
+ */
84
+ export declare function getCommandRiskLevel(command: string): 'high' | 'medium' | 'low';
85
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/gates/command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,EA0K3D,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAyB;gBAE9B,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAenD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCjD;;OAEG;IACH,OAAO,CAAC,cAAc;IAuCtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAgBnC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK;IAoBxD;;OAEG;IACH,YAAY,IAAI,oBAAoB,EAAE;IAItC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAIzC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS/B;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,iBAAiB,CAAC;CAGzC;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAElF;AAOD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAE9E"}
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ /**
3
+ * 命令门禁 - Command Gate
4
+ * SEC-006: 命令黑名单
5
+ *
6
+ * 检查命令是否安全,防止执行危险操作
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CommandGate = exports.DEFAULT_COMMAND_BLACKLIST = void 0;
10
+ exports.createCommandGate = createCommandGate;
11
+ exports.getCommandGate = getCommandGate;
12
+ exports.isCommandAllowed = isCommandAllowed;
13
+ exports.getCommandRiskLevel = getCommandRiskLevel;
14
+ /**
15
+ * 默认黑名单规则
16
+ *
17
+ * 级别说明:
18
+ * - block: 禁止执行,直接拒绝
19
+ * - warn: 允许执行,但记录警告
20
+ * - audit: 允许执行,但记录审计日志
21
+ */
22
+ exports.DEFAULT_COMMAND_BLACKLIST = [
23
+ // ========== 系统级破坏命令 ==========
24
+ {
25
+ id: 'rm-rf-root',
26
+ pattern: /\brm\s+(-[rf]+\s+)*\/\s*$/i,
27
+ level: 'block',
28
+ message: '禁止删除根目录',
29
+ category: 'system',
30
+ },
31
+ {
32
+ id: 'rm-rf-star',
33
+ pattern: /\brm\s+(-[rf]+\s+)*\*+/i,
34
+ level: 'block',
35
+ message: '禁止通配符删除',
36
+ category: 'system',
37
+ },
38
+ {
39
+ id: 'rm-rf-home',
40
+ pattern: /\brm\s+(-[rf]+\s+)*(~|\/home)/i,
41
+ level: 'block',
42
+ message: '禁止删除用户目录',
43
+ category: 'system',
44
+ },
45
+ {
46
+ id: 'rm-rf-project',
47
+ pattern: /\brm\s+(-[rf]+\s+)*\.\s*$/i,
48
+ level: 'block',
49
+ message: '禁止删除当前目录',
50
+ category: 'system',
51
+ },
52
+ // ========== 权限相关 ==========
53
+ {
54
+ id: 'chmod-777',
55
+ pattern: /\bchmod\s+(-R\s+)?777\b/i,
56
+ level: 'block',
57
+ message: '禁止设置 777 权限',
58
+ category: 'permission',
59
+ },
60
+ {
61
+ id: 'chown-root',
62
+ pattern: /\bchown\s+(-R\s+)?root\b/i,
63
+ level: 'warn',
64
+ message: '谨慎修改所有者为 root',
65
+ category: 'permission',
66
+ },
67
+ // ========== 数据库危险命令 ==========
68
+ {
69
+ id: 'drop-database',
70
+ pattern: /\bDROP\s+(DATABASE|SCHEMA)\b/i,
71
+ level: 'block',
72
+ message: '禁止删除数据库/Schema',
73
+ category: 'database',
74
+ },
75
+ {
76
+ id: 'drop-table',
77
+ pattern: /\bDROP\s+TABLE\b/i,
78
+ level: 'warn',
79
+ message: '删除表操作需要确认',
80
+ category: 'database',
81
+ },
82
+ {
83
+ id: 'truncate-table',
84
+ pattern: /\bTRUNCATE\s+TABLE?\b/i,
85
+ level: 'warn',
86
+ message: '清空表操作需要确认',
87
+ category: 'database',
88
+ },
89
+ {
90
+ id: 'delete-all',
91
+ pattern: /\bDELETE\s+FROM\b(?!.*\bWHERE\b)/i,
92
+ level: 'block',
93
+ message: '禁止无条件删除',
94
+ category: 'database',
95
+ },
96
+ // ========== 网络相关 ==========
97
+ {
98
+ id: 'iptables-flush',
99
+ pattern: /\biptables\s+(-F|--flush)\b/i,
100
+ level: 'block',
101
+ message: '禁止清空防火墙规则',
102
+ category: 'network',
103
+ },
104
+ {
105
+ id: 'curl-bash',
106
+ pattern: /\bcurl\b.*\|\s*(sudo\s+)?bash\b/i,
107
+ level: 'block',
108
+ message: '禁止从网络直接执行脚本',
109
+ category: 'network',
110
+ },
111
+ {
112
+ id: 'wget-bash',
113
+ pattern: /\bwget\b.*\|\s*(sudo\s+)?bash\b/i,
114
+ level: 'block',
115
+ message: '禁止从网络直接执行脚本',
116
+ category: 'network',
117
+ },
118
+ // ========== 特权命令 ==========
119
+ {
120
+ id: 'sudo-rm',
121
+ pattern: /\bsudo\s+.*\brm\s+/i,
122
+ level: 'block',
123
+ message: '禁止 sudo rm',
124
+ category: 'privilege',
125
+ },
126
+ {
127
+ id: 'sudo-dd',
128
+ pattern: /\bsudo\s+.*\bdd\b/i,
129
+ level: 'block',
130
+ message: '禁止 sudo dd',
131
+ category: 'privilege',
132
+ },
133
+ {
134
+ id: 'sudo-fdisk',
135
+ pattern: /\bsudo\s+.*\b(fdisk|parted)\b/i,
136
+ level: 'block',
137
+ message: '禁止 sudo 磁盘分区操作',
138
+ category: 'privilege',
139
+ },
140
+ // ========== 敏感文件 ==========
141
+ {
142
+ id: 'read-ssh-key',
143
+ pattern: /\bcat\s+.*\/\.ssh\/(id_rsa|id_ed25519)/i,
144
+ level: 'audit',
145
+ message: '读取 SSH 私钥',
146
+ category: 'sensitive',
147
+ },
148
+ {
149
+ id: 'read-env',
150
+ pattern: /\bcat\s+.*\.env\b/i,
151
+ level: 'audit',
152
+ message: '读取 .env 文件',
153
+ category: 'sensitive',
154
+ },
155
+ // ========== 进程管理 ==========
156
+ {
157
+ id: 'kill-all',
158
+ pattern: /\bkill\s+(-9\s+)?-1\b/i,
159
+ level: 'block',
160
+ message: '禁止杀死所有进程',
161
+ category: 'process',
162
+ },
163
+ {
164
+ id: 'killall',
165
+ pattern: /\bkillall\s+/i,
166
+ level: 'warn',
167
+ message: '批量杀死进程需要确认',
168
+ category: 'process',
169
+ },
170
+ // ========== 包管理 ==========
171
+ {
172
+ id: 'npm-uninstall-global',
173
+ pattern: /\bnpm\s+(uninstall|remove)\s+(-g|--global)\b/i,
174
+ level: 'warn',
175
+ message: '卸载全局包需要确认',
176
+ category: 'package',
177
+ },
178
+ {
179
+ id: 'pip-uninstall',
180
+ pattern: /\bpip\s+uninstall\s+/i,
181
+ level: 'warn',
182
+ message: '卸载 Python 包需要确认',
183
+ category: 'package',
184
+ },
185
+ ];
186
+ /**
187
+ * 命令门禁
188
+ */
189
+ class CommandGate {
190
+ config;
191
+ blacklist;
192
+ constructor(config = {}) {
193
+ this.config = {
194
+ enabled: config.enabled ?? true,
195
+ strict: config.strict ?? false,
196
+ customBlacklist: config.customBlacklist ?? [],
197
+ ignoreCategories: config.ignoreCategories ?? [],
198
+ };
199
+ // 合并默认黑名单和自定义黑名单
200
+ this.blacklist = [
201
+ ...exports.DEFAULT_COMMAND_BLACKLIST,
202
+ ...this.config.customBlacklist,
203
+ ];
204
+ }
205
+ /**
206
+ * 检查命令
207
+ */
208
+ async check(command) {
209
+ const startTime = Date.now();
210
+ if (!this.config.enabled) {
211
+ return {
212
+ gate: 'command',
213
+ passed: true,
214
+ message: '命令门禁已禁用',
215
+ timestamp: new Date().toISOString(),
216
+ duration: Date.now() - startTime,
217
+ };
218
+ }
219
+ const result = this.checkBlacklist(command);
220
+ return {
221
+ gate: 'command',
222
+ passed: result.allowed,
223
+ message: result.allowed
224
+ ? this.formatSuccessMessage(result)
225
+ : this.formatBlockMessage(result),
226
+ details: {
227
+ blocked: result.blocked,
228
+ warnings: result.warnings,
229
+ audits: result.audits,
230
+ command,
231
+ },
232
+ timestamp: new Date().toISOString(),
233
+ duration: Date.now() - startTime,
234
+ };
235
+ }
236
+ /**
237
+ * 检查黑名单
238
+ */
239
+ checkBlacklist(command) {
240
+ const blocked = [];
241
+ const warnings = [];
242
+ const audits = [];
243
+ for (const rule of this.blacklist) {
244
+ // 跳过忽略的类别
245
+ if (this.config.ignoreCategories.includes(rule.category)) {
246
+ continue;
247
+ }
248
+ if (rule.pattern.test(command)) {
249
+ switch (rule.level) {
250
+ case 'block':
251
+ blocked.push(rule);
252
+ break;
253
+ case 'warn':
254
+ warnings.push(rule);
255
+ break;
256
+ case 'audit':
257
+ audits.push(rule);
258
+ break;
259
+ }
260
+ }
261
+ }
262
+ return {
263
+ allowed: blocked.length === 0,
264
+ blocked,
265
+ warnings,
266
+ audits,
267
+ };
268
+ }
269
+ /**
270
+ * 格式化成功消息
271
+ */
272
+ formatSuccessMessage(result) {
273
+ const parts = ['命令检查通过'];
274
+ if (result.warnings.length > 0) {
275
+ parts.push(`,${result.warnings.length} 个警告`);
276
+ }
277
+ if (result.audits.length > 0) {
278
+ parts.push(`,${result.audits.length} 个审计记录`);
279
+ }
280
+ return parts.join('');
281
+ }
282
+ /**
283
+ * 格式化阻止消息
284
+ */
285
+ formatBlockMessage(result) {
286
+ const lines = [];
287
+ lines.push('命令被禁止执行:');
288
+ for (const rule of result.blocked) {
289
+ lines.push(` - [${rule.id}] ${rule.message} (${rule.category})`);
290
+ }
291
+ return lines.join('\n');
292
+ }
293
+ /**
294
+ * 快速检查(不生成完整 GateResult)
295
+ */
296
+ isAllowed(command) {
297
+ if (!this.config.enabled)
298
+ return true;
299
+ for (const rule of this.blacklist) {
300
+ if (this.config.ignoreCategories.includes(rule.category)) {
301
+ continue;
302
+ }
303
+ if (rule.level === 'block' && rule.pattern.test(command)) {
304
+ return false;
305
+ }
306
+ }
307
+ return true;
308
+ }
309
+ /**
310
+ * 获取命令风险等级
311
+ */
312
+ getRiskLevel(command) {
313
+ if (!this.config.enabled)
314
+ return 'low';
315
+ for (const rule of this.blacklist) {
316
+ if (this.config.ignoreCategories.includes(rule.category)) {
317
+ continue;
318
+ }
319
+ if (rule.pattern.test(command)) {
320
+ switch (rule.level) {
321
+ case 'block': return 'high';
322
+ case 'warn': return 'medium';
323
+ case 'audit': return 'low';
324
+ }
325
+ }
326
+ }
327
+ return 'low';
328
+ }
329
+ /**
330
+ * 获取黑名单规则
331
+ */
332
+ getBlacklist() {
333
+ return [...this.blacklist];
334
+ }
335
+ /**
336
+ * 添加自定义规则
337
+ */
338
+ addRule(rule) {
339
+ this.blacklist.push(rule);
340
+ }
341
+ /**
342
+ * 移除规则
343
+ */
344
+ removeRule(id) {
345
+ const index = this.blacklist.findIndex(r => r.id === id);
346
+ if (index >= 0) {
347
+ this.blacklist.splice(index, 1);
348
+ return true;
349
+ }
350
+ return false;
351
+ }
352
+ /**
353
+ * 获取配置
354
+ */
355
+ getConfig() {
356
+ return { ...this.config };
357
+ }
358
+ }
359
+ exports.CommandGate = CommandGate;
360
+ // ========== 便捷函数 ==========
361
+ /**
362
+ * 创建命令门禁
363
+ */
364
+ function createCommandGate(config) {
365
+ return new CommandGate(config);
366
+ }
367
+ /**
368
+ * 默认实例
369
+ */
370
+ let defaultCommandGate = null;
371
+ /**
372
+ * 获取默认命令门禁
373
+ */
374
+ function getCommandGate() {
375
+ if (!defaultCommandGate) {
376
+ defaultCommandGate = new CommandGate();
377
+ }
378
+ return defaultCommandGate;
379
+ }
380
+ /**
381
+ * 快速检查命令是否允许
382
+ */
383
+ function isCommandAllowed(command) {
384
+ return getCommandGate().isAllowed(command);
385
+ }
386
+ /**
387
+ * 快速获取命令风险等级
388
+ */
389
+ function getCommandRiskLevel(command) {
390
+ return getCommandGate().getRiskLevel(command);
391
+ }
392
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/gates/command.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,13 @@
3
3
  *
4
4
  * 统一导出所有门禁类型
5
5
  */
6
- export type { GateResult, GateContext, PerformanceThresholds, ReviewGateConfig, SecurityGateConfig, PerformanceGateConfig, ContractGateConfig, SpecAcceptanceGateConfig, AcceptanceGateContext, AcceptanceCriteria, } from './types';
6
+ export type { GateResult, GateContext, PerformanceThresholds, ReviewGateConfig, SecurityGateConfig, PerformanceGateConfig, ContractGateConfig, SpecAcceptanceGateConfig, AcceptanceGateContext, AcceptanceCriteria, CommandBlacklistRule, CommandGateConfig, } from './types';
7
7
  export { ReviewGate } from './review';
8
8
  export { SecurityGate } from './security';
9
9
  export { PerformanceGate } from './performance';
10
10
  export { ContractGate } from './contract';
11
11
  export { SpecAcceptanceGate } from './acceptance';
12
+ export { CommandGate, createCommandGate, getCommandGate, isCommandAllowed, getCommandRiskLevel, DEFAULT_COMMAND_BLACKLIST } from './command';
12
13
  import { ReviewGate } from './review';
13
14
  import { SecurityGate } from './security';
14
15
  import { PerformanceGate } from './performance';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAE9F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,kBAAkB,CAEvG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAG7I,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAE9F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,kBAAkB,CAEvG"}
@@ -5,7 +5,7 @@
5
5
  * 统一导出所有门禁类型
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.SpecAcceptanceGate = exports.ContractGate = exports.PerformanceGate = exports.SecurityGate = exports.ReviewGate = void 0;
8
+ exports.DEFAULT_COMMAND_BLACKLIST = exports.getCommandRiskLevel = exports.isCommandAllowed = exports.getCommandGate = exports.createCommandGate = exports.CommandGate = exports.SpecAcceptanceGate = exports.ContractGate = exports.PerformanceGate = exports.SecurityGate = exports.ReviewGate = void 0;
9
9
  exports.createReviewGate = createReviewGate;
10
10
  exports.createSecurityGate = createSecurityGate;
11
11
  exports.createPerformanceGate = createPerformanceGate;
@@ -22,6 +22,13 @@ var contract_1 = require("./contract");
22
22
  Object.defineProperty(exports, "ContractGate", { enumerable: true, get: function () { return contract_1.ContractGate; } });
23
23
  var acceptance_1 = require("./acceptance");
24
24
  Object.defineProperty(exports, "SpecAcceptanceGate", { enumerable: true, get: function () { return acceptance_1.SpecAcceptanceGate; } });
25
+ var command_1 = require("./command");
26
+ Object.defineProperty(exports, "CommandGate", { enumerable: true, get: function () { return command_1.CommandGate; } });
27
+ Object.defineProperty(exports, "createCommandGate", { enumerable: true, get: function () { return command_1.createCommandGate; } });
28
+ Object.defineProperty(exports, "getCommandGate", { enumerable: true, get: function () { return command_1.getCommandGate; } });
29
+ Object.defineProperty(exports, "isCommandAllowed", { enumerable: true, get: function () { return command_1.isCommandAllowed; } });
30
+ Object.defineProperty(exports, "getCommandRiskLevel", { enumerable: true, get: function () { return command_1.getCommandRiskLevel; } });
31
+ Object.defineProperty(exports, "DEFAULT_COMMAND_BLACKLIST", { enumerable: true, get: function () { return command_1.DEFAULT_COMMAND_BLACKLIST; } });
25
32
  // 便捷工厂函数
26
33
  const review_2 = require("./review");
27
34
  const security_2 = require("./security");
@@ -43,4 +50,5 @@ function createContractGate(config) {
43
50
  function createSpecAcceptanceGate(config) {
44
51
  return new acceptance_2.SpecAcceptanceGate(config);
45
52
  }
53
+ // CommandGate 已在 command.ts 中导出 createCommandGate
46
54
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAqCH,4CAEC;AAED,gDAEC;AAED,sDAEC;AAED,gDAEC;AAED,4DAEC;AAvCD,QAAQ;AACR,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAE3B,SAAS;AACT,qCAAsC;AACtC,yCAA0C;AAC1C,+CAAgD;AAChD,yCAA0C;AAC1C,6CAAkD;AASlD,SAAgB,gBAAgB,CAAC,MAAkC;IACjE,OAAO,IAAI,mBAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAuC;IAC3E,OAAO,IAAI,6BAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAA0C;IACjF,OAAO,IAAI,+BAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA0CH,4CAEC;AAED,gDAEC;AAED,sDAEC;AAED,gDAEC;AAED,4DAEC;AA1CD,QAAQ;AACR,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAC3B,qCAA6I;AAApI,sGAAA,WAAW,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AAEzH,SAAS;AACT,qCAAsC;AACtC,yCAA0C;AAC1C,+CAAgD;AAChD,yCAA0C;AAC1C,6CAAkD;AAWlD,SAAgB,gBAAgB,CAAC,MAAkC;IACjE,OAAO,IAAI,mBAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAuC;IAC3E,OAAO,IAAI,6BAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAA0C;IACjF,OAAO,IAAI,+BAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,kDAAkD"}
@@ -112,4 +112,27 @@ export interface AcceptanceCriteria {
112
112
  checked?: boolean;
113
113
  notes?: string;
114
114
  }
115
+ /**
116
+ * 命令黑名单规则
117
+ */
118
+ export interface CommandBlacklistRule {
119
+ id: string;
120
+ pattern: RegExp;
121
+ level: 'block' | 'warn' | 'audit';
122
+ message: string;
123
+ category: string;
124
+ }
125
+ /**
126
+ * 命令门禁配置
127
+ */
128
+ export interface CommandGateConfig {
129
+ /** 是否启用 */
130
+ enabled?: boolean;
131
+ /** 严格模式(warn 也阻止) */
132
+ strict?: boolean;
133
+ /** 自定义黑名单规则 */
134
+ customBlacklist?: CommandBlacklistRule[];
135
+ /** 忽略的类别 */
136
+ ignoreCategories?: string[];
137
+ }
115
138
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dommaker/harness",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "通用工程约束框架 - 铁律系统、检查点验证、测试门控、拦截器",
5
5
  "keywords": [
6
6
  "harness",