clawsec 0.0.1 → 0.0.2
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/dist/src/actions/block.js +2 -2
- package/dist/src/actions/block.js.map +1 -1
- package/dist/src/actions/confirm.d.ts +1 -1
- package/dist/src/actions/confirm.d.ts.map +1 -1
- package/dist/src/actions/confirm.js +57 -26
- package/dist/src/actions/confirm.js.map +1 -1
- package/dist/src/actions/executor.d.ts +3 -1
- package/dist/src/actions/executor.d.ts.map +1 -1
- package/dist/src/actions/executor.js +48 -11
- package/dist/src/actions/executor.js.map +1 -1
- package/dist/src/actions/warn.js +2 -2
- package/dist/src/actions/warn.js.map +1 -1
- package/dist/src/approval/agent-confirm.d.ts +4 -0
- package/dist/src/approval/agent-confirm.d.ts.map +1 -1
- package/dist/src/approval/agent-confirm.js +14 -0
- package/dist/src/approval/agent-confirm.js.map +1 -1
- package/dist/src/approval/store.d.ts +4 -0
- package/dist/src/approval/store.d.ts.map +1 -1
- package/dist/src/approval/store.js +19 -0
- package/dist/src/approval/store.js.map +1 -1
- package/dist/src/config/loader.d.ts +7 -4
- package/dist/src/config/loader.d.ts.map +1 -1
- package/dist/src/config/loader.js +58 -27
- package/dist/src/config/loader.js.map +1 -1
- package/dist/src/config/schema.d.ts +60 -41
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +12 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/template-loader.d.ts +34 -0
- package/dist/src/config/template-loader.d.ts.map +1 -0
- package/dist/src/config/template-loader.js +127 -0
- package/dist/src/config/template-loader.js.map +1 -0
- package/dist/src/detectors/destructive/cloud-detector.d.ts +10 -3
- package/dist/src/detectors/destructive/cloud-detector.d.ts.map +1 -1
- package/dist/src/detectors/destructive/cloud-detector.js +45 -5
- package/dist/src/detectors/destructive/cloud-detector.js.map +1 -1
- package/dist/src/detectors/destructive/code-detector.d.ts +9 -2
- package/dist/src/detectors/destructive/code-detector.d.ts.map +1 -1
- package/dist/src/detectors/destructive/code-detector.js +43 -4
- package/dist/src/detectors/destructive/code-detector.js.map +1 -1
- package/dist/src/detectors/destructive/index.d.ts +5 -3
- package/dist/src/detectors/destructive/index.d.ts.map +1 -1
- package/dist/src/detectors/destructive/index.js +42 -10
- package/dist/src/detectors/destructive/index.js.map +1 -1
- package/dist/src/detectors/destructive/shell-detector.d.ts +10 -3
- package/dist/src/detectors/destructive/shell-detector.d.ts.map +1 -1
- package/dist/src/detectors/destructive/shell-detector.js +44 -5
- package/dist/src/detectors/destructive/shell-detector.js.map +1 -1
- package/dist/src/detectors/destructive/types.d.ts +6 -0
- package/dist/src/detectors/destructive/types.d.ts.map +1 -1
- package/dist/src/detectors/exfiltration/cloud-detector.d.ts +3 -2
- package/dist/src/detectors/exfiltration/cloud-detector.d.ts.map +1 -1
- package/dist/src/detectors/exfiltration/cloud-detector.js +21 -3
- package/dist/src/detectors/exfiltration/cloud-detector.js.map +1 -1
- package/dist/src/detectors/exfiltration/http-detector.d.ts +3 -2
- package/dist/src/detectors/exfiltration/http-detector.d.ts.map +1 -1
- package/dist/src/detectors/exfiltration/http-detector.js +21 -3
- package/dist/src/detectors/exfiltration/http-detector.js.map +1 -1
- package/dist/src/detectors/exfiltration/index.d.ts +5 -3
- package/dist/src/detectors/exfiltration/index.d.ts.map +1 -1
- package/dist/src/detectors/exfiltration/index.js +44 -11
- package/dist/src/detectors/exfiltration/index.js.map +1 -1
- package/dist/src/detectors/exfiltration/network-detector.d.ts +3 -2
- package/dist/src/detectors/exfiltration/network-detector.d.ts.map +1 -1
- package/dist/src/detectors/exfiltration/network-detector.js +26 -8
- package/dist/src/detectors/exfiltration/network-detector.js.map +1 -1
- package/dist/src/detectors/exfiltration/types.d.ts +2 -0
- package/dist/src/detectors/exfiltration/types.d.ts.map +1 -1
- package/dist/src/detectors/purchase/domain-detector.d.ts +1 -1
- package/dist/src/detectors/purchase/domain-detector.d.ts.map +1 -1
- package/dist/src/detectors/purchase/domain-detector.js +1 -1
- package/dist/src/detectors/purchase/domain-detector.js.map +1 -1
- package/dist/src/detectors/purchase/form-detector.d.ts +2 -2
- package/dist/src/detectors/purchase/form-detector.d.ts.map +1 -1
- package/dist/src/detectors/purchase/form-detector.js +7 -4
- package/dist/src/detectors/purchase/form-detector.js.map +1 -1
- package/dist/src/detectors/purchase/index.d.ts +5 -3
- package/dist/src/detectors/purchase/index.d.ts.map +1 -1
- package/dist/src/detectors/purchase/index.js +35 -6
- package/dist/src/detectors/purchase/index.js.map +1 -1
- package/dist/src/detectors/purchase/spend-tracker.d.ts +6 -2
- package/dist/src/detectors/purchase/spend-tracker.d.ts.map +1 -1
- package/dist/src/detectors/purchase/spend-tracker.js +19 -3
- package/dist/src/detectors/purchase/spend-tracker.js.map +1 -1
- package/dist/src/detectors/purchase/url-detector.d.ts +2 -2
- package/dist/src/detectors/purchase/url-detector.d.ts.map +1 -1
- package/dist/src/detectors/purchase/url-detector.js +3 -3
- package/dist/src/detectors/purchase/url-detector.js.map +1 -1
- package/dist/src/detectors/secrets/api-key-detector.d.ts +6 -6
- package/dist/src/detectors/secrets/api-key-detector.d.ts.map +1 -1
- package/dist/src/detectors/secrets/api-key-detector.js +33 -7
- package/dist/src/detectors/secrets/api-key-detector.js.map +1 -1
- package/dist/src/detectors/secrets/index.d.ts +5 -3
- package/dist/src/detectors/secrets/index.d.ts.map +1 -1
- package/dist/src/detectors/secrets/index.js +52 -11
- package/dist/src/detectors/secrets/index.js.map +1 -1
- package/dist/src/detectors/secrets/pii-detector.d.ts +2 -2
- package/dist/src/detectors/secrets/pii-detector.d.ts.map +1 -1
- package/dist/src/detectors/secrets/pii-detector.js +3 -3
- package/dist/src/detectors/secrets/pii-detector.js.map +1 -1
- package/dist/src/detectors/secrets/token-detector.d.ts +2 -2
- package/dist/src/detectors/secrets/token-detector.d.ts.map +1 -1
- package/dist/src/detectors/secrets/token-detector.js +3 -3
- package/dist/src/detectors/secrets/token-detector.js.map +1 -1
- package/dist/src/detectors/secrets/types.d.ts +5 -3
- package/dist/src/detectors/secrets/types.d.ts.map +1 -1
- package/dist/src/detectors/website/index.d.ts +5 -3
- package/dist/src/detectors/website/index.d.ts.map +1 -1
- package/dist/src/detectors/website/index.js +21 -6
- package/dist/src/detectors/website/index.js.map +1 -1
- package/dist/src/engine/analyzer.d.ts +3 -1
- package/dist/src/engine/analyzer.d.ts.map +1 -1
- package/dist/src/engine/analyzer.js +66 -10
- package/dist/src/engine/analyzer.js.map +1 -1
- package/dist/src/engine/types.d.ts +4 -1
- package/dist/src/engine/types.d.ts.map +1 -1
- package/dist/src/engine/types.js.map +1 -1
- package/dist/src/hooks/before-agent-start/handler.d.ts +3 -1
- package/dist/src/hooks/before-agent-start/handler.d.ts.map +1 -1
- package/dist/src/hooks/before-agent-start/handler.js +59 -12
- package/dist/src/hooks/before-agent-start/handler.js.map +1 -1
- package/dist/src/hooks/before-tool-call/handler.d.ts +3 -1
- package/dist/src/hooks/before-tool-call/handler.d.ts.map +1 -1
- package/dist/src/hooks/before-tool-call/handler.js +86 -54
- package/dist/src/hooks/before-tool-call/handler.js.map +1 -1
- package/dist/src/hooks/tool-result-persist/handler.d.ts +3 -1
- package/dist/src/hooks/tool-result-persist/handler.d.ts.map +1 -1
- package/dist/src/hooks/tool-result-persist/handler.js +36 -34
- package/dist/src/hooks/tool-result-persist/handler.js.map +1 -1
- package/dist/src/index.d.ts +45 -47
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +120 -96
- package/dist/src/index.js.map +1 -1
- package/dist/src/notifications/index.d.ts.map +1 -1
- package/dist/src/notifications/index.js +2 -1
- package/dist/src/notifications/index.js.map +1 -1
- package/dist/src/notifications/telegram.js +1 -1
- package/dist/src/notifications/telegram.js.map +1 -1
- package/dist/src/notifications/types.d.ts +1 -1
- package/dist/src/notifications/types.d.ts.map +1 -1
- package/dist/src/utils/logger.d.ts +26 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +76 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/openclaw.plugin.json +7 -22
- package/package.json +8 -2
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,SAAS,YAAY,CAAC;AACnC,eAAO,MAAM,WAAW,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -8,78 +8,94 @@
|
|
|
8
8
|
export const VERSION = '0.0.1';
|
|
9
9
|
export const PLUGIN_ID = 'clawsec';
|
|
10
10
|
export const PLUGIN_NAME = 'Clawsec Security Plugin';
|
|
11
|
+
// Logger utility for safe API logging with fallback
|
|
12
|
+
import { createLogger, createNoOpLogger } from './utils/logger.js';
|
|
13
|
+
// Config loader
|
|
14
|
+
import { loadConfig } from './config/loader.js';
|
|
15
|
+
// Hook handler factories
|
|
16
|
+
import { createBeforeToolCallHandler } from './hooks/before-tool-call/handler.js';
|
|
17
|
+
import { createBeforeAgentStartHandler } from './hooks/before-agent-start/handler.js';
|
|
18
|
+
import { createToolResultPersistHandler } from './hooks/tool-result-persist/handler.js';
|
|
11
19
|
const state = {
|
|
12
20
|
api: null,
|
|
13
21
|
config: null,
|
|
22
|
+
clawsecConfig: null,
|
|
14
23
|
initialized: false,
|
|
15
|
-
|
|
16
|
-
beforeToolCall: null,
|
|
17
|
-
beforeAgentStart: null,
|
|
18
|
-
toolResultPersist: null,
|
|
19
|
-
},
|
|
24
|
+
logger: createNoOpLogger(),
|
|
20
25
|
};
|
|
21
26
|
// =============================================================================
|
|
22
|
-
//
|
|
27
|
+
// DEFAULT CONFIGURATION
|
|
23
28
|
// =============================================================================
|
|
24
29
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*/
|
|
28
|
-
const beforeToolCallHandler = async (context) => {
|
|
29
|
-
// Log for debugging during development
|
|
30
|
-
if (state.api && state.config?.logLevel === 'debug') {
|
|
31
|
-
state.api.log('debug', `[clawsec] before-tool-call: ${context.toolName}`, {
|
|
32
|
-
sessionId: context.sessionId,
|
|
33
|
-
toolInput: context.toolInput,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
// Placeholder: Allow all tool calls
|
|
37
|
-
// TODO: Implement actual detection logic in Task 2.x
|
|
38
|
-
return {
|
|
39
|
-
allow: true,
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Placeholder handler for before-agent-start hook.
|
|
44
|
-
* Will be replaced with full implementation in Task 2.x
|
|
45
|
-
*/
|
|
46
|
-
const beforeAgentStartHandler = async (context) => {
|
|
47
|
-
// Log for debugging during development
|
|
48
|
-
if (state.api && state.config?.logLevel === 'debug') {
|
|
49
|
-
state.api.log('debug', '[clawsec] before-agent-start', {
|
|
50
|
-
sessionId: context.sessionId,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
// Placeholder: Inject basic security reminder into system prompt
|
|
54
|
-
// TODO: Implement configurable prompts in Task 2.x
|
|
55
|
-
const securityReminder = `
|
|
56
|
-
[CLAWSEC SECURITY CONTEXT]
|
|
57
|
-
This session is protected by Clawsec security plugin.
|
|
58
|
-
- Purchases and financial transactions require approval
|
|
59
|
-
- Destructive commands (rm -rf, DROP TABLE, etc.) are monitored
|
|
60
|
-
- Sensitive data in outputs may be filtered
|
|
61
|
-
`;
|
|
62
|
-
return {
|
|
63
|
-
systemPromptAddition: securityReminder,
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Placeholder handler for tool-result-persist hook.
|
|
68
|
-
* Will be replaced with full implementation in Task 2.x
|
|
30
|
+
* Generate default security configuration
|
|
31
|
+
* Used as fallback when custom config fails to load
|
|
69
32
|
*/
|
|
70
|
-
|
|
71
|
-
// Log for debugging during development
|
|
72
|
-
if (state.api && state.config?.logLevel === 'debug') {
|
|
73
|
-
state.api.log('debug', `[clawsec] tool-result-persist: ${context.toolName}`, {
|
|
74
|
-
sessionId: context.sessionId,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
// Placeholder: Allow all results to persist
|
|
78
|
-
// TODO: Implement actual filtering logic in Task 2.x
|
|
33
|
+
function getDefaultConfig() {
|
|
79
34
|
return {
|
|
80
|
-
|
|
35
|
+
version: '1.0',
|
|
36
|
+
global: {
|
|
37
|
+
enabled: true,
|
|
38
|
+
logLevel: 'info',
|
|
39
|
+
},
|
|
40
|
+
llm: {
|
|
41
|
+
enabled: true,
|
|
42
|
+
model: null,
|
|
43
|
+
},
|
|
44
|
+
rules: {
|
|
45
|
+
purchase: {
|
|
46
|
+
enabled: true,
|
|
47
|
+
severity: 'critical',
|
|
48
|
+
action: 'block',
|
|
49
|
+
spendLimits: { perTransaction: 100, daily: 500 },
|
|
50
|
+
domains: { mode: 'blocklist', blocklist: [] },
|
|
51
|
+
},
|
|
52
|
+
website: {
|
|
53
|
+
enabled: true,
|
|
54
|
+
mode: 'blocklist',
|
|
55
|
+
severity: 'high',
|
|
56
|
+
action: 'block',
|
|
57
|
+
blocklist: [],
|
|
58
|
+
allowlist: [],
|
|
59
|
+
},
|
|
60
|
+
destructive: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
severity: 'critical',
|
|
63
|
+
action: 'block',
|
|
64
|
+
shell: { enabled: true },
|
|
65
|
+
cloud: { enabled: true },
|
|
66
|
+
code: { enabled: true },
|
|
67
|
+
},
|
|
68
|
+
secrets: {
|
|
69
|
+
enabled: true,
|
|
70
|
+
severity: 'critical',
|
|
71
|
+
action: 'block',
|
|
72
|
+
},
|
|
73
|
+
exfiltration: {
|
|
74
|
+
enabled: true,
|
|
75
|
+
severity: 'high',
|
|
76
|
+
action: 'block',
|
|
77
|
+
},
|
|
78
|
+
sanitization: {
|
|
79
|
+
enabled: true,
|
|
80
|
+
severity: 'high',
|
|
81
|
+
action: 'block',
|
|
82
|
+
minConfidence: 0.5,
|
|
83
|
+
redactMatches: false,
|
|
84
|
+
categories: {
|
|
85
|
+
instructionOverride: true,
|
|
86
|
+
systemLeak: true,
|
|
87
|
+
jailbreak: true,
|
|
88
|
+
encodedPayload: true,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
approval: {
|
|
93
|
+
native: { enabled: true, timeout: 300 },
|
|
94
|
+
agentConfirm: { enabled: true, parameterName: '_clawsec_confirm' },
|
|
95
|
+
webhook: { enabled: false, timeout: 30, headers: {} },
|
|
96
|
+
},
|
|
81
97
|
};
|
|
82
|
-
}
|
|
98
|
+
}
|
|
83
99
|
// =============================================================================
|
|
84
100
|
// PLUGIN LIFECYCLE
|
|
85
101
|
// =============================================================================
|
|
@@ -91,41 +107,55 @@ const toolResultPersistHandler = async (context) => {
|
|
|
91
107
|
*/
|
|
92
108
|
export function activate(api) {
|
|
93
109
|
if (state.initialized) {
|
|
94
|
-
|
|
110
|
+
state.logger.warn('Plugin already activated, skipping');
|
|
95
111
|
return () => deactivate();
|
|
96
112
|
}
|
|
97
113
|
// Store API reference and config
|
|
98
114
|
state.api = api;
|
|
99
|
-
state.config = api.
|
|
100
|
-
|
|
115
|
+
state.config = api.config;
|
|
116
|
+
state.logger = createLogger(api, state.config);
|
|
117
|
+
state.logger.info(`Activating Clawsec Security Plugin v${VERSION}`);
|
|
101
118
|
// Check if plugin is enabled
|
|
102
119
|
if (state.config?.enabled === false) {
|
|
103
|
-
|
|
120
|
+
state.logger.info('Plugin is disabled via configuration');
|
|
121
|
+
state.initialized = true;
|
|
122
|
+
return () => deactivate();
|
|
123
|
+
}
|
|
124
|
+
// Load the clawsec.yaml configuration
|
|
125
|
+
try {
|
|
126
|
+
const configPath = state.config?.configPath;
|
|
127
|
+
state.clawsecConfig = loadConfig(configPath, state.logger);
|
|
128
|
+
state.logger.info('Configuration loaded successfully');
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
132
|
+
state.logger.error(`Failed to load configuration: ${errorMessage}`);
|
|
133
|
+
state.logger.warn('Using default security configuration');
|
|
134
|
+
// Use default config instead of no config
|
|
135
|
+
const defaultConfig = getDefaultConfig();
|
|
136
|
+
state.clawsecConfig = defaultConfig;
|
|
137
|
+
// Create handlers with default config
|
|
138
|
+
const beforeToolCallHandlerWithConfig = createBeforeToolCallHandler(defaultConfig, undefined, state.logger);
|
|
139
|
+
const beforeAgentStartHandlerWithConfig = createBeforeAgentStartHandler(defaultConfig, undefined, state.logger);
|
|
140
|
+
const toolResultPersistHandlerWithConfig = createToolResultPersistHandler(defaultConfig, undefined, state.logger);
|
|
141
|
+
// Register hooks with default config (modern API)
|
|
142
|
+
api.on('before_tool_call', beforeToolCallHandlerWithConfig, { priority: 100 });
|
|
143
|
+
api.on('before_agent_start', beforeAgentStartHandlerWithConfig, { priority: 50 });
|
|
144
|
+
api.on('tool_result_persist', toolResultPersistHandlerWithConfig, { priority: 100 });
|
|
104
145
|
state.initialized = true;
|
|
146
|
+
state.logger.warn('Plugin initialized with default config due to error');
|
|
105
147
|
return () => deactivate();
|
|
106
148
|
}
|
|
107
|
-
//
|
|
108
|
-
state.
|
|
109
|
-
state.
|
|
110
|
-
state.
|
|
111
|
-
// Register hooks with OpenClaw
|
|
112
|
-
api.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
enabled: true,
|
|
116
|
-
});
|
|
117
|
-
api.registerHook('before-agent-start', beforeAgentStartHandler, {
|
|
118
|
-
id: 'clawsec-before-agent-start',
|
|
119
|
-
priority: 50,
|
|
120
|
-
enabled: true,
|
|
121
|
-
});
|
|
122
|
-
api.registerHook('tool-result-persist', toolResultPersistHandler, {
|
|
123
|
-
id: 'clawsec-tool-result-persist',
|
|
124
|
-
priority: 100,
|
|
125
|
-
enabled: true,
|
|
126
|
-
});
|
|
149
|
+
// Create handlers with loaded config
|
|
150
|
+
const beforeToolCallHandlerWithConfig = createBeforeToolCallHandler(state.clawsecConfig, undefined, state.logger);
|
|
151
|
+
const beforeAgentStartHandlerWithConfig = createBeforeAgentStartHandler(state.clawsecConfig, undefined, state.logger);
|
|
152
|
+
const toolResultPersistHandlerWithConfig = createToolResultPersistHandler(state.clawsecConfig, undefined, state.logger);
|
|
153
|
+
// Register hooks with OpenClaw (modern API)
|
|
154
|
+
api.on('before_tool_call', beforeToolCallHandlerWithConfig, { priority: 100 });
|
|
155
|
+
api.on('before_agent_start', beforeAgentStartHandlerWithConfig, { priority: 50 });
|
|
156
|
+
api.on('tool_result_persist', toolResultPersistHandlerWithConfig, { priority: 100 });
|
|
127
157
|
state.initialized = true;
|
|
128
|
-
|
|
158
|
+
state.logger.info('All hooks registered successfully');
|
|
129
159
|
// Return cleanup function
|
|
130
160
|
return () => deactivate();
|
|
131
161
|
}
|
|
@@ -138,20 +168,14 @@ export function deactivate() {
|
|
|
138
168
|
}
|
|
139
169
|
const api = state.api;
|
|
140
170
|
if (api) {
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
api.unregisterHook('before-tool-call', 'clawsec-before-tool-call');
|
|
144
|
-
api.unregisterHook('before-agent-start', 'clawsec-before-agent-start');
|
|
145
|
-
api.unregisterHook('tool-result-persist', 'clawsec-tool-result-persist');
|
|
146
|
-
api.log('info', '[clawsec] All hooks unregistered');
|
|
171
|
+
state.logger.info('Deactivating Clawsec Security Plugin');
|
|
172
|
+
// Modern API: hooks are automatically unregistered by OpenClaw
|
|
147
173
|
}
|
|
148
174
|
// Reset state
|
|
149
175
|
state.api = null;
|
|
150
176
|
state.config = null;
|
|
151
177
|
state.initialized = false;
|
|
152
|
-
state.
|
|
153
|
-
state.handlers.beforeAgentStart = null;
|
|
154
|
-
state.handlers.toolResultPersist = null;
|
|
178
|
+
state.logger = createNoOpLogger();
|
|
155
179
|
}
|
|
156
180
|
/**
|
|
157
181
|
* Check if the plugin is currently active
|
|
@@ -203,7 +227,7 @@ export const pluginConfigSchema = {
|
|
|
203
227
|
* @param api - The OpenClaw plugin API
|
|
204
228
|
*/
|
|
205
229
|
function register(api) {
|
|
206
|
-
activate(api);
|
|
230
|
+
return activate(api);
|
|
207
231
|
}
|
|
208
232
|
// =============================================================================
|
|
209
233
|
// DEFAULT EXPORT
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAErD,oDAAoD;AACpD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;AAEhF,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,yBAAyB;AACzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAuMxF,MAAM,KAAK,GAAgB;IACzB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,KAAK;IAClB,MAAM,EAAE,gBAAgB,EAAE;CAC3B,CAAC;AAEF,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,gBAAgB;IACvB,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM;SACjB;QACD,GAAG,EAAE;YACH,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACZ;QACD,KAAK,EAAE;YACL,QAAQ,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,OAAO;gBACf,WAAW,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;gBAChD,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;aAC9C;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,EAAE;aACd;YACD,WAAW,EAAE;gBACX,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxB,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aACxB;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,OAAO;aAChB;YACD,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,OAAO;aAChB;YACD,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,OAAO;gBACf,aAAa,EAAE,GAAG;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE;oBACV,mBAAmB,EAAE,IAAI;oBACzB,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,IAAI;oBACf,cAAc,EAAE,IAAI;iBACrB;aACF;SACF;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;YACvC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE;YAClE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;SACtD;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAsB;IAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAEpE,6BAA6B;IAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC1D,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5C,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAE1D,0CAA0C;QAC1C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;QAEpC,sCAAsC;QACtC,MAAM,+BAA+B,GAAG,2BAA2B,CACjE,aAAa,EACb,SAAS,EACT,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,MAAM,iCAAiC,GAAG,6BAA6B,CACrE,aAAa,EACb,SAAS,EACT,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,MAAM,kCAAkC,GAAG,8BAA8B,CACvE,aAAa,EACb,SAAS,EACT,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,kDAAkD;QAClD,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,+BAA+B,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/E,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,iCAAiC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,kCAAkC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAErF,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,MAAM,+BAA+B,GAAG,2BAA2B,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClH,MAAM,iCAAiC,GAAG,6BAA6B,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtH,MAAM,kCAAkC,GAAG,8BAA8B,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAExH,4CAA4C;IAC5C,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,+BAA+B,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/E,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,iCAAiC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAClF,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,kCAAkC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAErF,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAEvD,0BAA0B;IAC1B,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC1D,+DAA+D;IACjE,CAAC;IAED,cAAc;IACd,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;IACjB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC,WAAW,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,6CAA6C;SAC3D;QACD,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,wCAAwC;SACtD;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;YACxC,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,yBAAyB;SACvC;KACF;IACD,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAEX,gFAAgF;AAChF,wCAAwC;AACxC,gFAAgF;AAEhF;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,GAAsB;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,4CAA4C;AAC5C,eAAe;IACb,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,kBAAkB;IAChC,QAAQ;IACR,kCAAkC;IAClC,QAAQ;IACR,UAAU;CACX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAKpB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACnE,mCAAmC;IACnC,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,mCAAmC;IACnC,kBAAkB,IAAI,MAAM,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,kBAAkB,GACzB,mBAAmB,CAqDrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,oBAAoB,CAMvB"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Notifications Module
|
|
3
3
|
* Unified notification system for security events
|
|
4
4
|
*/
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
5
6
|
export * from './types.js';
|
|
6
7
|
export { createSlackSender } from './slack.js';
|
|
7
8
|
export { createDiscordSender } from './discord.js';
|
|
@@ -60,7 +61,7 @@ export function createNotificationManager(config) {
|
|
|
60
61
|
*/
|
|
61
62
|
export function createSecurityEvent(params) {
|
|
62
63
|
return {
|
|
63
|
-
eventId:
|
|
64
|
+
eventId: randomUUID(),
|
|
64
65
|
timestamp: Date.now(),
|
|
65
66
|
...params,
|
|
66
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAcrD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA0B;IAE1B,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAA2B;YACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,oCAAoC;YACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,iCAAiC;YACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACvC,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,kBAAkB;YAChB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAQnC;IACC,OAAO;QACL,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAcrD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA0B;IAE1B,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAA2B;YACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,oCAAoC;YACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,iCAAiC;YACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACvC,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,kBAAkB;YAChB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAQnC;IACC,OAAO;QACL,OAAO,EAAE,UAAU,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -15,7 +15,7 @@ const SEVERITY_EMOJI = {
|
|
|
15
15
|
* Escape special characters for Telegram MarkdownV2
|
|
16
16
|
*/
|
|
17
17
|
function escapeMarkdownV2(text) {
|
|
18
|
-
return text.replace(/[_
|
|
18
|
+
return text.replace(/[_*[\]()~`>#+=|{}.!-]/g, '\\$&');
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Escape special characters for Telegram HTML
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/notifications/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,cAAc,GAA6B;IAC/C,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/notifications/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,cAAc,GAA6B;IAC/C,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,KAA2B;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAE1D,OAAO,GAAG,KAAK,uBAAuB,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;iBAE/D,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;;;cAG3B,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1C,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;UACxC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAChB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;EAC3C,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;;+BAErE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CAAC,KAA2B;IAChE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAE1D,OAAO,GAAG,KAAK,qBAAqB,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;;YAEtD,KAAK,CAAC,MAAM;;;cAGV,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;UAC5B,KAAK,CAAC,QAAQ;gBACR,KAAK,CAAC,OAAO;EAC3B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;6BAElD,SAAS,GAAG,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAS,+BAA+B,CAAC,KAA2B;IAClE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAE1D,OAAO,GAAG,KAAK,qBAAqB,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;YAExE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;;;cAG5B,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAChD,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;UAC9C,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC1B,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;EAC7C,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;;6BAE1E,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,KAA2B,EAC3B,SAA8C;IAE9C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,YAAY;YACf,OAAO,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAChD,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAA8C;IACvE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,yHAAyH,CAAC;QACnI,KAAK,YAAY;YACf,OAAO,iHAAiH,CAAC;QAC3H,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,+GAA+G,CAAC;IAC3H,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,KAA2B,EAC3B,MAAsB;IAEtB,yBAAyB;IACzB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,aAAa,GAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,OAAO,GAAG,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC;IAEjE,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAA2B;YACpC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,qCAAqC;iBAC7C,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,gCAAgC;iBAC3C,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAA4B;oBACvC,OAAO,EAAE,MAAM,CAAC,MAAM;oBACtB,IAAI;iBACL,CAAC;gBAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;gBACxC,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;oBACrD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;qBACnC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2C,CAAC;gBAE9E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,uBAAuB,MAAM,CAAC,WAAW,IAAI,eAAe,EAAE;qBACtE,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,MAAM;iBACjB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI;YACR,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,qCAAqC;iBAC7C,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjD,MAAM,OAAO,GAA4B;oBACvC,OAAO,EAAE,MAAM,CAAC,MAAM;oBACtB,IAAI;iBACL,CAAC;gBAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;gBACxC,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;oBACrD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;qBACnC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2C,CAAC;gBAE9E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,uBAAuB,MAAM,CAAC,WAAW,IAAI,eAAe,EAAE;qBACtE,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,gCAAgC;iBAC3C,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,7 @@ export type Severity = 'critical' | 'high' | 'medium' | 'low';
|
|
|
9
9
|
/**
|
|
10
10
|
* Categories of security threats
|
|
11
11
|
*/
|
|
12
|
-
export type ThreatCategory = 'purchase' | 'website' | 'destructive' | 'secrets' | 'exfiltration';
|
|
12
|
+
export type ThreatCategory = 'purchase' | 'website' | 'destructive' | 'secrets' | 'exfiltration' | 'unknown';
|
|
13
13
|
/**
|
|
14
14
|
* Supported notification channels
|
|
15
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/notifications/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/notifications/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility for safe logging with fallback to console
|
|
3
|
+
*/
|
|
4
|
+
import type { OpenClawPluginAPI, PluginConfig } from '../index.js';
|
|
5
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
6
|
+
export interface Logger {
|
|
7
|
+
debug: (message: string, data?: unknown) => void;
|
|
8
|
+
info: (message: string, data?: unknown) => void;
|
|
9
|
+
warn: (message: string, data?: unknown) => void;
|
|
10
|
+
error: (message: string, data?: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a safe logger that handles missing api.log gracefully
|
|
14
|
+
*
|
|
15
|
+
* @param api - The OpenClaw plugin API (nullable)
|
|
16
|
+
* @param config - The plugin configuration (nullable)
|
|
17
|
+
* @returns Logger instance with level-filtered logging
|
|
18
|
+
*/
|
|
19
|
+
export declare function createLogger(api: OpenClawPluginAPI | null, config: PluginConfig | null): Logger;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a no-op logger that discards all logs
|
|
22
|
+
*
|
|
23
|
+
* @returns Logger instance that does nothing
|
|
24
|
+
*/
|
|
25
|
+
export declare function createNoOpLogger(): Logger;
|
|
26
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,GAAG,IAAI,GAC1B,MAAM,CAgDR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility for safe logging with fallback to console
|
|
3
|
+
*/
|
|
4
|
+
const LOG_LEVELS = {
|
|
5
|
+
debug: 0,
|
|
6
|
+
info: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
error: 3,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Creates a safe logger that handles missing api.log gracefully
|
|
12
|
+
*
|
|
13
|
+
* @param api - The OpenClaw plugin API (nullable)
|
|
14
|
+
* @param config - The plugin configuration (nullable)
|
|
15
|
+
* @returns Logger instance with level-filtered logging
|
|
16
|
+
*/
|
|
17
|
+
export function createLogger(api, config) {
|
|
18
|
+
const configuredLevel = config?.logLevel || 'info';
|
|
19
|
+
const minLevel = LOG_LEVELS[configuredLevel];
|
|
20
|
+
function shouldLog(level) {
|
|
21
|
+
return LOG_LEVELS[level] >= minLevel;
|
|
22
|
+
}
|
|
23
|
+
function log(level, message, data) {
|
|
24
|
+
if (!shouldLog(level)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Add [clawsec] prefix to all messages
|
|
28
|
+
const prefixedMessage = `[clawsec] ${message}`;
|
|
29
|
+
// Try API logging first
|
|
30
|
+
if (api && typeof api.log === 'function') {
|
|
31
|
+
try {
|
|
32
|
+
api.log(level, prefixedMessage, data);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// API logging failed, fall through to console
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Fallback to console
|
|
40
|
+
// Map log levels to console methods (debug -> log for better spy compatibility)
|
|
41
|
+
const consoleMapping = {
|
|
42
|
+
debug: console.log,
|
|
43
|
+
info: console.info,
|
|
44
|
+
warn: console.warn,
|
|
45
|
+
error: console.error,
|
|
46
|
+
};
|
|
47
|
+
const consoleMethod = consoleMapping[level];
|
|
48
|
+
if (data !== undefined) {
|
|
49
|
+
consoleMethod(prefixedMessage, data);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
consoleMethod(prefixedMessage);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
debug: (message, data) => log('debug', message, data),
|
|
57
|
+
info: (message, data) => log('info', message, data),
|
|
58
|
+
warn: (message, data) => log('warn', message, data),
|
|
59
|
+
error: (message, data) => log('error', message, data),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a no-op logger that discards all logs
|
|
64
|
+
*
|
|
65
|
+
* @returns Logger instance that does nothing
|
|
66
|
+
*/
|
|
67
|
+
export function createNoOpLogger() {
|
|
68
|
+
const noop = () => { };
|
|
69
|
+
return {
|
|
70
|
+
debug: noop,
|
|
71
|
+
info: noop,
|
|
72
|
+
warn: noop,
|
|
73
|
+
error: noop,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AASF;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,GAA6B,EAC7B,MAA2B;IAE3B,MAAM,eAAe,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE7C,SAAS,SAAS,CAAC,KAAe;QAChC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;IACvC,CAAC;IAED,SAAS,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;QAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,MAAM,eAAe,GAAG,aAAa,OAAO,EAAE,CAAC;QAE/C,wBAAwB;QACxB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,gFAAgF;QAChF,MAAM,cAAc,GAAyC;YAC3D,KAAK,EAAE,OAAO,CAAC,GAAG;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACF,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,OAAe,EAAE,IAAc,EAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QAC7E,IAAI,EAAE,CAAC,OAAe,EAAE,IAAc,EAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3E,IAAI,EAAE,CAAC,OAAe,EAAE,IAAc,EAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3E,KAAK,EAAE,CAAC,OAAe,EAAE,IAAc,EAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;IAC5B,OAAO;QACL,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://openclaw.ai/schemas/plugin.json",
|
|
3
3
|
"id": "clawsec",
|
|
4
4
|
"name": "Clawsec Security Plugin",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "0.0.2",
|
|
6
6
|
"kind": "security",
|
|
7
7
|
"description": "Comprehensive security plugin for OpenClaw.ai that prevents AI agents from taking dangerous actions. Provides purchase protection, website control, destructive command prevention, and sensitive data filtering.",
|
|
8
8
|
"author": "Clawsec Team",
|
|
@@ -40,7 +40,12 @@
|
|
|
40
40
|
},
|
|
41
41
|
"logLevel": {
|
|
42
42
|
"type": "string",
|
|
43
|
-
"enum": [
|
|
43
|
+
"enum": [
|
|
44
|
+
"debug",
|
|
45
|
+
"info",
|
|
46
|
+
"warn",
|
|
47
|
+
"error"
|
|
48
|
+
],
|
|
44
49
|
"default": "info",
|
|
45
50
|
"description": "Logging verbosity level"
|
|
46
51
|
}
|
|
@@ -61,26 +66,6 @@
|
|
|
61
66
|
"helpText": "Set logging verbosity (debug, info, warn, error)"
|
|
62
67
|
}
|
|
63
68
|
},
|
|
64
|
-
"hooks": {
|
|
65
|
-
"before-tool-call": {
|
|
66
|
-
"id": "clawsec-before-tool-call",
|
|
67
|
-
"description": "Intercepts tool calls to detect and block dangerous actions before execution",
|
|
68
|
-
"priority": 100,
|
|
69
|
-
"handler": "dist/index.js:beforeToolCallHandler"
|
|
70
|
-
},
|
|
71
|
-
"before-agent-start": {
|
|
72
|
-
"id": "clawsec-before-agent-start",
|
|
73
|
-
"description": "Injects security context and reminders into the agent's system prompt",
|
|
74
|
-
"priority": 50,
|
|
75
|
-
"handler": "dist/index.js:beforeAgentStartHandler"
|
|
76
|
-
},
|
|
77
|
-
"tool-result-persist": {
|
|
78
|
-
"id": "clawsec-tool-result-persist",
|
|
79
|
-
"description": "Filters sensitive data from tool outputs before persisting to conversation history",
|
|
80
|
-
"priority": 100,
|
|
81
|
-
"handler": "dist/index.js:toolResultPersistHandler"
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
69
|
"configuration": {
|
|
85
70
|
"externalConfigFile": {
|
|
86
71
|
"format": "yaml",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clawsec",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Security plugin for OpenClaw.ai - prevents AI agents from taking dangerous actions",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -33,11 +33,17 @@
|
|
|
33
33
|
"author": "Clawsec Team",
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"openclaw": {
|
|
36
|
-
"extensions": [
|
|
36
|
+
"extensions": [
|
|
37
|
+
"./dist/src/index.js"
|
|
38
|
+
]
|
|
37
39
|
},
|
|
38
40
|
"engines": {
|
|
39
41
|
"node": ">=18.0.0"
|
|
40
42
|
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public",
|
|
45
|
+
"registry": "https://registry.npmjs.org/"
|
|
46
|
+
},
|
|
41
47
|
"bin": {
|
|
42
48
|
"clawsec": "./dist/bin/clawsec.js"
|
|
43
49
|
},
|