openclaw-event-server-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +473 -0
- package/config.example.json +203 -0
- package/dist/broadcast/index.d.ts +3 -0
- package/dist/broadcast/index.d.ts.map +1 -0
- package/dist/broadcast/index.js +19 -0
- package/dist/broadcast/index.js.map +1 -0
- package/dist/broadcast/queue.d.ts +63 -0
- package/dist/broadcast/queue.d.ts.map +1 -0
- package/dist/broadcast/queue.js +259 -0
- package/dist/broadcast/queue.js.map +1 -0
- package/dist/broadcast/webhook.d.ts +30 -0
- package/dist/broadcast/webhook.d.ts.map +1 -0
- package/dist/broadcast/webhook.js +184 -0
- package/dist/broadcast/webhook.js.map +1 -0
- package/dist/broadcast/websocketServer.d.ts +90 -0
- package/dist/broadcast/websocketServer.d.ts.map +1 -0
- package/dist/broadcast/websocketServer.js +403 -0
- package/dist/broadcast/websocketServer.js.map +1 -0
- package/dist/config/config-types.d.ts +280 -0
- package/dist/config/config-types.d.ts.map +1 -0
- package/dist/config/config-types.js +3 -0
- package/dist/config/config-types.js.map +1 -0
- package/dist/config/default-config.d.ts +3 -0
- package/dist/config/default-config.d.ts.map +1 -0
- package/dist/config/default-config.js +136 -0
- package/dist/config/default-config.js.map +1 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +160 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/event-types.d.ts +5 -0
- package/dist/config/event-types.d.ts.map +1 -0
- package/dist/config/event-types.js +54 -0
- package/dist/config/event-types.js.map +1 -0
- package/dist/config/handler.d.ts +9 -0
- package/dist/config/handler.d.ts.map +1 -0
- package/dist/config/handler.js +17 -0
- package/dist/config/handler.js.map +1 -0
- package/dist/config/helpers.d.ts +5 -0
- package/dist/config/helpers.d.ts.map +1 -0
- package/dist/config/helpers.js +40 -0
- package/dist/config/helpers.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +6 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +108 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/schema-hook-bridge.d.ts +594 -0
- package/dist/config/schema-hook-bridge.d.ts.map +1 -0
- package/dist/config/schema-hook-bridge.js +423 -0
- package/dist/config/schema-hook-bridge.js.map +1 -0
- package/dist/config/schema.d.ts +915 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +323 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +28 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validate-hook-bridge.d.ts +3 -0
- package/dist/config/validate-hook-bridge.d.ts.map +1 -0
- package/dist/config/validate-hook-bridge.js +246 -0
- package/dist/config/validate-hook-bridge.js.map +1 -0
- package/dist/config/validate.d.ts +17 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +194 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/events/index.d.ts +4 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +20 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/redaction.d.ts +5 -0
- package/dist/events/redaction.d.ts.map +1 -0
- package/dist/events/redaction.js +46 -0
- package/dist/events/redaction.js.map +1 -0
- package/dist/events/signing.d.ts +8 -0
- package/dist/events/signing.d.ts.map +1 -0
- package/dist/events/signing.js +35 -0
- package/dist/events/signing.js.map +1 -0
- package/dist/events/types.d.ts +125 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +9 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/agent-hooks.d.ts +59 -0
- package/dist/hooks/agent-hooks.d.ts.map +1 -0
- package/dist/hooks/agent-hooks.js +116 -0
- package/dist/hooks/agent-hooks.js.map +1 -0
- package/dist/hooks/command-hooks.d.ts +13 -0
- package/dist/hooks/command-hooks.d.ts.map +1 -0
- package/dist/hooks/command-hooks.js +26 -0
- package/dist/hooks/command-hooks.js.map +1 -0
- package/dist/hooks/event-factory.d.ts +21 -0
- package/dist/hooks/event-factory.d.ts.map +1 -0
- package/dist/hooks/event-factory.js +31 -0
- package/dist/hooks/event-factory.js.map +1 -0
- package/dist/hooks/gateway-hooks.d.ts +14 -0
- package/dist/hooks/gateway-hooks.d.ts.map +1 -0
- package/dist/hooks/gateway-hooks.js +43 -0
- package/dist/hooks/gateway-hooks.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +26 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/message-hooks.d.ts +33 -0
- package/dist/hooks/message-hooks.d.ts.map +1 -0
- package/dist/hooks/message-hooks.js +208 -0
- package/dist/hooks/message-hooks.js.map +1 -0
- package/dist/hooks/session-hooks.d.ts +89 -0
- package/dist/hooks/session-hooks.d.ts.map +1 -0
- package/dist/hooks/session-hooks.js +253 -0
- package/dist/hooks/session-hooks.js.map +1 -0
- package/dist/hooks/status-reducer.d.ts +30 -0
- package/dist/hooks/status-reducer.d.ts.map +1 -0
- package/dist/hooks/status-reducer.js +157 -0
- package/dist/hooks/status-reducer.js.map +1 -0
- package/dist/hooks/subagent-hooks.d.ts +37 -0
- package/dist/hooks/subagent-hooks.d.ts.map +1 -0
- package/dist/hooks/subagent-hooks.js +79 -0
- package/dist/hooks/subagent-hooks.js.map +1 -0
- package/dist/hooks/subagent-tracker.d.ts +33 -0
- package/dist/hooks/subagent-tracker.d.ts.map +1 -0
- package/dist/hooks/subagent-tracker.js +73 -0
- package/dist/hooks/subagent-tracker.js.map +1 -0
- package/dist/hooks/tool-hooks.d.ts +132 -0
- package/dist/hooks/tool-hooks.d.ts.map +1 -0
- package/dist/hooks/tool-hooks.js +215 -0
- package/dist/hooks/tool-hooks.js.map +1 -0
- package/dist/index.d.ts +929 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +236 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/event-file-logger.d.ts +21 -0
- package/dist/logging/event-file-logger.d.ts.map +1 -0
- package/dist/logging/event-file-logger.js +167 -0
- package/dist/logging/event-file-logger.js.map +1 -0
- package/dist/logging/index.d.ts +3 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +19 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/runtime-logger.d.ts +12 -0
- package/dist/logging/runtime-logger.d.ts.map +1 -0
- package/dist/logging/runtime-logger.js +45 -0
- package/dist/logging/runtime-logger.js.map +1 -0
- package/dist/runtime/hook-bridge-actions.d.ts +9 -0
- package/dist/runtime/hook-bridge-actions.d.ts.map +1 -0
- package/dist/runtime/hook-bridge-actions.js +248 -0
- package/dist/runtime/hook-bridge-actions.js.map +1 -0
- package/dist/runtime/hook-bridge-dispatch-engine.d.ts +42 -0
- package/dist/runtime/hook-bridge-dispatch-engine.d.ts.map +1 -0
- package/dist/runtime/hook-bridge-dispatch-engine.js +233 -0
- package/dist/runtime/hook-bridge-dispatch-engine.js.map +1 -0
- package/dist/runtime/hook-bridge-tool-guard.d.ts +16 -0
- package/dist/runtime/hook-bridge-tool-guard.d.ts.map +1 -0
- package/dist/runtime/hook-bridge-tool-guard.js +236 -0
- package/dist/runtime/hook-bridge-tool-guard.js.map +1 -0
- package/dist/runtime/hook-bridge-utils.d.ts +11 -0
- package/dist/runtime/hook-bridge-utils.d.ts.map +1 -0
- package/dist/runtime/hook-bridge-utils.js +116 -0
- package/dist/runtime/hook-bridge-utils.js.map +1 -0
- package/dist/runtime/hook-bridge.d.ts +33 -0
- package/dist/runtime/hook-bridge.d.ts.map +1 -0
- package/dist/runtime/hook-bridge.js +359 -0
- package/dist/runtime/hook-bridge.js.map +1 -0
- package/dist/runtime/internal-handlers.d.ts +20 -0
- package/dist/runtime/internal-handlers.d.ts.map +1 -0
- package/dist/runtime/internal-handlers.js +225 -0
- package/dist/runtime/internal-handlers.js.map +1 -0
- package/dist/runtime/register-gateway-hooks.d.ts +4 -0
- package/dist/runtime/register-gateway-hooks.d.ts.map +1 -0
- package/dist/runtime/register-gateway-hooks.js +27 -0
- package/dist/runtime/register-gateway-hooks.js.map +1 -0
- package/dist/runtime/register-session-hooks.d.ts +4 -0
- package/dist/runtime/register-session-hooks.d.ts.map +1 -0
- package/dist/runtime/register-session-hooks.js +88 -0
- package/dist/runtime/register-session-hooks.js.map +1 -0
- package/dist/runtime/register-subagent-hooks.d.ts +4 -0
- package/dist/runtime/register-subagent-hooks.d.ts.map +1 -0
- package/dist/runtime/register-subagent-hooks.js +143 -0
- package/dist/runtime/register-subagent-hooks.js.map +1 -0
- package/dist/runtime/register-tool-hooks.d.ts +4 -0
- package/dist/runtime/register-tool-hooks.d.ts.map +1 -0
- package/dist/runtime/register-tool-hooks.js +348 -0
- package/dist/runtime/register-tool-hooks.js.map +1 -0
- package/dist/runtime/runtime-events.d.ts +14 -0
- package/dist/runtime/runtime-events.d.ts.map +1 -0
- package/dist/runtime/runtime-events.js +166 -0
- package/dist/runtime/runtime-events.js.map +1 -0
- package/dist/runtime/typed-hooks.d.ts +9 -0
- package/dist/runtime/typed-hooks.d.ts.map +1 -0
- package/dist/runtime/typed-hooks.js +14 -0
- package/dist/runtime/typed-hooks.js.map +1 -0
- package/dist/runtime/types.d.ts +91 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/utils.d.ts +47 -0
- package/dist/runtime/utils.d.ts.map +1 -0
- package/dist/runtime/utils.js +166 -0
- package/dist/runtime/utils.js.map +1 -0
- package/dist/tools/replay-tool-guard.d.ts +3 -0
- package/dist/tools/replay-tool-guard.d.ts.map +1 -0
- package/dist/tools/replay-tool-guard.js +96 -0
- package/dist/tools/replay-tool-guard.js.map +1 -0
- package/openclaw.plugin.json +847 -0
- package/package.json +63 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildToolGuardEvent = buildToolGuardEvent;
|
|
4
|
+
exports.matchesRule = matchesRule;
|
|
5
|
+
exports.buildToolGuardScopeKey = buildToolGuardScopeKey;
|
|
6
|
+
exports.resolveDecisionTemplates = resolveDecisionTemplates;
|
|
7
|
+
exports.renderGuardTemplate = renderGuardTemplate;
|
|
8
|
+
const hook_bridge_utils_1 = require("./hook-bridge-utils");
|
|
9
|
+
function buildToolGuardEvent(params) {
|
|
10
|
+
return {
|
|
11
|
+
eventId: `tool-guard-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
|
|
12
|
+
schemaVersion: '1.1.0',
|
|
13
|
+
pluginVersion: '1.0.0',
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
type: 'tool.called',
|
|
16
|
+
eventCategory: 'tool',
|
|
17
|
+
eventName: 'before_tool_call',
|
|
18
|
+
source: 'plugin-hook',
|
|
19
|
+
agentId: params.agentId,
|
|
20
|
+
sessionId: params.sessionId,
|
|
21
|
+
sessionKey: params.sessionKey,
|
|
22
|
+
runId: params.runId,
|
|
23
|
+
toolCallId: params.toolCallId,
|
|
24
|
+
data: {
|
|
25
|
+
toolName: params.toolName,
|
|
26
|
+
params: params.params,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function matchesRule(event, rule, parentStatusByAgent) {
|
|
31
|
+
const when = rule.when;
|
|
32
|
+
if (!(0, hook_bridge_utils_1.matchesScalarOrList)(when.eventType, event.type)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const toolName = (0, hook_bridge_utils_1.readPath)(event, 'data.toolName');
|
|
36
|
+
if (!(0, hook_bridge_utils_1.matchesScalarOrList)(when.toolName, typeof toolName === 'string' ? toolName : undefined)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (!(0, hook_bridge_utils_1.matchesScalarOrList)(when.agentId, event.agentId)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!(0, hook_bridge_utils_1.matchesScalarOrList)(when.sessionId, event.sessionId)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
if (!(0, hook_bridge_utils_1.matchesScalarOrList)(when.sessionKey, event.sessionKey)) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
if (when.contains) {
|
|
49
|
+
for (const [path, expectedSubstring] of Object.entries(when.contains)) {
|
|
50
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
51
|
+
if (typeof value !== 'string' || !value.includes(expectedSubstring)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (when.equals) {
|
|
57
|
+
for (const [path, expected] of Object.entries(when.equals)) {
|
|
58
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
59
|
+
if (value !== expected) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (when.requiredPaths) {
|
|
65
|
+
for (const path of when.requiredPaths) {
|
|
66
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
67
|
+
if (value === undefined || value === null) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (when.typeChecks) {
|
|
73
|
+
for (const [path, expectedType] of Object.entries(when.typeChecks)) {
|
|
74
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
75
|
+
if (expectedType === 'array') {
|
|
76
|
+
if (!Array.isArray(value)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (expectedType === 'object') {
|
|
82
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (typeof value !== expectedType) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (when.inList) {
|
|
93
|
+
for (const [path, values] of Object.entries(when.inList)) {
|
|
94
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
95
|
+
if (!values.includes(value)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (when.notInList) {
|
|
101
|
+
for (const [path, values] of Object.entries(when.notInList)) {
|
|
102
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
103
|
+
if (values.includes(value)) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (when.matchesRegex) {
|
|
109
|
+
for (const [path, pattern] of Object.entries(when.matchesRegex)) {
|
|
110
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
111
|
+
if (typeof value !== 'string') {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const regex = new RegExp(pattern);
|
|
116
|
+
if (!regex.test(value)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (when.notMatchesRegex) {
|
|
126
|
+
for (const [path, pattern] of Object.entries(when.notMatchesRegex)) {
|
|
127
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
128
|
+
if (typeof value !== 'string') {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const regex = new RegExp(pattern);
|
|
133
|
+
if (regex.test(value)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const domainPath = when.domainPath ?? 'data.params.url';
|
|
143
|
+
if (when.domainAllowlist && when.domainAllowlist.length > 0) {
|
|
144
|
+
const host = extractHostFromPath(event, domainPath);
|
|
145
|
+
if (!host || !(0, hook_bridge_utils_1.matchesDomainList)(host, when.domainAllowlist)) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (when.domainBlocklist && when.domainBlocklist.length > 0) {
|
|
150
|
+
const host = extractHostFromPath(event, domainPath);
|
|
151
|
+
if (!host || !(0, hook_bridge_utils_1.matchesDomainList)(host, when.domainBlocklist)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (typeof when.idleForMsGte === 'number') {
|
|
156
|
+
const idleForMsValue = (0, hook_bridge_utils_1.readPath)(event, 'data.idleForMs');
|
|
157
|
+
if (typeof idleForMsValue !== 'number' || idleForMsValue < when.idleForMsGte) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (when.parentStatus) {
|
|
162
|
+
const parentAgentId = (0, hook_bridge_utils_1.readPath)(event, 'data.parentAgentId');
|
|
163
|
+
if (typeof parentAgentId !== 'string') {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const status = parentStatusByAgent.get(parentAgentId);
|
|
167
|
+
if (status !== when.parentStatus) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
function buildToolGuardScopeKey(toolName, params, mode) {
|
|
174
|
+
if (mode === 'tool') {
|
|
175
|
+
return toolName;
|
|
176
|
+
}
|
|
177
|
+
return `${toolName}:${(0, hook_bridge_utils_1.stableJsonStringify)(params)}`;
|
|
178
|
+
}
|
|
179
|
+
function resolveDecisionTemplates(decision, event) {
|
|
180
|
+
const reasonTemplate = decision.blockReasonTemplate ?? decision.blockReason;
|
|
181
|
+
if (!reasonTemplate) {
|
|
182
|
+
return decision;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
...decision,
|
|
186
|
+
blockReason: renderGuardTemplate(reasonTemplate, event),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function renderGuardTemplate(template, event) {
|
|
190
|
+
return template.replace(/\{\{\s*([^}]+)\s*\}\}/g, (_, rawToken) => {
|
|
191
|
+
const token = rawToken.trim();
|
|
192
|
+
if (token === 'toolName') {
|
|
193
|
+
const toolName = (0, hook_bridge_utils_1.readPath)(event, 'data.toolName');
|
|
194
|
+
return typeof toolName === 'string' ? toolName : '';
|
|
195
|
+
}
|
|
196
|
+
if (token === 'eventType') {
|
|
197
|
+
return event.type;
|
|
198
|
+
}
|
|
199
|
+
if (token === 'agentId') {
|
|
200
|
+
return event.agentId ?? '';
|
|
201
|
+
}
|
|
202
|
+
if (token === 'sessionId') {
|
|
203
|
+
return event.sessionId ?? '';
|
|
204
|
+
}
|
|
205
|
+
if (token === 'sessionKey') {
|
|
206
|
+
return event.sessionKey ?? '';
|
|
207
|
+
}
|
|
208
|
+
if (token === 'runId') {
|
|
209
|
+
return event.runId ?? '';
|
|
210
|
+
}
|
|
211
|
+
if (token === 'toolCallId') {
|
|
212
|
+
return event.toolCallId ?? '';
|
|
213
|
+
}
|
|
214
|
+
const pathPrefix = 'path:';
|
|
215
|
+
if (token.startsWith(pathPrefix)) {
|
|
216
|
+
const path = token.slice(pathPrefix.length).trim();
|
|
217
|
+
const value = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
218
|
+
return value === undefined || value === null ? '' : String(value);
|
|
219
|
+
}
|
|
220
|
+
return '';
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
function extractHostFromPath(event, path) {
|
|
224
|
+
const raw = (0, hook_bridge_utils_1.readPath)(event, path);
|
|
225
|
+
if (typeof raw !== 'string' || raw.trim() === '') {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const parsed = new URL(raw);
|
|
230
|
+
return parsed.hostname.toLowerCase();
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=hook-bridge-tool-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-bridge-tool-guard.js","sourceRoot":"","sources":["../../src/runtime/hook-bridge-tool-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OpenClawEvent } from '../events/types';
|
|
2
|
+
import { HookBridgeRuleCoalesce } from '../config';
|
|
3
|
+
export declare function matchesScalarOrList(matcher: string | string[] | undefined, value: string | undefined): boolean;
|
|
4
|
+
export declare function matchesDomainList(host: string, domains: string[]): boolean;
|
|
5
|
+
export declare function readPath(event: OpenClawEvent, dottedPath: string): unknown;
|
|
6
|
+
export declare function buildCoalesceKey(ruleId: string, event: OpenClawEvent, coalesce: HookBridgeRuleCoalesce): string | undefined;
|
|
7
|
+
export declare function trimPreview(value: string, limit?: number): string;
|
|
8
|
+
export declare function toErrorMessage(error: unknown): string;
|
|
9
|
+
export declare function stableJsonStringify(value: unknown): string;
|
|
10
|
+
export declare function toCanonicalPath(path: string): string | undefined;
|
|
11
|
+
//# sourceMappingURL=hook-bridge-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-bridge-utils.d.ts","sourceRoot":"","sources":["../../src/runtime/hook-bridge-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAaT;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAS1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA6B1E;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,sBAAsB,GAC/B,MAAM,GAAG,SAAS,CAqBpB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM,CAK9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKrD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;AAmBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMhE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchesScalarOrList = matchesScalarOrList;
|
|
4
|
+
exports.matchesDomainList = matchesDomainList;
|
|
5
|
+
exports.readPath = readPath;
|
|
6
|
+
exports.buildCoalesceKey = buildCoalesceKey;
|
|
7
|
+
exports.trimPreview = trimPreview;
|
|
8
|
+
exports.toErrorMessage = toErrorMessage;
|
|
9
|
+
exports.stableJsonStringify = stableJsonStringify;
|
|
10
|
+
exports.toCanonicalPath = toCanonicalPath;
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
function matchesScalarOrList(matcher, value) {
|
|
13
|
+
if (matcher === undefined) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (value === undefined) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (typeof matcher === 'string') {
|
|
20
|
+
return value === matcher;
|
|
21
|
+
}
|
|
22
|
+
return matcher.includes(value);
|
|
23
|
+
}
|
|
24
|
+
function matchesDomainList(host, domains) {
|
|
25
|
+
const normalizedHost = host.toLowerCase();
|
|
26
|
+
return domains.some((entry) => {
|
|
27
|
+
const normalizedEntry = entry.trim().toLowerCase();
|
|
28
|
+
if (normalizedEntry === '') {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return normalizedHost === normalizedEntry || normalizedHost.endsWith(`.${normalizedEntry}`);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function readPath(event, dottedPath) {
|
|
35
|
+
const segments = dottedPath
|
|
36
|
+
.split('.')
|
|
37
|
+
.map((segment) => segment.trim())
|
|
38
|
+
.filter(Boolean);
|
|
39
|
+
if (segments.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const eventRecord = event;
|
|
43
|
+
const first = segments[0];
|
|
44
|
+
let current;
|
|
45
|
+
if (first in eventRecord) {
|
|
46
|
+
current = eventRecord[first];
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const data = event.data;
|
|
50
|
+
current = data[first];
|
|
51
|
+
}
|
|
52
|
+
for (let index = 1; index < segments.length; index += 1) {
|
|
53
|
+
if (typeof current !== 'object' || current === null) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
current = current[segments[index]];
|
|
57
|
+
}
|
|
58
|
+
return current;
|
|
59
|
+
}
|
|
60
|
+
function buildCoalesceKey(ruleId, event, coalesce) {
|
|
61
|
+
const keyFields = coalesce.keyFields ?? ['sessionKey', 'agentId', 'data.toolName', 'event.type'];
|
|
62
|
+
const values = keyFields
|
|
63
|
+
.map((field) => {
|
|
64
|
+
if (field === 'ruleId') {
|
|
65
|
+
return ruleId;
|
|
66
|
+
}
|
|
67
|
+
if (field === 'event.type' || field === 'type') {
|
|
68
|
+
return event.type;
|
|
69
|
+
}
|
|
70
|
+
const value = readPath(event, field);
|
|
71
|
+
return value === undefined || value === null ? '' : String(value);
|
|
72
|
+
})
|
|
73
|
+
.filter((value) => value !== '');
|
|
74
|
+
if (values.length === 0) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return `${ruleId}::${values.join('::')}`;
|
|
78
|
+
}
|
|
79
|
+
function trimPreview(value, limit = 240) {
|
|
80
|
+
if (value.length <= limit) {
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
return `${value.slice(0, limit)}...`;
|
|
84
|
+
}
|
|
85
|
+
function toErrorMessage(error) {
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
return error.message;
|
|
88
|
+
}
|
|
89
|
+
return String(error);
|
|
90
|
+
}
|
|
91
|
+
function stableJsonStringify(value) {
|
|
92
|
+
return JSON.stringify(normalizeForStableJson(value));
|
|
93
|
+
}
|
|
94
|
+
function normalizeForStableJson(value) {
|
|
95
|
+
if (Array.isArray(value)) {
|
|
96
|
+
return value.map((item) => normalizeForStableJson(item));
|
|
97
|
+
}
|
|
98
|
+
if (typeof value === 'object' && value !== null) {
|
|
99
|
+
const entries = Object.entries(value).sort(([a], [b]) => a.localeCompare(b));
|
|
100
|
+
const out = {};
|
|
101
|
+
for (const [key, nested] of entries) {
|
|
102
|
+
out[key] = normalizeForStableJson(nested);
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
function toCanonicalPath(path) {
|
|
109
|
+
try {
|
|
110
|
+
return (0, node_fs_1.realpathSync)(path);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=hook-bridge-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-bridge-utils.js","sourceRoot":"","sources":["../../src/runtime/hook-bridge-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { HookBridgeConfig, PluginConfig } from '../config';
|
|
2
|
+
import { OpenClawEvent } from '../events/types';
|
|
3
|
+
import type { HookBridgeGuardDecisionOutcome, HookBridgeRunner, RuntimeLogger } from './types';
|
|
4
|
+
export declare class HookBridge implements HookBridgeRunner {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly dispatchEngine;
|
|
8
|
+
private readonly parentStatusByAgent;
|
|
9
|
+
private readonly lastTriggerByRule;
|
|
10
|
+
private readonly blockedRetryStateByScope;
|
|
11
|
+
private readonly approvalCacheByScope;
|
|
12
|
+
private acceptingEvents;
|
|
13
|
+
private nextTaskId;
|
|
14
|
+
private trace;
|
|
15
|
+
constructor(config: HookBridgeConfig, logger: RuntimeLogger);
|
|
16
|
+
onEvent(event: OpenClawEvent): void;
|
|
17
|
+
stop(): Promise<void>;
|
|
18
|
+
evaluateBeforeToolCall(params: {
|
|
19
|
+
toolName: string;
|
|
20
|
+
params: Record<string, unknown>;
|
|
21
|
+
agentId?: string;
|
|
22
|
+
sessionId?: string;
|
|
23
|
+
sessionKey?: string;
|
|
24
|
+
runId?: string;
|
|
25
|
+
toolCallId?: string;
|
|
26
|
+
}): Promise<HookBridgeGuardDecisionOutcome | undefined>;
|
|
27
|
+
private observeAgentStatus;
|
|
28
|
+
private canTrigger;
|
|
29
|
+
private cleanupToolGuardState;
|
|
30
|
+
private recordToolGuardDecision;
|
|
31
|
+
}
|
|
32
|
+
export declare function createHookBridge(config: PluginConfig, logger: RuntimeLogger): HookBridgeRunner | undefined;
|
|
33
|
+
//# sourceMappingURL=hook-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-bridge.d.ts","sourceRoot":"","sources":["../../src/runtime/hook-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAIhB,YAAY,EACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAWhD,OAAO,KAAK,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM/F,qBAAa,UAAW,YAAW,gBAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAoE;IAC7G,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAGvB;IAEd,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,KAAK;gBAOD,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa;IAM3D,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA2C7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,sBAAsB,CAAC,MAAM,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,8BAA8B,GAAG,SAAS,CAAC;IAmQvD,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,uBAAuB;CA4BhC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAM1G"}
|