@goplus/agentguard 1.1.28-beta.2 → 1.1.28

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.
Files changed (40) hide show
  1. package/README.md +3 -2
  2. package/dist/action/detectors/network.d.ts.map +1 -1
  3. package/dist/action/detectors/network.js +63 -0
  4. package/dist/action/detectors/network.js.map +1 -1
  5. package/dist/cli.js +14 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/installers.d.ts +1 -0
  8. package/dist/installers.d.ts.map +1 -1
  9. package/dist/installers.js +144 -6
  10. package/dist/installers.js.map +1 -1
  11. package/dist/tests/action.test.js +113 -0
  12. package/dist/tests/action.test.js.map +1 -1
  13. package/dist/tests/cli-init.test.js +8 -3
  14. package/dist/tests/cli-init.test.js.map +1 -1
  15. package/dist/tests/installer.test.js +47 -7
  16. package/dist/tests/installer.test.js.map +1 -1
  17. package/dist/tests/mcpb-manifest.test.d.ts +2 -0
  18. package/dist/tests/mcpb-manifest.test.d.ts.map +1 -0
  19. package/dist/tests/mcpb-manifest.test.js +83 -0
  20. package/dist/tests/mcpb-manifest.test.js.map +1 -0
  21. package/docs/SECURITY-POLICY.md +22 -0
  22. package/docs/hermes.md +46 -15
  23. package/docs/mcpb-build.md +49 -0
  24. package/package.json +5 -2
  25. package/plugins/hermes/README.md +78 -0
  26. package/plugins/hermes/__init__.py +13 -0
  27. package/plugins/hermes/bridge.py +305 -0
  28. package/plugins/hermes/plugin.py +116 -0
  29. package/plugins/hermes/plugin.yaml +19 -0
  30. package/plugins/hermes/tests/conftest.py +8 -0
  31. package/plugins/hermes/tests/helpers.py +70 -0
  32. package/plugins/hermes/tests/test_allow.py +30 -0
  33. package/plugins/hermes/tests/test_ask.py +18 -0
  34. package/plugins/hermes/tests/test_block.py +38 -0
  35. package/plugins/hermes/tests/test_command.py +29 -0
  36. package/plugins/hermes/tests/test_failmodes.py +57 -0
  37. package/plugins/hermes/tests/test_post.py +19 -0
  38. package/plugins/hermes/tests/test_resolution.py +35 -0
  39. package/plugins/hermes/tests/test_validation.py +43 -0
  40. package/skills/agentguard/action-policies.md +22 -0
@@ -23,9 +23,49 @@ const installers_js_1 = require("../installers.js");
23
23
  strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, '.codex', 'skills', 'agentguard', 'SKILL.md')));
24
24
  strict_1.default.ok((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, '.codex', 'agentguard-hook.json'), 'utf8').includes('AGENTGUARD_AGENT_HOST=codex'));
25
25
  });
26
- (0, node_test_1.it)('writes Hermes skill and enables hook config', () => {
27
- const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agentguard-hermes-'));
26
+ (0, node_test_1.it)('installs and enables the native Hermes plugin by default', () => {
27
+ const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agentguard-hermes-plugin-'));
28
28
  const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
29
+ const pluginDir = (0, node_path_1.join)(dir, '.hermes', 'plugins', 'agentguard');
30
+ const configPath = (0, node_path_1.join)(dir, '.hermes', 'config.yaml');
31
+ const config = (0, node_fs_1.readFileSync)(configPath, 'utf8');
32
+ strict_1.default.equal(result.agent, 'hermes');
33
+ strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(pluginDir, 'plugin.yaml')));
34
+ strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(pluginDir, '__init__.py')));
35
+ strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(pluginDir, 'bridge.py')));
36
+ strict_1.default.ok((0, node_fs_1.readFileSync)((0, node_path_1.join)(pluginDir, 'plugin.yaml'), 'utf8').includes('name: agentguard'));
37
+ // Tests are excluded from the bundled copy.
38
+ strict_1.default.ok(!(0, node_fs_1.existsSync)((0, node_path_1.join)(pluginDir, 'tests')));
39
+ strict_1.default.ok(result.files.includes(pluginDir));
40
+ strict_1.default.ok(result.files.includes(configPath));
41
+ // The bundled skill is still installed for the engine fallback / auto-scan.
42
+ strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, '.hermes', 'skills', 'agentguard', 'SKILL.md')));
43
+ strict_1.default.match(config, /^plugins:\n enabled:\n - agentguard\n$/);
44
+ strict_1.default.ok(!config.includes('pre_tool_call:'));
45
+ });
46
+ (0, node_test_1.it)('preserves existing Hermes native plugin config while enabling AgentGuard', () => {
47
+ const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agentguard-hermes-plugin-existing-'));
48
+ const configPath = (0, node_path_1.join)(dir, '.hermes', 'config.yaml');
49
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(configPath), { recursive: true });
50
+ (0, node_fs_1.writeFileSync)(configPath, [
51
+ 'theme: dark',
52
+ 'plugins:',
53
+ ' enabled:',
54
+ ' - other-plugin',
55
+ ' disabled:',
56
+ ' - old-plugin',
57
+ '',
58
+ ].join('\n'));
59
+ (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
60
+ const config = (0, node_fs_1.readFileSync)(configPath, 'utf8');
61
+ strict_1.default.ok(config.includes('theme: dark'));
62
+ strict_1.default.ok(config.includes(' enabled:\n - other-plugin\n - agentguard'));
63
+ strict_1.default.ok(config.includes(' disabled:\n - old-plugin'));
64
+ strict_1.default.ok(!config.includes('pre_tool_call:'));
65
+ });
66
+ (0, node_test_1.it)('writes Hermes skill and enables hook config with --shell-hooks', () => {
67
+ const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'agentguard-hermes-'));
68
+ const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir, shellHooks: true });
29
69
  const config = (0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, '.hermes', 'config.yaml'), 'utf8');
30
70
  strict_1.default.equal(result.agent, 'hermes');
31
71
  strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, '.hermes', 'skills', 'agentguard', 'SKILL.md')));
@@ -39,7 +79,7 @@ const installers_js_1 = require("../installers.js");
39
79
  const originalHermesHome = process.env.HERMES_HOME;
40
80
  process.env.HERMES_HOME = hermesHome;
41
81
  try {
42
- const result = (0, installers_js_1.installAgentTemplates)('hermes');
82
+ const result = (0, installers_js_1.installAgentTemplates)('hermes', { shellHooks: true });
43
83
  const config = (0, node_fs_1.readFileSync)((0, node_path_1.join)(hermesHome, 'config.yaml'), 'utf8');
44
84
  strict_1.default.equal(result.agent, 'hermes');
45
85
  strict_1.default.ok(result.files.includes((0, node_path_1.join)(hermesHome, 'config.yaml')));
@@ -58,7 +98,7 @@ const installers_js_1 = require("../installers.js");
58
98
  const configPath = (0, node_path_1.join)(dir, '.hermes', 'config.yaml');
59
99
  (0, node_fs_1.mkdirSync)((0, node_path_1.join)(dir, '.hermes'), { recursive: true });
60
100
  (0, node_fs_1.writeFileSync)(configPath, 'theme: dark\nhooks:\n custom_event:\n - command: "echo keep"\n');
61
- (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
101
+ (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir, shellHooks: true });
62
102
  const config = (0, node_fs_1.readFileSync)(configPath, 'utf8');
63
103
  strict_1.default.ok(config.includes('theme: dark'));
64
104
  strict_1.default.ok(config.includes('custom_event:'));
@@ -73,7 +113,7 @@ const installers_js_1 = require("../installers.js");
73
113
  (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(rootConfigPath), { recursive: true });
74
114
  (0, node_fs_1.writeFileSync)(rootConfigPath, 'theme: dark\n');
75
115
  (0, node_fs_1.writeFileSync)(profileConfigPath, 'profile: agent2\nhooks: {}\n');
76
- const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
116
+ const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir, shellHooks: true });
77
117
  const rootConfig = (0, node_fs_1.readFileSync)(rootConfigPath, 'utf8');
78
118
  const profileConfig = (0, node_fs_1.readFileSync)(profileConfigPath, 'utf8');
79
119
  strict_1.default.ok(result.files.includes(profileConfigPath));
@@ -90,7 +130,7 @@ const installers_js_1 = require("../installers.js");
90
130
  (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(nestedConfigPath), { recursive: true });
91
131
  (0, node_fs_1.writeFileSync)(rootConfigPath, 'theme: dark\n');
92
132
  (0, node_fs_1.writeFileSync)(nestedConfigPath, 'project: keep\n');
