@hddz/plugin-harness 0.1.12 → 0.1.14
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.
Potentially problematic release.
This version of @hddz/plugin-harness might be problematic. Click here for more details.
- package/README.md +1 -1
- package/dist/index.d.ts +34 -49
- package/dist/index.js +103 -149
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -5,54 +5,39 @@ export interface HarnessPluginConfig {
|
|
|
5
5
|
protectedFiles: string[];
|
|
6
6
|
logsDir: string;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
declare const harnessPlugin: {
|
|
9
|
+
id: string;
|
|
9
10
|
name: string;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
warning?: string;
|
|
11
|
+
description: string;
|
|
12
|
+
kind: string;
|
|
13
|
+
configSchema: {
|
|
14
|
+
type: "object";
|
|
15
|
+
additionalProperties: boolean;
|
|
16
|
+
properties: {
|
|
17
|
+
autoValidateConfig: {
|
|
18
|
+
type: "boolean";
|
|
19
|
+
default: boolean;
|
|
20
|
+
};
|
|
21
|
+
autoAuditSkill: {
|
|
22
|
+
type: "boolean";
|
|
23
|
+
default: boolean;
|
|
24
|
+
};
|
|
25
|
+
loopDetectionEnabled: {
|
|
26
|
+
type: "boolean";
|
|
27
|
+
default: boolean;
|
|
28
|
+
};
|
|
29
|
+
protectedFiles: {
|
|
30
|
+
type: "array";
|
|
31
|
+
items: {
|
|
32
|
+
type: "string";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
logsDir: {
|
|
36
|
+
type: "string";
|
|
37
|
+
default: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
40
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
onFileDelete(filePath: string, sessionId?: string): {
|
|
45
|
-
allowed: boolean;
|
|
46
|
-
reason?: string;
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Hook: 系统命令执行前
|
|
50
|
-
*/
|
|
51
|
-
onExecCommand(command: string, sessionId?: string): void;
|
|
52
|
-
/**
|
|
53
|
-
* 获取插件状态
|
|
54
|
-
*/
|
|
55
|
-
getStatus(): any;
|
|
56
|
-
}
|
|
57
|
-
export declare function createPlugin(workspacePath: string, config: any): HarnessPlugin;
|
|
58
|
-
export default HarnessPlugin;
|
|
41
|
+
register(api: any): void;
|
|
42
|
+
};
|
|
43
|
+
export default harnessPlugin;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// src/index.ts - Harness Plugin 主入口
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.HarnessPlugin = void 0;
|
|
5
|
-
exports.createPlugin = createPlugin;
|
|
6
4
|
const harness_1 = require("@hddz/harness");
|
|
7
5
|
const DEFAULT_CONFIG = {
|
|
8
6
|
autoValidateConfig: true,
|
|
@@ -16,161 +14,117 @@ const DEFAULT_CONFIG = {
|
|
|
16
14
|
'MEMORY.md',
|
|
17
15
|
'openclaw.json',
|
|
18
16
|
],
|
|
19
|
-
logsDir: 'logs/harness',
|
|
17
|
+
logsDir: 'workspace/logs/harness',
|
|
20
18
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
const harnessPlugin = {
|
|
20
|
+
id: 'harness',
|
|
21
|
+
name: 'Harness Engineering',
|
|
22
|
+
description: 'Constraints, feedback loops, and control systems for AI agents',
|
|
23
|
+
kind: 'engineering',
|
|
24
|
+
configSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
additionalProperties: false,
|
|
27
|
+
properties: {
|
|
28
|
+
autoValidateConfig: { type: 'boolean', default: true },
|
|
29
|
+
autoAuditSkill: { type: 'boolean', default: true },
|
|
30
|
+
loopDetectionEnabled: { type: 'boolean', default: true },
|
|
31
|
+
protectedFiles: { type: 'array', items: { type: 'string' } },
|
|
32
|
+
logsDir: { type: 'string', default: 'workspace/logs/harness' },
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
register(api) {
|
|
36
|
+
const workspacePath = api.workspacePath || process.cwd();
|
|
37
|
+
const config = { ...DEFAULT_CONFIG, ...api.config };
|
|
35
38
|
// 初始化工具
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
39
|
+
const configValidator = new harness_1.ConfigValidator(workspacePath);
|
|
40
|
+
const skillAuditor = new harness_1.SkillAuditor(workspacePath);
|
|
41
|
+
const loopDetector = new harness_1.LoopDetector(workspacePath, { limit: 5, windowMs: 300000 });
|
|
42
|
+
const configLogger = new harness_1.ConfigLogger(workspacePath);
|
|
43
|
+
const operationLogger = new harness_1.OperationLogger(workspacePath);
|
|
44
|
+
const traceLogger = new harness_1.TraceLogger(workspacePath);
|
|
45
|
+
api.log('[Harness] 插件已加载,工作空间:', workspacePath);
|
|
46
|
+
// Hook: 配置修改前验证
|
|
47
|
+
if (config.autoValidateConfig) {
|
|
48
|
+
api.onConfigChange?.(async (newConfig, sessionId) => {
|
|
49
|
+
api.log('🔍 [Harness] 验证配置变更...');
|
|
50
|
+
const result = configValidator.validateContent(newConfig);
|
|
51
|
+
if (!result.valid) {
|
|
52
|
+
api.log('❌ [Harness] 配置验证失败:');
|
|
53
|
+
result.errors.forEach((e) => api.log(` - ${e}`));
|
|
54
|
+
configLogger.log({
|
|
55
|
+
sessionId: sessionId || 'unknown',
|
|
56
|
+
modifier: 'AI Agent',
|
|
57
|
+
file: 'openclaw.json',
|
|
58
|
+
changes: [],
|
|
59
|
+
reason: '配置修改(验证失败)',
|
|
60
|
+
verified: false,
|
|
61
|
+
gatewayRestarted: false,
|
|
62
|
+
});
|
|
63
|
+
throw new Error(`配置验证失败:${result.errors.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
configLogger.log({
|
|
66
|
+
sessionId: sessionId || 'unknown',
|
|
67
|
+
modifier: 'AI Agent',
|
|
68
|
+
file: 'openclaw.json',
|
|
69
|
+
changes: [],
|
|
70
|
+
reason: '配置修改',
|
|
71
|
+
verified: true,
|
|
72
|
+
gatewayRestarted: true,
|
|
73
|
+
});
|
|
74
|
+
api.log('✅ [Harness] 配置验证通过');
|
|
64
75
|
});
|
|
65
|
-
return { valid: false, errors: result.errors };
|
|
66
|
-
}
|
|
67
|
-
console.log('✅ [Harness] 配置验证通过');
|
|
68
|
-
return { valid: true };
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Hook: Skill 安装前审核
|
|
72
|
-
*/
|
|
73
|
-
async onSkillInstall(skillPath, source, sessionId) {
|
|
74
|
-
if (!this.config.autoAuditSkill) {
|
|
75
|
-
return { passed: true };
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
// Hook: Skill 安装前审核
|
|
78
|
+
if (config.autoAuditSkill) {
|
|
79
|
+
api.onSkillInstall?.(async (skillPath) => {
|
|
80
|
+
api.log('🔍 [Harness] 审核 Skill:', skillPath);
|
|
81
|
+
const auditResult = await skillAuditor.audit(skillPath, 'local');
|
|
82
|
+
if (!auditResult.passed) {
|
|
83
|
+
api.log('❌ [Harness] Skill 审核失败:');
|
|
84
|
+
auditResult.warnings.forEach((w) => api.log(` - ${w.message}`));
|
|
85
|
+
throw new Error(`Skill 审核失败:${auditResult.warnings.map((w) => w.message).join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
api.log('✅ [Harness] Skill 审核通过');
|
|
88
|
+
});
|
|
83
89
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
// Hook: 文件编辑时循环检测
|
|
91
|
+
if (config.loopDetectionEnabled) {
|
|
92
|
+
api.onFileEdit?.(async (filePath, content) => {
|
|
93
|
+
const warning = loopDetector.onFileEdit(filePath);
|
|
94
|
+
if (warning) {
|
|
95
|
+
api.log('⚠️ [Harness] 检测到频繁编辑:');
|
|
96
|
+
api.log(` 文件:${filePath}`);
|
|
97
|
+
api.log(` 警告:${warning}`);
|
|
98
|
+
throw new Error(`检测到循环编辑:${warning}`);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
93
101
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
// Hook: 文件删除前检查保护文件
|
|
103
|
+
api.onFileDelete?.(async (filePath) => {
|
|
104
|
+
const fileName = filePath.split('/').pop() || filePath;
|
|
105
|
+
if (config.protectedFiles.includes(fileName)) {
|
|
106
|
+
api.log(`❌ [Harness] 阻止删除保护文件:${filePath}`);
|
|
107
|
+
throw new Error(`不允许删除保护文件:${fileName}`);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Hook: 命令执行审计
|
|
111
|
+
api.onExecCommand?.(async (command, options) => {
|
|
112
|
+
operationLogger.log({
|
|
113
|
+
sessionId: options?.sessionId || 'unknown',
|
|
101
114
|
modifier: 'AI Agent',
|
|
102
|
-
type: '
|
|
103
|
-
description:
|
|
104
|
-
|
|
115
|
+
type: 'system_command',
|
|
116
|
+
description: `执行命令:${command}`,
|
|
117
|
+
command,
|
|
105
118
|
result: 'success',
|
|
106
119
|
});
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
console.warn(`⚠️ [Harness] 循环编辑警告:${warning}`);
|
|
112
|
-
return { allowed: true, warning }; // 允许但警告
|
|
113
|
-
}
|
|
114
|
-
return { allowed: true };
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Hook: 文件删除前检查
|
|
118
|
-
*/
|
|
119
|
-
onFileDelete(filePath, sessionId) {
|
|
120
|
-
const relativePath = filePath.split('/').pop() || filePath;
|
|
121
|
-
// 检查是否是保护文件
|
|
122
|
-
if (this.config.protectedFiles.some(f => filePath.endsWith(f))) {
|
|
123
|
-
console.error(`🚨 [Harness] 禁止删除保护文件:${filePath}`);
|
|
124
|
-
this.operationLogger.log({
|
|
125
|
-
sessionId: sessionId || 'unknown',
|
|
126
|
-
modifier: 'AI Agent',
|
|
127
|
-
type: 'file_delete',
|
|
128
|
-
description: `尝试删除保护文件:${filePath}`,
|
|
129
|
-
file: filePath,
|
|
130
|
-
result: 'error',
|
|
120
|
+
traceLogger.log({
|
|
121
|
+
sessionId: options?.sessionId || 'unknown',
|
|
122
|
+
type: 'tool_call',
|
|
123
|
+
data: { tool: 'exec', command },
|
|
131
124
|
});
|
|
132
|
-
return { allowed: false, reason: '保护文件禁止删除' };
|
|
133
|
-
}
|
|
134
|
-
this.operationLogger.log({
|
|
135
|
-
sessionId: sessionId || 'unknown',
|
|
136
|
-
modifier: 'AI Agent',
|
|
137
|
-
type: 'file_delete',
|
|
138
|
-
description: `删除文件:${filePath}`,
|
|
139
|
-
file: filePath,
|
|
140
|
-
result: 'success',
|
|
141
|
-
});
|
|
142
|
-
return { allowed: true };
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Hook: 系统命令执行前
|
|
146
|
-
*/
|
|
147
|
-
onExecCommand(command, sessionId) {
|
|
148
|
-
this.operationLogger.log({
|
|
149
|
-
sessionId: sessionId || 'unknown',
|
|
150
|
-
modifier: 'AI Agent',
|
|
151
|
-
type: 'system_command',
|
|
152
|
-
description: `执行命令:${command}`,
|
|
153
|
-
command,
|
|
154
|
-
result: 'pending',
|
|
155
125
|
});
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
getStatus() {
|
|
161
|
-
return {
|
|
162
|
-
name: this.name,
|
|
163
|
-
version: this.version,
|
|
164
|
-
enabled: true,
|
|
165
|
-
config: this.config,
|
|
166
|
-
loopStats: this.loopDetector.getStats(),
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
exports.HarnessPlugin = HarnessPlugin;
|
|
171
|
-
// OpenClaw 插件工厂函数
|
|
172
|
-
function createPlugin(workspacePath, config) {
|
|
173
|
-
return new HarnessPlugin(workspacePath, config);
|
|
174
|
-
}
|
|
175
|
-
exports.default = HarnessPlugin;
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9DQUFvQzs7O0FBZ05wQyxvQ0FFQztBQWhORCwyQ0FBd0g7QUFVeEgsTUFBTSxjQUFjLEdBQXdCO0lBQzFDLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsY0FBYyxFQUFFLElBQUk7SUFDcEIsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixjQUFjLEVBQUU7UUFDZCxTQUFTO1FBQ1QsU0FBUztRQUNULFdBQVc7UUFDWCxVQUFVO1FBQ1YsV0FBVztRQUNYLGVBQWU7S0FDaEI7SUFDRCxPQUFPLEVBQUUsY0FBYztDQUN4QixDQUFDO0FBRUYsTUFBYSxhQUFhO0lBQ3hCLElBQUksR0FBRyxTQUFTLENBQUM7SUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUVWLE1BQU0sQ0FBc0I7SUFDNUIsYUFBYSxDQUFTO0lBQ3RCLGVBQWUsQ0FBa0I7SUFDakMsWUFBWSxDQUFlO0lBQzNCLFlBQVksQ0FBZTtJQUMzQixZQUFZLENBQWU7SUFDM0IsZUFBZSxDQUFrQjtJQUNqQyxXQUFXLENBQWM7SUFFakMsWUFBWSxhQUFxQixFQUFFLFNBQXVDLEVBQUU7UUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFL0MsUUFBUTtRQUNSLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLGFB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QjtZQUN0QixXQUFXLEVBQUUsUUFBUSxPQUFPLEVBQUU7WUFDOUIsT0FBTztZQUNQLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtTQUN4QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbExELHNDQWtMQztBQUVELGtCQUFrQjtBQUNsQixTQUFnQixZQUFZLENBQUMsYUFBcUIsRUFBRSxNQUFXO0lBQzdELE9BQU8sSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxrQkFBZSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvaW5kZXgudHMgLSBIYXJuZXNzIFBsdWdpbiDkuLvlhaXlj6NcblxuaW1wb3J0IHsgQ29uZmlnVmFsaWRhdG9yLCBTa2lsbEF1ZGl0b3IsIExvb3BEZXRlY3RvciwgQ29uZmlnTG9nZ2VyLCBPcGVyYXRpb25Mb2dnZXIsIFRyYWNlTG9nZ2VyIH0gZnJvbSAnQGhkZHovaGFybmVzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFybmVzc1BsdWdpbkNvbmZpZyB7XG4gIGF1dG9WYWxpZGF0ZUNvbmZpZzogYm9vbGVhbjtcbiAgYXV0b0F1ZGl0U2tpbGw6IGJvb2xlYW47XG4gIGxvb3BEZXRlY3Rpb25FbmFibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWRGaWxlczogc3RyaW5nW107XG4gIGxvZ3NEaXI6IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DT05GSUc6IEhhcm5lc3NQbHVnaW5Db25maWcgPSB7XG4gIGF1dG9WYWxpZGF0ZUNvbmZpZzogdHJ1ZSxcbiAgYXV0b0F1ZGl0U2tpbGw6IHRydWUsXG4gIGxvb3BEZXRlY3Rpb25FbmFibGVkOiB0cnVlLFxuICBwcm90ZWN0ZWRGaWxlczogW1xuICAgICdTT1VMLm1kJyxcbiAgICAnVVNFUi5tZCcsXG4gICAgJ0FHRU5UUy5tZCcsXG4gICAgJ1RPT0xTLm1kJyxcbiAgICAnTUVNT1JZLm1kJyxcbiAgICAnb3BlbmNsYXcuanNvbicsXG4gIF0sXG4gIGxvZ3NEaXI6ICdsb2dzL2hhcm5lc3MnLFxufTtcblxuZXhwb3J0IGNsYXNzIEhhcm5lc3NQbHVnaW4ge1xuICBuYW1lID0gJ2hhcm5lc3MnO1xuICB2ZXJzaW9uID0gJzAuMS4wJztcbiAgXG4gIHByaXZhdGUgY29uZmlnOiBIYXJuZXNzUGx1Z2luQ29uZmlnO1xuICBwcml2YXRlIHdvcmtzcGFjZVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSBjb25maWdWYWxpZGF0b3I6IENvbmZpZ1ZhbGlkYXRvcjtcbiAgcHJpdmF0ZSBza2lsbEF1ZGl0b3I6IFNraWxsQXVkaXRvcjtcbiAgcHJpdmF0ZSBsb29wRGV0ZWN0b3I6IExvb3BEZXRlY3RvcjtcbiAgcHJpdmF0ZSBjb25maWdMb2dnZXI6IENvbmZpZ0xvZ2dlcjtcbiAgcHJpdmF0ZSBvcGVyYXRpb25Mb2dnZXI6IE9wZXJhdGlvbkxvZ2dlcjtcbiAgcHJpdmF0ZSB0cmFjZUxvZ2dlcjogVHJhY2VMb2dnZXI7XG5cbiAgY29uc3RydWN0b3Iod29ya3NwYWNlUGF0aDogc3RyaW5nLCBjb25maWc6IFBhcnRpYWw8SGFybmVzc1BsdWdpbkNvbmZpZz4gPSB7fSkge1xuICAgIHRoaXMud29ya3NwYWNlUGF0aCA9IHdvcmtzcGFjZVBhdGg7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICBcbiAgICAvLyDliJ3lp4vljJblt6XlhbdcbiAgICB0aGlzLmNvbmZpZ1ZhbGlkYXRvciA9IG5ldyBDb25maWdWYWxpZGF0b3Iod29ya3NwYWNlUGF0aCk7XG4gICAgdGhpcy5za2lsbEF1ZGl0b3IgPSBuZXcgU2tpbGxBdWRpdG9yKHdvcmtzcGFjZVBhdGgpO1xuICAgIHRoaXMubG9vcERldGVjdG9yID0gbmV3IExvb3BEZXRlY3Rvcih3b3Jrc3BhY2VQYXRoKTtcbiAgICB0aGlzLmNvbmZpZ0xvZ2dlciA9IG5ldyBDb25maWdMb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gICAgdGhpcy5vcGVyYXRpb25Mb2dnZXIgPSBuZXcgT3BlcmF0aW9uTG9nZ2VyKHdvcmtzcGFjZVBhdGgpO1xuICAgIHRoaXMudHJhY2VMb2dnZXIgPSBuZXcgVHJhY2VMb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSG9vazog6YWN572u5L+u5pS55YmN6aqM6K+BXG4gICAqL1xuICBhc3luYyBvbkNvbmZpZ0NoYW5nZShuZXdDb25maWc6IGFueSwgc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTx7IHZhbGlkOiBib29sZWFuOyBlcnJvcnM/OiBzdHJpbmdbXSB9PiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5hdXRvVmFsaWRhdGVDb25maWcpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ/CflI0gW0hhcm5lc3NdIOmqjOivgemFjee9ruWPmOabtC4uLicpO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29uZmlnVmFsaWRhdG9yLnZhbGlkYXRlQ29udGVudChuZXdDb25maWcpO1xuICAgIFxuICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgW0hhcm5lc3NdIOmFjee9rumqjOivgeWksei0pTonKTtcbiAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaChlID0+IGNvbnNvbGUuZXJyb3IoYCAgIC0gJHtlfWApKTtcbiAgICAgIFxuICAgICAgLy8g6K6w5b2V6YWN572u5Y+Y5pu05aSx6LSlXG4gICAgICB0aGlzLmNvbmZpZ0xvZ2dlci5sb2coe1xuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICAgIG1vZGlmaWVyOiAnQUkgQWdlbnQnLFxuICAgICAgICBmaWxlOiAnb3BlbmNsYXcuanNvbicsXG4gICAgICAgIHJlYXNvbjogJ+mFjee9ruS/ruaUue+8iOmqjOivgeWksei0pe+8iScsXG4gICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcbiAgICAgICAgZ2F0ZXdheVJlc3RhcnRlZDogZmFsc2UsXG4gICAgICAgIGNoYW5nZXM6IFtdLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3JzOiByZXN1bHQuZXJyb3JzIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKCfinIUgW0hhcm5lc3NdIOmFjee9rumqjOivgemAmui/hycpO1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogSG9vazogU2tpbGwg5a6J6KOF5YmN5a6h5qC4XG4gICAqL1xuICBhc3luYyBvblNraWxsSW5zdGFsbChza2lsbFBhdGg6IHN0cmluZywgc291cmNlPzogc3RyaW5nLCBzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHsgcGFzc2VkOiBib29sZWFuOyB3YXJuaW5ncz86IGFueVtdIH0+IHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmF1dG9BdWRpdFNraWxsKSB7XG4gICAgICByZXR1cm4geyBwYXNzZWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhg8J+UjSBbSGFybmVzc10g5a6h5qC4IFNraWxsOiAke3NraWxsUGF0aH1gKTtcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNraWxsQXVkaXRvci5hdWRpdChza2lsbFBhdGgsIHNvdXJjZSB8fCAndW5rbm93bicpO1xuICAgIFxuICAgIGlmICghcmVzdWx0LnBhc3NlZCkge1xuICAgICAgY29uc29sZS5lcnJvcihg4p2MIFtIYXJuZXNzXSBTa2lsbCDlrqHmoLjmnKrpgJrov4fvvJoke3Jlc3VsdC5yaXNrTGV2ZWx9YCk7XG4gICAgICByZXN1bHQud2FybmluZ3MuZm9yRWFjaCh3ID0+IGNvbnNvbGUuZXJyb3IoYCAgIC0gJHt3Lm1lc3NhZ2V9YCkpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBwYXNzZWQ6IGZhbHNlLCB3YXJuaW5nczogcmVzdWx0Lndhcm5pbmdzIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKGDinIUgW0hhcm5lc3NdIFNraWxsIOWuoeaguOmAmui/h++8miR7cmVzdWx0LnJpc2tMZXZlbH1gKTtcbiAgICByZXR1cm4geyBwYXNzZWQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rOiDmlofku7bnvJbovpHml7blvqrnjq/mo4DmtYtcbiAgICovXG4gIG9uRmlsZUVkaXQoZmlsZVBhdGg6IHN0cmluZywgc2Vzc2lvbklkPzogc3RyaW5nKTogeyBhbGxvd2VkOiBib29sZWFuOyB3YXJuaW5nPzogc3RyaW5nIH0ge1xuICAgIGlmICghdGhpcy5jb25maWcubG9vcERldGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB7IGFsbG93ZWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8IGZpbGVQYXRoO1xuICAgIFxuICAgIC8vIOajgOafpeaYr+WQpuaYr+S/neaKpOaWh+S7tlxuICAgIGlmICh0aGlzLmNvbmZpZy5wcm90ZWN0ZWRGaWxlcy5zb21lKGYgPT4gZmlsZVBhdGguZW5kc1dpdGgoZikpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBbSGFybmVzc10g5L+d5oqk5paH5Lu26KKr5L+u5pS577yaJHtmaWxlUGF0aH1gKTtcbiAgICAgIC8vIOiusOW9leS/neaKpOaWh+S7tuS/ruaUuVxuICAgICAgdGhpcy5vcGVyYXRpb25Mb2dnZXIubG9nKHtcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgICAgdHlwZTogJ2ZpbGVfZWRpdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBg5L+d5oqk5paH5Lu25L+u5pS577yaJHtmaWxlUGF0aH1gLFxuICAgICAgICBmaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgcmVzdWx0OiAnc3VjY2VzcycsXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8g5b6q546v5qOA5rWLXG4gICAgY29uc3Qgd2FybmluZyA9IHRoaXMubG9vcERldGVjdG9yLm9uRmlsZUVkaXQoZmlsZVBhdGgpO1xuICAgIFxuICAgIGlmICh3YXJuaW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBbSGFybmVzc10g5b6q546v57yW6L6R6K2m5ZGK77yaJHt3YXJuaW5nfWApO1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZDogdHJ1ZSwgd2FybmluZyB9OyAvLyDlhYHorrjkvYborablkYpcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgYWxsb3dlZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2s6IOaWh+S7tuWIoOmZpOWJjeajgOafpVxuICAgKi9cbiAgb25GaWxlRGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcsIHNlc3Npb25JZD86IHN0cmluZyk6IHsgYWxsb3dlZDogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgZmlsZVBhdGg7XG4gICAgXG4gICAgLy8g5qOA5p+l5piv5ZCm5piv5L+d5oqk5paH5Lu2XG4gICAgaWYgKHRoaXMuY29uZmlnLnByb3RlY3RlZEZpbGVzLnNvbWUoZiA9PiBmaWxlUGF0aC5lbmRzV2l0aChmKSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYPCfmqggW0hhcm5lc3NdIOemgeatouWIoOmZpOS/neaKpOaWh+S7tu+8miR7ZmlsZVBhdGh9YCk7XG4gICAgICBcbiAgICAgIHRoaXMub3BlcmF0aW9uTG9nZ2VyLmxvZyh7XG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkIHx8ICd1bmtub3duJyxcbiAgICAgICAgbW9kaWZpZXI6ICdBSSBBZ2VudCcsXG4gICAgICAgIHR5cGU6ICdmaWxlX2RlbGV0ZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBg5bCd6K+V5Yig6Zmk5L+d5oqk5paH5Lu277yaJHtmaWxlUGF0aH1gLFxuICAgICAgICBmaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgcmVzdWx0OiAnZXJyb3InLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGFsbG93ZWQ6IGZhbHNlLCByZWFzb246ICfkv53miqTmlofku7bnpoHmraLliKDpmaQnIH07XG4gICAgfVxuICAgIFxuICAgIHRoaXMub3BlcmF0aW9uTG9nZ2VyLmxvZyh7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgIHR5cGU6ICdmaWxlX2RlbGV0ZScsXG4gICAgICBkZXNjcmlwdGlvbjogYOWIoOmZpOaWh+S7tu+8miR7ZmlsZVBhdGh9YCxcbiAgICAgIGZpbGU6IGZpbGVQYXRoLFxuICAgICAgcmVzdWx0OiAnc3VjY2VzcycsXG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHsgYWxsb3dlZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2s6IOezu+e7n+WRveS7pOaJp+ihjOWJjVxuICAgKi9cbiAgb25FeGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNlc3Npb25JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0aW9uTG9nZ2VyLmxvZyh7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgIHR5cGU6ICdzeXN0ZW1fY29tbWFuZCcsXG4gICAgICBkZXNjcmlwdGlvbjogYOaJp+ihjOWRveS7pO+8miR7Y29tbWFuZH1gLFxuICAgICAgY29tbWFuZCxcbiAgICAgIHJlc3VsdDogJ3BlbmRpbmcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaPkuS7tueKtuaAgVxuICAgKi9cbiAgZ2V0U3RhdHVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgbG9vcFN0YXRzOiB0aGlzLmxvb3BEZXRlY3Rvci5nZXRTdGF0cygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8gT3BlbkNsYXcg5o+S5Lu25bel5Y6C5Ye95pWwXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKHdvcmtzcGFjZVBhdGg6IHN0cmluZywgY29uZmlnOiBhbnkpOiBIYXJuZXNzUGx1Z2luIHtcbiAgcmV0dXJuIG5ldyBIYXJuZXNzUGx1Z2luKHdvcmtzcGFjZVBhdGgsIGNvbmZpZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhhcm5lc3NQbHVnaW47XG4iXX0=
|
|
126
|
+
api.log('✅ [Harness] 所有 Hook 已注册');
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
exports.default = harnessPlugin;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9DQUFvQzs7QUFFcEMsMkNBQXdIO0FBVXhILE1BQU0sY0FBYyxHQUF3QjtJQUMxQyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsY0FBYyxFQUFFO1FBQ2QsU0FBUztRQUNULFNBQVM7UUFDVCxXQUFXO1FBQ1gsVUFBVTtRQUNWLFdBQVc7UUFDWCxlQUFlO0tBQ2hCO0lBQ0QsT0FBTyxFQUFFLHdCQUF3QjtDQUNsQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUc7SUFDcEIsRUFBRSxFQUFFLFNBQVM7SUFDYixJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFdBQVcsRUFBRSxnRUFBZ0U7SUFDN0UsSUFBSSxFQUFFLGFBQWE7SUFDbkIsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLFFBQWlCO1FBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsVUFBVSxFQUFFO1lBQ1Ysa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQy9ELGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDM0Qsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ2pFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFpQixFQUFFLEVBQUU7WUFDOUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQWlCLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFO1NBQ3hFO0tBQ0Y7SUFDRCxRQUFRLENBQUMsR0FBUTtRQUNmLE1BQU0sYUFBYSxHQUFH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XG5pbXBvcnQgeyBDb25maWdWYWxpZGF0b3IsIFNraWxsQXVkaXRvciwgTG9vcERldGVjdG9yLCBDb25maWdMb2dnZXIsIE9wZXJhdGlvbkxvZ2dlciwgVHJhY2VMb2dnZXIgfSBmcm9tICdAaGRkei9oYXJuZXNzJztcblxuZXhwb3J0IGludGVyZmFjZSBIYXJuZXNzUGx1Z2luQ29uZmlnIHtcbiAgYXV0b1ZhbGlkYXRlQ29uZmlnOiBib29sZWFuO1xuICBhdXRvQXVkaXRTa2lsbDogYm9vbGVhbjtcbiAgbG9vcERldGVjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZEZpbGVzOiBzdHJpbmdbXTtcbiAgbG9nc0Rpcjogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogSGFybmVzc1BsdWdpbkNvbmZpZyA9IHtcbiAgYXV0b1ZhbGlkYXRlQ29uZmlnOiB0cnVlLFxuICBhdXRvQXVkaXRTa2lsbDogdHJ1ZSxcbiAgbG9vcERldGVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gIHByb3RlY3RlZEZpbGVzOiBbXG4gICAgJ1NPVUwubWQnLFxuICAgICdVU0VSLm1kJyxcbiAgICAnQUdFTlRTLm1kJyxcbiAgICAnVE9PTFMubWQnLFxuICAgICdNRU1PUlkubWQnLFxuICAgICdvcGVuY2xhdy5qc29uJyxcbiAgXSxcbiAgbG9nc0RpcjogJ3dvcmtzcGFjZS9sb2dzL2hhcm5lc3MnLFxufTtcblxuY29uc3QgaGFybmVzc1BsdWdpbiA9IHtcbiAgaWQ6ICdoYXJuZXNzJyxcbiAgbmFtZTogJ0hhcm5lc3MgRW5naW5lZXJpbmcnLFxuICBkZXNjcmlwdGlvbjogJ0NvbnN0cmFpbnRzLCBmZWVkYmFjayBsb29wcywgYW5kIGNvbnRyb2wgc3lzdGVtcyBmb3IgQUkgYWdlbnRzJyxcbiAga2luZDogJ2VuZ2luZWVyaW5nJyxcbiAgY29uZmlnU2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcgYXMgY29uc3QsXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGF1dG9WYWxpZGF0ZUNvbmZpZzogeyB0eXBlOiAnYm9vbGVhbicgYXMgY29uc3QsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgIGF1dG9BdWRpdFNraWxsOiB7IHR5cGU6ICdib29sZWFuJyBhcyBjb25zdCwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgbG9vcERldGVjdGlvbkVuYWJsZWQ6IHsgdHlwZTogJ2Jvb2xlYW4nIGFzIGNvbnN0LCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICBwcm90ZWN0ZWRGaWxlczogeyB0eXBlOiAnYXJyYXknIGFzIGNvbnN0LCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyBhcyBjb25zdCB9IH0sXG4gICAgICBsb2dzRGlyOiB7IHR5cGU6ICdzdHJpbmcnIGFzIGNvbnN0LCBkZWZhdWx0OiAnd29ya3NwYWNlL2xvZ3MvaGFybmVzcycgfSxcbiAgICB9LFxuICB9LFxuICByZWdpc3RlcihhcGk6IGFueSkge1xuICAgIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBhcGkud29ya3NwYWNlUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGNvbmZpZzogSGFybmVzc1BsdWdpbkNvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmFwaS5jb25maWcgfTtcbiAgICBcbiAgICAvLyDliJ3lp4vljJblt6XlhbdcbiAgICBjb25zdCBjb25maWdWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHdvcmtzcGFjZVBhdGgpO1xuICAgIGNvbnN0IHNraWxsQXVkaXRvciA9IG5ldyBTa2lsbEF1ZGl0b3Iod29ya3NwYWNlUGF0aCk7XG4gICAgY29uc3QgbG9vcERldGVjdG9yID0gbmV3IExvb3BEZXRlY3Rvcih3b3Jrc3BhY2VQYXRoLCB7IGxpbWl0OiA1LCB3aW5kb3dNczogMzAwMDAwIH0pO1xuICAgIGNvbnN0IGNvbmZpZ0xvZ2dlciA9IG5ldyBDb25maWdMb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uTG9nZ2VyID0gbmV3IE9wZXJhdGlvbkxvZ2dlcih3b3Jrc3BhY2VQYXRoKTtcbiAgICBjb25zdCB0cmFjZUxvZ2dlciA9IG5ldyBUcmFjZUxvZ2dlcih3b3Jrc3BhY2VQYXRoKTtcblxuICAgIGFwaS5sb2coJ1tIYXJuZXNzXSDmj5Lku7blt7LliqDovb3vvIzlt6XkvZznqbrpl7Q6Jywgd29ya3NwYWNlUGF0aCk7XG5cbiAgICAvLyBIb29rOiDphY3nva7kv67mlLnliY3pqozor4FcbiAgICBpZiAoY29uZmlnLmF1dG9WYWxpZGF0ZUNvbmZpZykge1xuICAgICAgYXBpLm9uQ29uZmlnQ2hhbmdlPy4oYXN5bmMgKG5ld0NvbmZpZzogYW55LCBzZXNzaW9uSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgYXBpLmxvZygn8J+UjSBbSGFybmVzc10g6aqM6K+B6YWN572u5Y+Y5pu0Li4uJyk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb25maWdWYWxpZGF0b3IudmFsaWRhdGVDb250ZW50KG5ld0NvbmZpZyk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXJlc3VsdC52YWxpZCkge1xuICAgICAgICAgIGFwaS5sb2coJ+KdjCBbSGFybmVzc10g6YWN572u6aqM6K+B5aSx6LSlOicpO1xuICAgICAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZTogc3RyaW5nKSA9PiBhcGkubG9nKGAgICAtICR7ZX1gKSk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uZmlnTG9nZ2VyLmxvZyh7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICAgICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgICAgICAgIGZpbGU6ICdvcGVuY2xhdy5qc29uJyxcbiAgICAgICAgICAgIGNoYW5nZXM6IFtdLFxuICAgICAgICAgICAgcmVhc29uOiAn6YWN572u5L+u5pS577yI6aqM6K+B5aSx6LSl77yJJyxcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcbiAgICAgICAgICAgIGdhdGV3YXlSZXN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6YWN572u6aqM6K+B5aSx6LSl77yaJHtyZXN1bHQuZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbmZpZ0xvZ2dlci5sb2coe1xuICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkIHx8ICd1bmtub3duJyxcbiAgICAgICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgICAgICBmaWxlOiAnb3BlbmNsYXcuanNvbicsXG4gICAgICAgICAgY2hhbmdlczogW10sXG4gICAgICAgICAgcmVhc29uOiAn6YWN572u5L+u5pS5JyxcbiAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcbiAgICAgICAgICBnYXRld2F5UmVzdGFydGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGFwaS5sb2coJ+KchSBbSGFybmVzc10g6YWN572u6aqM6K+B6YCa6L+HJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIb29rOiBTa2lsbCDlronoo4XliY3lrqHmoLhcbiAgICBpZiAoY29uZmlnLmF1dG9BdWRpdFNraWxsKSB7XG4gICAgICBhcGkub25Ta2lsbEluc3RhbGw/Lihhc3luYyAoc2tpbGxQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYXBpLmxvZygn8J+UjSBbSGFybmVzc10g5a6h5qC4IFNraWxsOicsIHNraWxsUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBhdWRpdFJlc3VsdCA9IGF3YWl0IHNraWxsQXVkaXRvci5hdWRpdChza2lsbFBhdGgsICdsb2NhbCcpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFhdWRpdFJlc3VsdC5wYXNzZWQpIHtcbiAgICAgICAgICBhcGkubG9nKCfinYwgW0hhcm5lc3NdIFNraWxsIOWuoeaguOWksei0pTonKTtcbiAgICAgICAgICBhdWRpdFJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3OiBhbnkpID0+IGFwaS5sb2coYCAgIC0gJHt3Lm1lc3NhZ2V9YCkpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2tpbGwg5a6h5qC45aSx6LSl77yaJHthdWRpdFJlc3VsdC53YXJuaW5ncy5tYXAoKHc6IGFueSkgPT4gdy5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBhcGkubG9nKCfinIUgW0hhcm5lc3NdIFNraWxsIOWuoeaguOmAmui/hycpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSG9vazog5paH5Lu257yW6L6R5pe25b6q546v5qOA5rWLXG4gICAgaWYgKGNvbmZpZy5sb29wRGV0ZWN0aW9uRW5hYmxlZCkge1xuICAgICAgYXBpLm9uRmlsZUVkaXQ/Lihhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmcgPSBsb29wRGV0ZWN0b3Iub25GaWxlRWRpdChmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgIGFwaS5sb2coJ+KaoO+4jyBbSGFybmVzc10g5qOA5rWL5Yiw6aKR57mB57yW6L6ROicpO1xuICAgICAgICAgIGFwaS5sb2coYCAgIOaWh+S7tu+8miR7ZmlsZVBhdGh9YCk7XG4gICAgICAgICAgYXBpLmxvZyhgICAg6K2m5ZGK77yaJHt3YXJuaW5nfWApO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qOA5rWL5Yiw5b6q546v57yW6L6R77yaJHt3YXJuaW5nfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIb29rOiDmlofku7bliKDpmaTliY3mo4Dmn6Xkv53miqTmlofku7ZcbiAgICBhcGkub25GaWxlRGVsZXRlPy4oYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCBmaWxlUGF0aDtcbiAgICAgIFxuICAgICAgaWYgKGNvbmZpZy5wcm90ZWN0ZWRGaWxlcy5pbmNsdWRlcyhmaWxlTmFtZSkpIHtcbiAgICAgICAgYXBpLmxvZyhg4p2MIFtIYXJuZXNzXSDpmLvmraLliKDpmaTkv53miqTmlofku7bvvJoke2ZpbGVQYXRofWApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOS4jeWFgeiuuOWIoOmZpOS/neaKpOaWh+S7tu+8miR7ZmlsZU5hbWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIb29rOiDlkb3ku6TmiafooYzlrqHorqFcbiAgICBhcGkub25FeGVjQ29tbWFuZD8uKGFzeW5jIChjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpID0+IHtcbiAgICAgIG9wZXJhdGlvbkxvZ2dlci5sb2coe1xuICAgICAgICBzZXNzaW9uSWQ6IG9wdGlvbnM/LnNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICAgIG1vZGlmaWVyOiAnQUkgQWdlbnQnLFxuICAgICAgICB0eXBlOiAnc3lzdGVtX2NvbW1hbmQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYOaJp+ihjOWRveS7pO+8miR7Y29tbWFuZH1gLFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICByZXN1bHQ6ICdzdWNjZXNzJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0cmFjZUxvZ2dlci5sb2coe1xuICAgICAgICBzZXNzaW9uSWQ6IG9wdGlvbnM/LnNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICAgIHR5cGU6ICd0b29sX2NhbGwnLFxuICAgICAgICBkYXRhOiB7IHRvb2w6ICdleGVjJywgY29tbWFuZCB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhcGkubG9nKCfinIUgW0hhcm5lc3NdIOaJgOaciSBIb29rIOW3suazqOWGjCcpO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFybmVzc1BsdWdpbjtcbiJdfQ==
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED