@hddz/plugin-harness 0.1.13 → 0.1.15

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # @hddz/plugin-harness
2
2
 
3
3
  > **Harness Engineering 插件** - 为 AI Agent 构建约束、反馈与控制系统
4
- > **版本**: 0.1.12
4
+ > **版本**: 0.1.15
5
5
  > **作者**: 蓝山
6
6
  > **许可**: MIT
7
7
 
package/dist/index.d.ts CHANGED
@@ -5,8 +5,3 @@ export interface HarnessPluginConfig {
5
5
  protectedFiles: string[];
6
6
  logsDir: string;
7
7
  }
8
- export default function (api: any): {
9
- name: string;
10
- version: string;
11
- config: HarnessPluginConfig;
12
- };
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  // src/index.ts - Harness Plugin 主入口
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.default = default_1;
5
4
  const harness_1 = require("@hddz/harness");
6
5
  const DEFAULT_CONFIG = {
7
6
  autoValidateConfig: true,
@@ -15,105 +14,119 @@ const DEFAULT_CONFIG = {
15
14
  'MEMORY.md',
16
15
  'openclaw.json',
17
16
  ],
18
- logsDir: 'logs/harness',
17
+ logsDir: 'workspace/logs/harness',
19
18
  };
20
- // OpenClaw 插件入口函数
21
- function default_1(api) {
22
- const workspacePath = api.workspacePath || process.cwd();
23
- const config = { ...DEFAULT_CONFIG, ...api.config };
24
- // 初始化工具
25
- const configValidator = new harness_1.ConfigValidator(workspacePath);
26
- const skillAuditor = new harness_1.SkillAuditor(workspacePath);
27
- const loopDetector = new harness_1.LoopDetector(workspacePath, { limit: 5, windowMs: 300000 });
28
- const configLogger = new harness_1.ConfigLogger(workspacePath);
29
- const operationLogger = new harness_1.OperationLogger(workspacePath);
30
- const traceLogger = new harness_1.TraceLogger(workspacePath);
31
- api.log('[Harness] 插件已加载,工作空间:', workspacePath);
32
- // Hook: 配置修改前验证
33
- if (config.autoValidateConfig) {
34
- api.onConfigChange?.(async (newConfig, sessionId) => {
35
- api.log('🔍 [Harness] 验证配置变更...');
36
- const result = configValidator.validateContent(newConfig);
37
- if (!result.valid) {
38
- api.log('❌ [Harness] 配置验证失败:');
39
- result.errors.forEach((e) => api.log(` - ${e}`));
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 };
38
+ // 初始化工具
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
+ }
40
65
  configLogger.log({
41
66
  sessionId: sessionId || 'unknown',
42
67
  modifier: 'AI Agent',
43
68
  file: 'openclaw.json',
44
69
  changes: [],
45
- reason: '配置修改(验证失败)',
46
- verified: false,
47
- gatewayRestarted: false,
70
+ reason: '配置修改',
71
+ verified: true,
72
+ gatewayRestarted: true,
48
73
  });
49
- throw new Error(`配置验证失败:${result.errors.join(', ')}`);
50
- }
51
- configLogger.log({
52
- sessionId: sessionId || 'unknown',
53
- modifier: 'AI Agent',
54
- file: 'openclaw.json',
55
- changes: [],
56
- reason: '配置修改',
57
- verified: true,
58
- gatewayRestarted: true,
74
+ api.log(' [Harness] 配置验证通过');
75
+ });
76
+ }
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
+ });
89
+ }
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
+ }
59
100
  });