93
- const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
133
+ const result = (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir, shellHooks: true });
94
134
  const rootConfig = (0, node_fs_1.readFileSync)(rootConfigPath, 'utf8');
95
135
  const nestedConfig = (0, node_fs_1.readFileSync)(nestedConfigPath, 'utf8');
96
136
  strict_1.default.ok(result.files.includes(rootConfigPath));
@@ -111,7 +151,7 @@ const installers_js_1 = require("../installers.js");
111
151
  'hooks: {}',
112
152
  '',
113
153
  ].join('\n'));
114
- (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir });
154
+ (0, installers_js_1.installAgentTemplates)('hermes', { cwd: dir, shellHooks: true });
115
155
  const config = (0, node_fs_1.readFileSync)(configPath, 'utf8');
116
156
  strict_1.default.equal((config.match(/^hooks:$/gm) ?? []).length, 2);
117
157
  strict_1.default.equal((config.match(/^ pre_tool_call:$/gm) ?? []).length, 2);
@@ -1 +1 @@
1
- {"version":3,"file":"installer.test.js","sourceRoot":"","sources":["../../src/tests/installer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.test.js","sourceRoot":"","sources":["../../src/tests/installer.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAyC;AACzC,gEAAwC;AACxC,qCAA0F;AAC1F,yCAA0C;AAC1C,qCAAiC;AACjC,oDAAyD;AAEzD,IAAA,oBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAA,cAAE,EAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAElE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC9E,gBAAM,CAAC,EAAE,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC7D,IAAA,qCAAqB,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAE7C,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/E,gBAAM,CAAC,EAAE,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,sBAAsB,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEhD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QACtD,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QACtD,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACpD,gBAAM,CAAC,EAAE,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7F,4CAA4C;QAC5C,gBAAM,CAAC,EAAE,CAAC,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,4EAA4E;QAC5E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAChF,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,4CAA4C,CAAC,CAAC;QACnE,gBAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oCAAoC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAA,uBAAa,EAAC,UAAU,EAAE;YACxB,aAAa;YACb,UAAU;YACV,YAAY;YACZ,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEd,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC/E,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC5D,gBAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAEzE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAChF,gBAAM,CAAC,EAAE,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,+BAA+B,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClH,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;YAErE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACrC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YAClE,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5E,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;;gBAChE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,kBAAkB,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,IAAA,mBAAS,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAA,uBAAa,EAAC,UAAU,EAAE,oEAAoE,CAAC,CAAC;QAEhG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7C,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACpF,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAA,uBAAa,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAC/C,IAAA,uBAAa,EAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,UAAU,GAAG,IAAA,sBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAA,sBAAY,EAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC9D,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACpD,gBAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjD,gBAAM,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrD,gBAAM,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpD,gBAAM,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,gCAAgC,CAAC,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAChF,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAA,uBAAa,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAC/C,IAAA,uBAAa,EAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,UAAU,GAAG,IAAA,sBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAA,sBAAY,EAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5D,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACjD,gBAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpD,gBAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjD,gBAAM,CAAC,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oCAAoC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAA,uBAAa,EAAC,UAAU,EAAE;YACxB,aAAa;YACb,QAAQ;YACR,iBAAiB;YACjB,4BAA4B;YAC5B,cAAc;YACd,WAAW;YACX,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEd,IAAA,qCAAqB,EAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,gBAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,gBAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAEnF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/E,gBAAM,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,sBAAsB,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAEzF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACjF,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAClF,gBAAM,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAClE,gBAAM,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACzE,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACvD,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpD,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAChF,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzD,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAE5D,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,aAAa,CAAC;YAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAExC,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC,UAAU,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,kBAAkB,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACrF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,aAAa,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAE/F,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;YAClE,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACnE,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACxE,gBAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjE,gBAAM,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC3E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1E,gBAAM,CAAC,EAAE,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;gBAAS,CAAC;YACT,IAAI,gBAAgB,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;gBACrE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;YACvD,IAAI,kBAAkB,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;;gBACzE,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,kBAAkB,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC5D,IAAA,mBAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAA,mBAAS,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAA,uBAAa,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5D,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,SAAS;iBACV;aACF;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAExC,IAAA,qCAAqB,EAAC,UAAU,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,kBAAkB,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACrF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,aAAa,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAE/F,gBAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjE,gBAAM,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACT,IAAI,gBAAgB,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;gBACrE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;YACvD,IAAI,kBAAkB,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;;gBACzE,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,kBAAkB,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,+BAA+B,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3D,IAAA,mBAAS,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,IAAA,uBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAA,qCAAqB,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACnE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcpb-manifest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpb-manifest.test.d.ts","sourceRoot":"","sources":["../../src/tests/mcpb-manifest.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const strict_1 = __importDefault(require("node:assert/strict"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ // Compiled location is dist/tests/mcpb-manifest.test.js, so the repo root is two
11
+ // levels up. This keeps the test independent of the cwd `npm test` runs from.
12
+ const repoRoot = node_path_1.default.resolve(__dirname, '..', '..');
13
+ const manifestPath = node_path_1.default.join(repoRoot, 'mcpb', 'manifest.json');
14
+ const iconPath = node_path_1.default.join(repoRoot, 'mcpb', 'icon.png');
15
+ const packagePath = node_path_1.default.join(repoRoot, 'package.json');
16
+ const buildScriptPath = node_path_1.default.join(repoRoot, 'scripts', 'build-mcpb.sh');
17
+ const manifest = JSON.parse(node_fs_1.default.readFileSync(manifestPath, 'utf8'));
18
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(packagePath, 'utf8'));
19
+ const buildScript = node_fs_1.default.readFileSync(buildScriptPath, 'utf8');
20
+ // Minimal PNG header reader: validates the signature and returns IHDR dimensions.
21
+ function readPngSize(buf) {
22
+ const signature = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
23
+ strict_1.default.ok(buf.subarray(0, 8).equals(signature), 'icon.png must be a valid PNG');
24
+ strict_1.default.equal(buf.subarray(12, 16).toString('ascii'), 'IHDR', 'PNG must start with IHDR chunk');
25
+ return { width: buf.readUInt32BE(16), height: buf.readUInt32BE(20) };
26
+ }
27
+ (0, node_test_1.describe)('mcpb/manifest.json — MCP Directory requirements', () => {
28
+ (0, node_test_1.it)('declares manifest_version >= 0.3 (required for privacy_policies)', () => {
29
+ strict_1.default.equal(typeof manifest.manifest_version, 'string');
30
+ const [major, minor] = manifest.manifest_version.split('.').map(Number);
31
+ strict_1.default.ok(major > 0 || minor >= 3, `manifest_version ${manifest.manifest_version} must be >= 0.3`);
32
+ });
33
+ (0, node_test_1.it)('references an icon file that exists and is a square PNG', () => {
34
+ strict_1.default.equal(manifest.icon, 'icon.png', 'icon field must be "icon.png" (bundle root)');
35
+ strict_1.default.ok(node_fs_1.default.existsSync(iconPath), 'mcpb/icon.png must exist');
36
+ const { width, height } = readPngSize(node_fs_1.default.readFileSync(iconPath));
37
+ strict_1.default.equal(width, height, `icon must be square, got ${width}x${height}`);
38
+ strict_1.default.ok(width >= 256, `icon must be at least 256px, got ${width}px`);
39
+ });
40
+ (0, node_test_1.it)('declares a non-empty privacy_policies list of https URLs', () => {
41
+ strict_1.default.ok(Array.isArray(manifest.privacy_policies), 'privacy_policies must be an array');
42
+ strict_1.default.ok(manifest.privacy_policies.length > 0, 'privacy_policies must not be empty');
43
+ for (const url of manifest.privacy_policies) {
44
+ strict_1.default.match(url, /^https:\/\//, `privacy policy URL must be https: ${url}`);
45
+ // Guard against pasting a tracking-redirect wrapper instead of the canonical policy.
46
+ strict_1.default.doesNotMatch(url, /google\.com\/url\?/, `privacy policy must not be a redirect wrapper: ${url}`);
47
+ }
48
+ });
49
+ (0, node_test_1.it)('keeps manifest version in sync with package.json', () => {
50
+ strict_1.default.equal(manifest.version, pkg.version, 'manifest.version must match package.json version');
51
+ });
52
+ (0, node_test_1.it)('points the server entry at the compiled MCP server', () => {
53
+ strict_1.default.equal(manifest.server?.type, 'node');
54
+ strict_1.default.equal(manifest.server?.entry_point, 'server/dist/mcp-server.js');
55
+ strict_1.default.equal(manifest.server?.mcp_config?.command, 'node');
56
+ });
57
+ (0, node_test_1.it)('lists tools, including the off-machine registry tools that triggered the privacy requirement', () => {
58
+ strict_1.default.ok(Array.isArray(manifest.tools) && manifest.tools.length > 0, 'tools must be non-empty');
59
+ for (const tool of manifest.tools) {
60
+ strict_1.default.equal(typeof tool.name, 'string');
61
+ strict_1.default.ok(tool.name.length > 0, 'each tool needs a name');
62
+ strict_1.default.ok(typeof tool.description === 'string' && tool.description.length > 0, 'each tool needs a description');
63
+ }
64
+ const names = manifest.tools.map((t) => t.name);
65
+ for (const required of ['registry_lookup', 'registry_attest', 'registry_revoke', 'registry_list']) {
66
+ strict_1.default.ok(names.includes(required), `manifest must list ${required}`);
67
+ }
68
+ });
69
+ });
70
+ (0, node_test_1.describe)('scripts/build-mcpb.sh — bundle hygiene', () => {
71
+ (0, node_test_1.it)('does not run package lifecycle scripts during the release build install', () => {
72
+ strict_1.default.match(buildScript, /\bnpm ci --ignore-scripts\b/);
73
+ strict_1.default.doesNotMatch(buildScript, /\bnpm ci\n/);
74
+ });
75
+ (0, node_test_1.it)('removes non-runtime TypeScript artifacts from the packaged server dist', () => {
76
+ strict_1.default.match(buildScript, /rm -rf "\$STAGE\/server\/dist\/tests"/);
77
+ strict_1.default.match(buildScript, /-name '\*\.map'/);
78
+ strict_1.default.match(buildScript, /-name '\*\.d\.ts'/);
79
+ strict_1.default.match(buildScript, /\^server\/dist\/tests\//);
80
+ strict_1.default.match(buildScript, /\\\.map\|\\\.d\\\.ts/);
81
+ });
82
+ });
83
+ //# sourceMappingURL=mcpb-manifest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpb-manifest.test.js","sourceRoot":"","sources":["../../src/tests/mcpb-manifest.test.ts"],"names":[],"mappings":"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"}
@@ -180,6 +180,28 @@ Commands matching the safe list are allowed without restriction, **unless** they
180
180
  6. POST/PUT to untrusted domain → escalate medium → high
181
181
  7. Domain in allowlist → **ALLOW** (low)
182
182
 
183
+ #### Social Account Actions
184
+
185
+ Mutating requests to X/Twitter or TweetClaw social account endpoints receive the
186
+ `SOCIAL_ACCOUNT_ACTION` risk tag and escalate to **high** risk. These actions can
187
+ post tweets, post tweet replies, send direct messages, upload media, create
188
+ monitors, register webhooks, or run giveaway draws, so balanced mode prompts the
189
+ operator before execution instead of silently allowing the request.
190
+
191
+ | Example | Risk |
192
+ |---------|------|
193
+ | `POST https://api.twitter.com/2/tweets` | high |
194
+ | `POST https://xquik.com/api/v1/x/tweets` | high |
195
+ | `POST https://xquik.com/api/v1/x/dm/12345` | high |
196
+ | `POST https://xquik.com/api/v1/x/media` | high |
197
+ | `POST https://xquik.com/api/v1/monitors` | high |
198
+ | `POST https://xquik.com/api/v1/webhooks` | high |
199
+ | `POST https://xquik.com/api/v1/draws` | high |
200
+
201
+ Read-only TweetClaw requests such as tweet search, user lookup, or follower
202
+ export remain low risk unless they hit another rule such as secret scanning,
203
+ high-risk TLD handling, or webhook exfiltration.
204
+
183
205
  ---
184
206
 
185
207
  ### 4.3 File Operations (`read_file` / `write_file`)
package/docs/hermes.md CHANGED
@@ -1,20 +1,54 @@
1
1
  # Hermes Agent
2
2
 
3
- Hermes Agent can use AgentGuard through Hermes shell hooks. AgentGuard evaluates
4
- `pre_tool_call` events before risky tools execute and returns Hermes-compatible
5
- block decisions on stdout.
3
+ AgentGuard integrates with [Hermes Agent](https://github.com/NousResearch/hermes-agent)
4
+ two ways: a **native plugin** (recommended) and **shell hooks** (fallback). Both
5
+ route tool calls through the same AgentGuard decision engine, so detection logic
6
+ is identical; they differ only in how they are installed and managed.
6
7
 
7
- ## Shell hook usage
8
+ ## Native plugin (recommended)
8
9
 
9
- Build AgentGuard first so the hook script can import `dist/index.js`:
10
+ The plugin is managed the Hermes-native way (`hermes plugins
11
+ enable/disable/list`), runs before shell hooks, and adds a `/agentguard`
12
+ slash command. `agentguard init --agent hermes` installs the plugin and enables
13
+ it in `~/.hermes/config.yaml`.
10
14
 
11
15
  ```bash
16
+ # Build the engine so the plugin can reach it
12
17
  npm run build
18
+
19
+ # Install the plugin into ~/.hermes/plugins/agentguard/
20
+ agentguard init --agent hermes
21
+
22
+ # Confirm it is enabled
23
+ hermes plugins list
24
+ ```
25
+
26
+ The plugin shells out to the `agentguard` CLI (or a `hermes-hook.js` you point it
27
+ at). Make sure `agentguard` is on `PATH` (`npm i -g @goplus/agentguard`) or set
28
+ `AGENTGUARD_BIN`. See [`plugins/hermes/README.md`](../plugins/hermes/README.md)
29
+ for the full configuration reference (`AGENTGUARD_HERMES_*` env vars, fail policy,
30
+ autoscan).
31
+
32
+ | Hermes hook | Behavior |
33
+ |--------------------|-----------------------------------------------------------------|
34
+ | `pre_tool_call` | Blocks dangerous actions (`{"action":"block","message":...}`). |
35
+ | `post_tool_call` | Audit-only; never blocks. |
36
+ | `on_session_start` | Best-effort skill scan (opt out: `AGENTGUARD_HERMES_AUTOSCAN=0`).|
37
+ | `/agentguard` | Slash command: `status`, `report` (default), `checkup`. |
38
+
39
+ ## Shell hooks (fallback)
40
+
41
+ Use shell hooks when you prefer wiring AgentGuard directly into the Hermes config,
42
+ or on a Hermes build without the plugin system:
43
+
44
+ ```bash
45
+ npm run build
46
+ agentguard init --agent hermes --shell-hooks
13
47
  ```
14
48
 
15
- Run `agentguard init --agent hermes` to install the skill and merge the
16
- AgentGuard hook entries into `~/.hermes/config.yaml`. The bundled template at
17
- `skills/agentguard/hermes-hooks.yaml` is still available for manual setups.
49
+ This merges the AgentGuard hook entries into `~/.hermes/config.yaml`. The bundled
50
+ template at `skills/agentguard/hermes-hooks.yaml` is also available for manual
51
+ setups:
18
52
 
19
53
  ```yaml
20
54
  hooks:
@@ -29,10 +63,7 @@ hooks:
29
63
  - matcher: "write_file|patch|skill_manage"
30
64
  command: "node \"/path/to/agentguard/skills/agentguard/scripts/hermes-hook.js\""
31
65
  timeout: 10
32
- - matcher: "web_search"
33
- command: "node \"/path/to/agentguard/skills/agentguard/scripts/hermes-hook.js\""
34
- timeout: 10
35
- - matcher: "web_extract|browser_navigate"
66
+ - matcher: "web_search|web_extract|browser_navigate"
36
67
  command: "node \"/path/to/agentguard/skills/agentguard/scripts/hermes-hook.js\""
37
68
  timeout: 10
38
69
 
@@ -59,7 +90,7 @@ or set `hooks_auto_accept: true` in `~/.hermes/config.yaml`.
59
90
  | `write_file`, `patch`, `skill_manage` | `write_file` |
60
91
  | `read_file` | `read_file` |
61
92
  | `web_search` | `web_search` |
62
- | `web_extract`, `browser_navigate` | `network_request` |
93
+ | `web_extract`, `browser_navigate`, `browser_open`, | `network_request` |
63
94
 
64
95
  ## Decisions
65
96
 
@@ -70,5 +101,5 @@ returned as:
70
101
  {"action":"block","message":"GoPlus AgentGuard: ..."}
71
102
  ```
72
103
 
73
- AgentGuard `ask` decisions are also represented as blocks because Hermes shell
74
- hooks do not have a native confirmation decision.
104
+ AgentGuard `confirm` decisions are also represented as blocks because Hermes
105
+ `pre_tool_call` has no native confirmation decision.
@@ -0,0 +1,49 @@
1
+ # Building the `.mcpb` bundle
2
+
3
+ AgentGuard ships to the Anthropic **MCP / Desktop Extensions Directory** as an
4
+ `.mcpb` bundle (an MCP Bundle / Desktop Extension — a zip containing a
5
+ `manifest.json`, an `icon.png`, and the Node server with its production
6
+ dependencies).
7
+
8
+ The bundle is built reproducibly from this repo. Nothing is assembled by hand.
9
+
10
+ ## Source files
11
+
12
+ | Path | Purpose |
13
+ | --- | --- |
14
+ | `mcpb/manifest.json` | The bundle manifest (`manifest_version` `0.3`, `icon`, `privacy_policies`, tool list). The `version` is stamped from `package.json` at build time. |
15
+ | `mcpb/icon.png` | 256×256 square icon shown in the directory. |
16
+ | `scripts/build-mcpb.sh` | Assembles the staging tree and packs the `.mcpb`. |
17
+
18
+ ## Build locally
19
+
20
+ ```bash
21
+ npm run build:mcpb
22
+ ```
23
+
24
+ This compiles TypeScript, stages `server/` with production-only
25
+ `node_modules`, copies the manifest and icon to the bundle root, and packs the
26
+ result with the official [`@anthropic-ai/mcpb`](https://www.npmjs.com/package/@anthropic-ai/mcpb)
27
+ CLI. Output lands at:
28
+
29
+ ```
30
+ dist-mcpb/agentguard-<version>.mcpb
31
+ ```
32
+
33
+ Verify the manifest of a built bundle:
34
+
35
+ ```bash
36
+ unzip -p dist-mcpb/agentguard-*.mcpb manifest.json \
37
+ | jq '{manifest_version, icon, privacy_policies, version}'
38
+ ```
39
+
40
+ ## Publishing a release
41
+
42
+ Pushing a `v*` tag runs `.github/workflows/release-mcpb.yml`, which builds the
43
+ bundle and attaches it to the matching GitHub Release. Publishing the `.mcpb` as
44
+ a Release asset lets the MCP Directory pick up new versions automatically.
45
+
46
+ ```bash
47
+ npm version patch # bumps package.json, creates the tag
48
+ git push --follow-tags
49
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goplus/agentguard",
3
- "version": "1.1.28-beta.2",
3
+ "version": "1.1.28",
4
4
  "description": "GoPlus AgentGuard — Security guard for AI agents. Blocks dangerous commands, prevents data leaks, protects secrets. 20 detection rules, runtime action evaluation, trust registry.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,7 @@
18
18
  },
19
19
  "scripts": {
20
20
  "build": "tsc",
21
+ "build:mcpb": "bash scripts/build-mcpb.sh",
21
22
  "start": "node dist/mcp-server.js",
22
23
  "dev": "tsc -w",
23
24
  "test": "node --test dist/tests/*.test.js",
@@ -57,6 +58,7 @@
57
58
  "zod": "3.25.76"
58
59
  },
59
60
  "devDependencies": {
61
+ "@anthropic-ai/mcpb": "2.1.2",
60
62
  "@types/node": "22.19.15",
61
63
  "typescript": "5.7.3"
62
64
  },
@@ -73,6 +75,7 @@
73
75
  "openclaw.d.ts",
74
76
  "openclaw.js",
75
77
  "openclaw.plugin.json",
76
- "skills"
78
+ "skills",
79
+ "plugins"
77
80
  ]
78
81
  }
@@ -0,0 +1,78 @@
1
+ # GoPlus AgentGuard — Hermes plugin
2
+
3
+ A native [Hermes Agent](https://github.com/NousResearch/hermes-agent) plugin that
4
+ runs every tool call through the [GoPlus AgentGuard](https://github.com/GoPlusSecurity/agentguard)
5
+ decision engine and **blocks risky shell, file, and network actions** before they
6
+ execute.
7
+
8
+ Unlike the shell-hook integration (which you wire into `~/.hermes/config.yaml` by
9
+ hand), this plugin is managed the Hermes-native way — `hermes plugins
10
+ enable/disable/list` — runs before shell hooks, and adds a `/agentguard` slash
11
+ command. It reuses the same AgentGuard engine, so detection logic stays in one
12
+ place.
13
+
14
+ ## Requirements
15
+
16
+ - Hermes Agent (with the plugin system).
17
+ - The AgentGuard engine reachable as the `agentguard` CLI on `PATH`
18
+ (`npm i -g @goplus/agentguard`), or pointed at via `AGENTGUARD_BIN` /
19
+ `AGENTGUARD_HERMES_HOOK`.
20
+
21
+ ## Install
22
+
23
+ ```bash
24
+ # Installs the plugin into ~/.hermes/plugins/agentguard/
25
+ agentguard init --agent hermes
26
+
27
+ # Confirm it is enabled:
28
+ hermes plugins list
29
+ ```
30
+
31
+ Or copy this directory to `~/.hermes/plugins/agentguard/` manually.
32
+
33
+ ## What it does
34
+
35
+ | Hermes hook | Behavior |
36
+ |--------------------|-----------------------------------------------------------------|
37
+ | `pre_tool_call` | Evaluates the call; returns `{"action":"block","message":...}` to veto a dangerous action. |
38
+ | `post_tool_call` | Audit-only; never blocks. |
39
+ | `on_session_start` | Best-effort background scan of installed skills (opt out: `AGENTGUARD_HERMES_AUTOSCAN=0`). |
40
+ | `/agentguard` | Slash command — `status`, `report` (default), or `checkup`. |
41
+
42
+ Tools evaluated (others pass through untouched): `terminal`, `execute_code`,
43
+ `write_file`, `patch`, `skill_manage`, `read_file`, `web_search`, `web_extract`,
44
+ `browser_navigate`, `browser_open`, `web_open`, `open_url`, `visit_url`, `open`.
45
+
46
+ Hermes `pre_tool_call` has no native "ask"/confirm decision, so AgentGuard's
47
+ *confirm* decisions are surfaced as blocks with a confirmation-oriented message.
48
+
49
+ ## Configuration
50
+
51
+ | Env var | Default | Effect |
52
+ |---------|---------|--------|
53
+ | `AGENTGUARD_BIN` | — | Explicit path to the `agentguard` CLI. |
54
+ | `AGENTGUARD_HERMES_HOOK` | — | Explicit path to `hermes-hook.js` (used instead of the CLI). |
55
+ | `AGENTGUARD_HERMES_TIMEOUT` | `10` | Per-call engine timeout (seconds). |
56
+ | `AGENTGUARD_HERMES_FAIL_OPEN` | `0` | `1` allows tool calls when the engine can't be reached (default fails closed). |
57
+ | `AGENTGUARD_HERMES_ALLOW_NPX` | `0` | `1` permits the `npx -y @goplus/agentguard` fallback when no local binary is found. Off by default — `npx` fetches an unpinned package over the network, which is unsafe for a security gate. |
58
+ | `AGENTGUARD_HERMES_AUTOSCAN` | `1` | `0` disables the session-start skill scan. |
59
+
60
+ **Activation:** `agentguard init --agent hermes` installs the plugin and enables
61
+ it in `~/.hermes/config.yaml`. It takes effect on the next Hermes session. If you
62
+ copy this directory manually, run `hermes plugins enable agentguard`.
63
+
64
+ **Fail policy:** for the security-sensitive tools above, the plugin fails
65
+ **closed** (blocks) on `pre_tool_call` when the engine cannot be reached, and also
66
+ when a mapped event arrives without its required field (e.g. `terminal` with no
67
+ `command`) — matching the shell-hook behavior. Out-of-scope tools pass through
68
+ without an engine call. Post-tool evaluation never blocks.
69
+
70
+ ## Development / tests
71
+
72
+ ```bash
73
+ cd plugins/hermes
74
+ python -m pytest # no Node engine required — the bridge is stubbed
75
+ ```
76
+
77
+ Tests stub the engine via an injected runner, so they exercise the allow / block /
78
+ confirm→block / post-audit / fail-mode contract without spawning a subprocess.
@@ -0,0 +1,13 @@
1
+ """GoPlus AgentGuard native plugin for Hermes Agent.
2
+
3
+ Hermes imports this package and calls :func:`register` at load time.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ try: # package context (installed under ~/.hermes/plugins/agentguard/)
9
+ from .plugin import register
10
+ except ImportError: # top-level module context (tests / ad-hoc)
11
+ from plugin import register
12
+
13
+ __all__ = ["register"]