60
- api.log('✅ [Harness] 配置验证通过');
61
- });
62
- }
63
- // Hook: Skill 安装前审核
64
- if (config.autoAuditSkill) {
65
- api.onSkillInstall?.(async (skillPath) => {
66
- api.log('🔍 [Harness] 审核 Skill:', skillPath);
67
- const auditResult = await skillAuditor.audit(skillPath, 'local');
68
- if (!auditResult.passed) {
69
- api.log('❌ [Harness] Skill 审核失败:');
70
- auditResult.warnings.forEach((w) => api.log(` - ${w.message}`));
71
- throw new Error(`Skill 审核失败:${auditResult.warnings.map((w) => w.message).join(', ')}`);
72
- }
73
- api.log('✅ [Harness] Skill 审核通过');
74
- });
75
- }
76
- // Hook: 文件编辑时循环检测
77
- if (config.loopDetectionEnabled) {
78
- api.onFileEdit?.(async (filePath, content) => {
79
- const warning = loopDetector.onFileEdit(filePath);
80
- if (warning) {
81
- api.log('⚠️ [Harness] 检测到频繁编辑:');
82
- api.log(` 文件:${filePath}`);
83
- api.log(` 警告:${warning}`);
84
- throw new Error(`检测到循环编辑:${warning}`);
85
- }
86
- });
87
- }
88
- // Hook: 文件删除前检查保护文件
89
- api.onFileDelete?.(async (filePath) => {
90
- const fileName = filePath.split('/').pop() || filePath;
91
- if (config.protectedFiles.includes(fileName)) {
92
- api.log(`❌ [Harness] 阻止删除保护文件:${filePath}`);
93
- throw new Error(`不允许删除保护文件:${fileName}`);
94
101
  }
95
- });
96
- // Hook: 命令执行审计
97
- api.onExecCommand?.(async (command, options) => {
98
- operationLogger.log({
99
- sessionId: options?.sessionId || 'unknown',
100
- modifier: 'AI Agent',
101
- type: 'system_command',
102
- description: `执行命令:${command}`,
103
- command,
104
- result: 'success',
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
+ }
105
109
  });
106
- traceLogger.log({
107
- sessionId: options?.sessionId || 'unknown',
108
- type: 'tool_call',
109
- data: { tool: 'exec', command },
110
+ // Hook: 命令执行审计
111
+ api.onExecCommand?.(async (command, options) => {
112
+ operationLogger.log({
113
+ sessionId: options?.sessionId || 'unknown',
114
+ modifier: 'AI Agent',
115
+ type: 'system_command',
116
+ description: `执行命令:${command}`,
117
+ command,
118
+ result: 'success',
119
+ });
120
+ traceLogger.log({
121
+ sessionId: options?.sessionId || 'unknown',
122
+ type: 'tool_call',
123
+ data: { tool: 'exec', command },
124
+ });
110
125
  });
111
- });
112
- api.log('✅ [Harness] 所有 Hook 已注册');
113
- return {
114
- name: 'harness',
115
- version: '0.1.13',
116
- config,
117
- };
118
- }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9DQUFvQzs7QUE0QnBDLDRCQXNIQztBQWhKRCwyQ0FBd0g7QUFVeEgsTUFBTSxjQUFjLEdBQXdCO0lBQzFDLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsY0FBYyxFQUFFLElBQUk7SUFDcEIsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixjQUFjLEVBQUU7UUFDZCxTQUFTO1FBQ1QsU0FBUztRQUNULFdBQVc7UUFDWCxVQUFVO1FBQ1YsV0FBVztRQUNYLGVBQWU7S0FDaEI7SUFDRCxPQUFPLEVBQUUsY0FBYztDQUN4QixDQUFDO0FBRUYsa0JBQWtCO0FBQ2xCLG1CQUF3QixHQUFRO0lBQzlCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUF3QixFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXpFLFFBQVE7SUFDUixNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFHLElBQUksc0JBQVksQ0FBQyxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksc0JBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRW5ELEdBQUcsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFaEQsZ0JBQWdCO0lBQ2hCLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFjLEVBQUUsU0FBa0IsRUFBRSxFQUFFO1lBQ2hFLEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUVsQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTNELFlBQVksQ0FBQyxHQUFHLENBQUM7b0JBQ2YsU0FBUyxFQUFFLFNBQVMsSUFBSSxTQUFTO29CQUNqQyxRQUFRLEVBQUUsVUFBVTtvQkFDcEIsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLE9BQU8sRUFBRSxFQUFFO29CQUNYLE1BQU0sRUFBRSxZQUFZO29CQUNwQixRQUFRLEVBQUUsS0FBSztvQkFDZixnQkFBZ0IsRUFBRSxLQUFLO2lCQUN4QixDQUFDLENBQUM7Z0JBRUgsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQztnQkFDZixTQUFTLEVBQUUsU0FBUyxJQUFJLFNBQVM7Z0JBQ2pDLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixJQUFJLEVBQUUsZUFBZTtnQkFDckIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTthQUN2QixDQUFDLENBQUM7WUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1lBQy9DLEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVqRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ25DLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RixDQUFDO1lBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxPQUFlLEVBQUUsRUFBRTtZQUMzRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWxELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osR0FBRyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFnQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUM7UUFFdkQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBZTtJQUNmLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBZSxFQUFFLE9BQWEsRUFBRSxFQUFFO1FBQzNELGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDbEIsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUztZQUMxQyxRQUFRLEVBQUUsVUFBVTtZQUNwQixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFdBQVcsRUFBRSxRQUFRLE9BQU8sRUFBRTtZQUM5QixPQUFPO1lBQ1AsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNkLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLFNBQVM7WUFDMUMsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbkMsT0FBTztRQUNMLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLFFBQVE7UUFDakIsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2luZGV4LnRzIC0gSGFybmVzcyBQbHVnaW4g5Li75YWl5Y+jXG5cbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciwgU2tpbGxBdWRpdG9yLCBMb29wRGV0ZWN0b3IsIENvbmZpZ0xvZ2dlciwgT3BlcmF0aW9uTG9nZ2VyLCBUcmFjZUxvZ2dlciB9IGZyb20gJ0BoZGR6L2hhcm5lc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcm5lc3NQbHVnaW5Db25maWcge1xuICBhdXRvVmFsaWRhdGVDb25maWc6IGJvb2xlYW47XG4gIGF1dG9BdWRpdFNraWxsOiBib29sZWFuO1xuICBsb29wRGV0ZWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkRmlsZXM6IHN0cmluZ1tdO1xuICBsb2dzRGlyOiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBIYXJuZXNzUGx1Z2luQ29uZmlnID0ge1xuICBhdXRvVmFsaWRhdGVDb25maWc6IHRydWUsXG4gIGF1dG9BdWRpdFNraWxsOiB0cnVlLFxuICBsb29wRGV0ZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgcHJvdGVjdGVkRmlsZXM6IFtcbiAgICAnU09VTC5tZCcsXG4gICAgJ1VTRVIubWQnLFxuICAgICdBR0VOVFMubWQnLFxuICAgICdUT09MUy5tZCcsXG4gICAgJ01FTU9SWS5tZCcsXG4gICAgJ29wZW5jbGF3Lmpzb24nLFxuICBdLFxuICBsb2dzRGlyOiAnbG9ncy9oYXJuZXNzJyxcbn07XG5cbi8vIE9wZW5DbGF3IOaPkuS7tuWFpeWPo+WHveaVsFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXBpOiBhbnkpIHtcbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IGFwaS53b3Jrc3BhY2VQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGNvbmZpZzogSGFybmVzc1BsdWdpbkNvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmFwaS5jb25maWcgfTtcbiAgXG4gIC8vIOWIneWni+WMluW3peWFt1xuICBjb25zdCBjb25maWdWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHdvcmtzcGFjZVBhdGgpO1xuICBjb25zdCBza2lsbEF1ZGl0b3IgPSBuZXcgU2tpbGxBdWRpdG9yKHdvcmtzcGFjZVBhdGgpO1xuICBjb25zdCBsb29wRGV0ZWN0b3IgPSBuZXcgTG9vcERldGVjdG9yKHdvcmtzcGFjZVBhdGgsIHsgbGltaXQ6IDUsIHdpbmRvd01zOiAzMDAwMDAgfSk7XG4gIGNvbnN0IGNvbmZpZ0xvZ2dlciA9IG5ldyBDb25maWdMb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gIGNvbnN0IG9wZXJhdGlvbkxvZ2dlciA9IG5ldyBPcGVyYXRpb25Mb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gIGNvbnN0IHRyYWNlTG9nZ2VyID0gbmV3IFRyYWNlTG9nZ2VyKHdvcmtzcGFjZVBhdGgpO1xuXG4gIGFwaS5sb2coJ1tIYXJuZXNzXSDmj5Lku7blt7LliqDovb3vvIzlt6XkvZznqbrpl7Q6Jywgd29ya3NwYWNlUGF0aCk7XG5cbiAgLy8gSG9vazog6YWN572u5L+u5pS55YmN6aqM6K+BXG4gIGlmIChjb25maWcuYXV0b1ZhbGlkYXRlQ29uZmlnKSB7XG4gICAgYXBpLm9uQ29uZmlnQ2hhbmdlPy4oYXN5bmMgKG5ld0NvbmZpZzogYW55LCBzZXNzaW9uSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGFwaS5sb2coJ/CflI0gW0hhcm5lc3NdIOmqjOivgemFjee9ruWPmOabtC4uLicpO1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBjb25maWdWYWxpZGF0b3IudmFsaWRhdGVDb250ZW50KG5ld0NvbmZpZyk7XG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGFwaS5sb2coJ+KdjCBbSGFybmVzc10g6YWN572u6aqM6K+B5aSx6LSlOicpO1xuICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goKGU6IHN0cmluZykgPT4gYXBpLmxvZyhgICAgLSAke2V9YCkpO1xuICAgICAgICBcbiAgICAgICAgY29uZmlnTG9nZ2VyLmxvZyh7XG4gICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICAgIG1vZGlmaWVyOiAnQUkgQWdlbnQnLFxuICAgICAgICAgIGZpbGU6ICdvcGVuY2xhdy5qc29uJyxcbiAgICAgICAgICBjaGFuZ2VzOiBbXSxcbiAgICAgICAgICByZWFzb246ICfphY3nva7kv67mlLnvvIjpqozor4HlpLHotKXvvIknLFxuICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcbiAgICAgICAgICBnYXRld2F5UmVzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmFjee9rumqjOivgeWksei0pe+8miR7cmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25maWdMb2dnZXIubG9nKHtcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgICAgZmlsZTogJ29wZW5jbGF3Lmpzb24nLFxuICAgICAgICBjaGFuZ2VzOiBbXSxcbiAgICAgICAgcmVhc29uOiAn6YWN572u5L+u5pS5JyxcbiAgICAgICAgdmVyaWZpZWQ6IHRydWUsXG4gICAgICAgIGdhdGV3YXlSZXN0YXJ0ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgYXBpLmxvZygn4pyFIFtIYXJuZXNzXSDphY3nva7pqozor4HpgJrov4cnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhvb2s6IFNraWxsIOWuieijheWJjeWuoeaguFxuICBpZiAoY29uZmlnLmF1dG9BdWRpdFNraWxsKSB7XG4gICAgYXBpLm9uU2tpbGxJbnN0YWxsPy4oYXN5bmMgKHNraWxsUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBhcGkubG9nKCfwn5SNIFtIYXJuZXNzXSDlrqHmoLggU2tpbGw6Jywgc2tpbGxQYXRoKTtcbiAgICAgIFxuICAgICAgY29uc3QgYXVkaXRSZXN1bHQgPSBhd2FpdCBza2lsbEF1ZGl0b3IuYXVkaXQoc2tpbGxQYXRoLCAnbG9jYWwnKTtcbiAgICAgIFxuICAgICAgaWYgKCFhdWRpdFJlc3VsdC5wYXNzZWQpIHtcbiAgICAgICAgYXBpLmxvZygn4p2MIFtIYXJuZXNzXSBTa2lsbCDlrqHmoLjlpLHotKU6Jyk7XG4gICAgICAgIGF1ZGl0UmVzdWx0Lndhcm5pbmdzLmZvckVhY2goKHc6IGFueSkgPT4gYXBpLmxvZyhgICAgLSAke3cubWVzc2FnZX1gKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2tpbGwg5a6h5qC45aSx6LSl77yaJHthdWRpdFJlc3VsdC53YXJuaW5ncy5tYXAoKHc6IGFueSkgPT4gdy5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBhcGkubG9nKCfinIUgW0hhcm5lc3NdIFNraWxsIOWuoeaguOmAmui/hycpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSG9vazog5paH5Lu257yW6L6R5pe25b6q546v5qOA5rWLXG4gIGlmIChjb25maWcubG9vcERldGVjdGlvbkVuYWJsZWQpIHtcbiAgICBhcGkub25GaWxlRWRpdD8uKGFzeW5jIChmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHdhcm5pbmcgPSBsb29wRGV0ZWN0b3Iub25GaWxlRWRpdChmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIGlmICh3YXJuaW5nKSB7XG4gICAgICAgIGFwaS5sb2coJ+KaoO+4jyBbSGFybmVzc10g5qOA5rWL5Yiw6aKR57mB57yW6L6ROicpO1xuICAgICAgICBhcGkubG9nKGAgICDmlofku7bvvJoke2ZpbGVQYXRofWApO1xuICAgICAgICBhcGkubG9nKGAgICDorablkYrvvJoke3dhcm5pbmd9YCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg5qOA5rWL5Yiw5b6q546v57yW6L6R77yaJHt3YXJuaW5nfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSG9vazog5paH5Lu25Yig6Zmk5YmN5qOA5p+l5L+d5oqk5paH5Lu2XG4gIGFwaS5vbkZpbGVEZWxldGU/Lihhc3luYyAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCBmaWxlUGF0aDtcbiAgICBcbiAgICBpZiAoY29uZmlnLnByb3RlY3RlZEZpbGVzLmluY2x1ZGVzKGZpbGVOYW1lKSkge1xuICAgICAgYXBpLmxvZyhg4p2MIFtIYXJuZXNzXSDpmLvmraLliKDpmaTkv53miqTmlofku7bvvJoke2ZpbGVQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuI3lhYHorrjliKDpmaTkv53miqTmlofku7bvvJoke2ZpbGVOYW1lfWApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSG9vazog5ZG95Luk5omn6KGM5a6h6K6hXG4gIGFwaS5vbkV4ZWNDb21tYW5kPy4oYXN5bmMgKGNvbW1hbmQ6IHN0cmluZywgb3B0aW9ucz86IGFueSkgPT4ge1xuICAgIG9wZXJhdGlvbkxvZ2dlci5sb2coe1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zPy5zZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgbW9kaWZpZXI6ICdBSSBBZ2VudCcsXG4gICAgICB0eXBlOiAnc3lzdGVtX2NvbW1hbmQnLFxuICAgICAgZGVzY3JpcHRpb246IGDmiafooYzlkb3ku6TvvJoke2NvbW1hbmR9YCxcbiAgICAgIGNvbW1hbmQsXG4gICAgICByZXN1bHQ6ICdzdWNjZXNzJyxcbiAgICB9KTtcbiAgICBcbiAgICB0cmFjZUxvZ2dlci5sb2coe1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zPy5zZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgdHlwZTogJ3Rvb2xfY2FsbCcsXG4gICAgICBkYXRhOiB7IHRvb2w6ICdleGVjJywgY29tbWFuZCB9LFxuICAgIH0pO1xuICB9KTtcblxuICBhcGkubG9nKCfinIUgW0hhcm5lc3NdIOaJgOaciSBIb29rIOW3suazqOWGjCcpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGFybmVzcycsXG4gICAgdmVyc2lvbjogJzAuMS4xMycsXG4gICAgY29uZmlnLFxuICB9O1xufVxuIl19
126
+ api.log('✅ [Harness] 所有 Hook 已注册');
127
+ },
128
+ };
129
+ // CommonJS 导出(OpenClaw 期望的格式)
130
+ // @ts-ignore
131
+ module.exports = harnessPlugin;
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9DQUFvQzs7QUFFcEMsMkNBQXdIO0FBVXhILE1BQU0sY0FBYyxHQUF3QjtJQUMxQyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsY0FBYyxFQUFFO1FBQ2QsU0FBUztRQUNULFNBQVM7UUFDVCxXQUFXO1FBQ1gsVUFBVTtRQUNWLFdBQVc7UUFDWCxlQUFlO0tBQ2hCO0lBQ0QsT0FBTyxFQUFFLHdCQUF3QjtDQUNsQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUc7SUFDcEIsRUFBRSxFQUFFLFNBQVM7SUFDYixJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFdBQVcsRUFBRSxnRUFBZ0U7SUFDN0UsSUFBSSxFQUFFLGFBQWE7SUFDbkIsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLFFBQWlCO1FBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsVUFBVSxFQUFFO1lBQ1Ysa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQy9ELGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDM0Qsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ2pFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFpQixFQUFFLEVBQUU7WUFDOUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQWlCLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFO1NBQ3hFO0tBQ0Y7SUFDRCxRQUFRLENBQUMsR0FBUTtRQUNmLE1BQU0sYUFBYSxHQUFH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aW5kZXgudHMgLSBIYXJuZXNzIFBsdWdpbiDkuLvlhaXlj6NcblxuaW1wb3J0IHsgQ29uZmlnVmFsaWRhdG9yLCBTa2lsbEF1ZGl0b3IsIExvb3BEZXRlY3RvciwgQ29uZmlnTG9nZ2VyLCBPcGVyYXRpb25Mb2dnZXIsIFRyYWNlTG9nZ2VyIH0gZnJvbSAnQGhkZHovaGFybmVzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFybmVzc1BsdWdpbkNvbmZpZyB7XG4gIGF1dG9WYWxpZGF0ZUNvbmZpZzogYm9vbGVhbjtcbiAgYXV0b0F1ZGl0U2tpbGw6IGJvb2xlYW47XG4gIGxvb3BEZXRlY3Rpb25FbmFibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWRGaWxlczogc3RyaW5nW107XG4gIGxvZ3NEaXI6IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DT05GSUc6IEhhcm5lc3NQbHVnaW5Db25maWcgPSB7XG4gIGF1dG9WYWxpZGF0ZUNvbmZpZzogdHJ1ZSxcbiAgYXV0b0F1ZGl0U2tpbGw6IHRydWUsXG4gIGxvb3BEZXRlY3Rpb25FbmFibGVkOiB0cnVlLFxuICBwcm90ZWN0ZWRGaWxlczogW1xuICAgICdTT1VMLm1kJyxcbiAgICAnVVNFUi5tZCcsXG4gICAgJ0FHRU5UUy5tZCcsXG4gICAgJ1RPT0xTLm1kJyxcbiAgICAnTUVNT1JZLm1kJyxcbiAgICAnb3BlbmNsYXcuanNvbicsXG4gIF0sXG4gIGxvZ3NEaXI6ICd3b3Jrc3BhY2UvbG9ncy9oYXJuZXNzJyxcbn07XG5cbmNvbnN0IGhhcm5lc3NQbHVnaW4gPSB7XG4gIGlkOiAnaGFybmVzcycsXG4gIG5hbWU6ICdIYXJuZXNzIEVuZ2luZWVyaW5nJyxcbiAgZGVzY3JpcHRpb246ICdDb25zdHJhaW50cywgZmVlZGJhY2sgbG9vcHMsIGFuZCBjb250cm9sIHN5c3RlbXMgZm9yIEFJIGFnZW50cycsXG4gIGtpbmQ6ICdlbmdpbmVlcmluZycsXG4gIGNvbmZpZ1NjaGVtYToge1xuICAgIHR5cGU6ICdvYmplY3QnIGFzIGNvbnN0LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBhdXRvVmFsaWRhdGVDb25maWc6IHsgdHlwZTogJ2Jvb2xlYW4nIGFzIGNvbnN0LCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICBhdXRvQXVkaXRTa2lsbDogeyB0eXBlOiAnYm9vbGVhbicgYXMgY29uc3QsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgIGxvb3BEZXRlY3Rpb25FbmFibGVkOiB7IHR5cGU6ICdib29sZWFuJyBhcyBjb25zdCwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgcHJvdGVjdGVkRmlsZXM6IHsgdHlwZTogJ2FycmF5JyBhcyBjb25zdCwgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgYXMgY29uc3QgfSB9LFxuICAgICAgbG9nc0RpcjogeyB0eXBlOiAnc3RyaW5nJyBhcyBjb25zdCwgZGVmYXVsdDogJ3dvcmtzcGFjZS9sb2dzL2hhcm5lc3MnIH0sXG4gICAgfSxcbiAgfSxcbiAgcmVnaXN0ZXIoYXBpOiBhbnkpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gYXBpLndvcmtzcGFjZVBhdGggfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBjb25maWc6IEhhcm5lc3NQbHVnaW5Db25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5hcGkuY29uZmlnIH07XG4gICAgXG4gICAgLy8g5Yid5aeL5YyW5bel5YW3XG4gICAgY29uc3QgY29uZmlnVmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcih3b3Jrc3BhY2VQYXRoKTtcbiAgICBjb25zdCBza2lsbEF1ZGl0b3IgPSBuZXcgU2tpbGxBdWRpdG9yKHdvcmtzcGFjZVBhdGgpO1xuICAgIGNvbnN0IGxvb3BEZXRlY3RvciA9IG5ldyBMb29wRGV0ZWN0b3Iod29ya3NwYWNlUGF0aCwgeyBsaW1pdDogNSwgd2luZG93TXM6IDMwMDAwMCB9KTtcbiAgICBjb25zdCBjb25maWdMb2dnZXIgPSBuZXcgQ29uZmlnTG9nZ2VyKHdvcmtzcGFjZVBhdGgpO1xuICAgIGNvbnN0IG9wZXJhdGlvbkxvZ2dlciA9IG5ldyBPcGVyYXRpb25Mb2dnZXIod29ya3NwYWNlUGF0aCk7XG4gICAgY29uc3QgdHJhY2VMb2dnZXIgPSBuZXcgVHJhY2VMb2dnZXIod29ya3NwYWNlUGF0aCk7XG5cbiAgICBhcGkubG9nKCdbSGFybmVzc10g5o+S5Lu25bey5Yqg6L2977yM5bel5L2c56m66Ze0OicsIHdvcmtzcGFjZVBhdGgpO1xuXG4gICAgLy8gSG9vazog6YWN572u5L+u5pS55YmN6aqM6K+BXG4gICAgaWYgKGNvbmZpZy5hdXRvVmFsaWRhdGVDb25maWcpIHtcbiAgICAgIGFwaS5vbkNvbmZpZ0NoYW5nZT8uKGFzeW5jIChuZXdDb25maWc6IGFueSwgc2Vzc2lvbklkPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGFwaS5sb2coJ/CflI0gW0hhcm5lc3NdIOmqjOivgemFjee9ruWPmOabtC4uLicpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29uZmlnVmFsaWRhdG9yLnZhbGlkYXRlQ29udGVudChuZXdDb25maWcpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICBhcGkubG9nKCfinYwgW0hhcm5lc3NdIOmFjee9rumqjOivgeWksei0pTonKTtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goKGU6IHN0cmluZykgPT4gYXBpLmxvZyhgICAgLSAke2V9YCkpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbmZpZ0xvZ2dlci5sb2coe1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICAgICAgbW9kaWZpZXI6ICdBSSBBZ2VudCcsXG4gICAgICAgICAgICBmaWxlOiAnb3BlbmNsYXcuanNvbicsXG4gICAgICAgICAgICBjaGFuZ2VzOiBbXSxcbiAgICAgICAgICAgIHJlYXNvbjogJ+mFjee9ruS/ruaUue+8iOmqjOivgeWksei0pe+8iScsXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXG4gICAgICAgICAgICBnYXRld2F5UmVzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmFjee9rumqjOivgeWksei0pe+8miR7cmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25maWdMb2dnZXIubG9nKHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCB8fCAndW5rbm93bicsXG4gICAgICAgICAgbW9kaWZpZXI6ICdBSSBBZ2VudCcsXG4gICAgICAgICAgZmlsZTogJ29wZW5jbGF3Lmpzb24nLFxuICAgICAgICAgIGNoYW5nZXM6IFtdLFxuICAgICAgICAgIHJlYXNvbjogJ+mFjee9ruS/ruaUuScsXG4gICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXG4gICAgICAgICAgZ2F0ZXdheVJlc3RhcnRlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBhcGkubG9nKCfinIUgW0hhcm5lc3NdIOmFjee9rumqjOivgemAmui/hycpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSG9vazogU2tpbGwg5a6J6KOF5YmN5a6h5qC4XG4gICAgaWYgKGNvbmZpZy5hdXRvQXVkaXRTa2lsbCkge1xuICAgICAgYXBpLm9uU2tpbGxJbnN0YWxsPy4oYXN5bmMgKHNraWxsUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGFwaS5sb2coJ/CflI0gW0hhcm5lc3NdIOWuoeaguCBTa2lsbDonLCBza2lsbFBhdGgpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgYXVkaXRSZXN1bHQgPSBhd2FpdCBza2lsbEF1ZGl0b3IuYXVkaXQoc2tpbGxQYXRoLCAnbG9jYWwnKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghYXVkaXRSZXN1bHQucGFzc2VkKSB7XG4gICAgICAgICAgYXBpLmxvZygn4p2MIFtIYXJuZXNzXSBTa2lsbCDlrqHmoLjlpLHotKU6Jyk7XG4gICAgICAgICAgYXVkaXRSZXN1bHQud2FybmluZ3MuZm9yRWFjaCgodzogYW55KSA9PiBhcGkubG9nKGAgICAtICR7dy5tZXNzYWdlfWApKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNraWxsIOWuoeaguOWksei0pe+8miR7YXVkaXRSZXN1bHQud2FybmluZ3MubWFwKCh3OiBhbnkpID0+IHcubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYXBpLmxvZygn4pyFIFtIYXJuZXNzXSBTa2lsbCDlrqHmoLjpgJrov4cnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhvb2s6IOaWh+S7tue8lui+keaXtuW+queOr+ajgOa1i1xuICAgIGlmIChjb25maWcubG9vcERldGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIGFwaS5vbkZpbGVFZGl0Py4oYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB3YXJuaW5nID0gbG9vcERldGVjdG9yLm9uRmlsZUVkaXQoZmlsZVBhdGgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHdhcm5pbmcpIHtcbiAgICAgICAgICBhcGkubG9nKCfimqDvuI8gW0hhcm5lc3NdIOajgOa1i+WIsOmikee5gee8lui+kTonKTtcbiAgICAgICAgICBhcGkubG9nKGAgICDmlofku7bvvJoke2ZpbGVQYXRofWApO1xuICAgICAgICAgIGFwaS5sb2coYCAgIOitpuWRiu+8miR7d2FybmluZ31gKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOajgOa1i+WIsOW+queOr+e8lui+ke+8miR7d2FybmluZ31gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSG9vazog5paH5Lu25Yig6Zmk5YmN5qOA5p+l5L+d5oqk5paH5Lu2XG4gICAgYXBpLm9uRmlsZURlbGV0ZT8uKGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgZmlsZVBhdGg7XG4gICAgICBcbiAgICAgIGlmIChjb25maWcucHJvdGVjdGVkRmlsZXMuaW5jbHVkZXMoZmlsZU5hbWUpKSB7XG4gICAgICAgIGFwaS5sb2coYOKdjCBbSGFybmVzc10g6Zi75q2i5Yig6Zmk5L+d5oqk5paH5Lu277yaJHtmaWxlUGF0aH1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuI3lhYHorrjliKDpmaTkv53miqTmlofku7bvvJoke2ZpbGVOYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSG9vazog5ZG95Luk5omn6KGM5a6h6K6hXG4gICAgYXBpLm9uRXhlY0NvbW1hbmQ/Lihhc3luYyAoY29tbWFuZDogc3RyaW5nLCBvcHRpb25zPzogYW55KSA9PiB7XG4gICAgICBvcGVyYXRpb25Mb2dnZXIubG9nKHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zPy5zZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICBtb2RpZmllcjogJ0FJIEFnZW50JyxcbiAgICAgICAgdHlwZTogJ3N5c3RlbV9jb21tYW5kJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGDmiafooYzlkb3ku6TvvJoke2NvbW1hbmR9YCxcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgcmVzdWx0OiAnc3VjY2VzcycsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdHJhY2VMb2dnZXIubG9nKHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zPy5zZXNzaW9uSWQgfHwgJ3Vua25vd24nLFxuICAgICAgICB0eXBlOiAndG9vbF9jYWxsJyxcbiAgICAgICAgZGF0YTogeyB0b29sOiAnZXhlYycsIGNvbW1hbmQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXBpLmxvZygn4pyFIFtIYXJuZXNzXSDmiYDmnIkgSG9vayDlt7Lms6jlhownKTtcbiAgfSxcbn07XG5cbi8vIENvbW1vbkpTIOWvvOWHuu+8iE9wZW5DbGF3IOacn+acm+eahOagvOW8j++8iVxuLy8gQHRzLWlnbm9yZVxubW9kdWxlLmV4cG9ydHMgPSBoYXJuZXNzUGx1Z2luO1xuIl19
@@ -2,7 +2,7 @@
2
2
  "id": "harness",
3
3
  "name": "Harness Engineering",
4
4
  "description": "Constraints, feedback loops, and control systems for AI agents",
5
- "version": "0.1.13",
5
+ "version": "0.1.15",
6
6
  "kind": "engineering",
7
7
  "configSchema": {
8
8
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hddz/plugin-harness",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Harness Engineering plugin for OpenClaw - constraints, feedback loops, and control systems for AI agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",