clawsec 0.0.1
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/README.md +560 -0
- package/dist/bin/clawsec.d.ts +7 -0
- package/dist/bin/clawsec.d.ts.map +1 -0
- package/dist/bin/clawsec.js +12 -0
- package/dist/bin/clawsec.js.map +1 -0
- package/dist/src/actions/block.d.ts +22 -0
- package/dist/src/actions/block.d.ts.map +1 -0
- package/dist/src/actions/block.js +83 -0
- package/dist/src/actions/block.js.map +1 -0
- package/dist/src/actions/confirm.d.ts +35 -0
- package/dist/src/actions/confirm.d.ts.map +1 -0
- package/dist/src/actions/confirm.js +156 -0
- package/dist/src/actions/confirm.js.map +1 -0
- package/dist/src/actions/executor.d.ts +64 -0
- package/dist/src/actions/executor.d.ts.map +1 -0
- package/dist/src/actions/executor.js +114 -0
- package/dist/src/actions/executor.js.map +1 -0
- package/dist/src/actions/index.d.ts +13 -0
- package/dist/src/actions/index.d.ts.map +1 -0
- package/dist/src/actions/index.js +15 -0
- package/dist/src/actions/index.js.map +1 -0
- package/dist/src/actions/log.d.ts +19 -0
- package/dist/src/actions/log.d.ts.map +1 -0
- package/dist/src/actions/log.js +63 -0
- package/dist/src/actions/log.js.map +1 -0
- package/dist/src/actions/types.d.ts +85 -0
- package/dist/src/actions/types.d.ts.map +1 -0
- package/dist/src/actions/types.js +78 -0
- package/dist/src/actions/types.js.map +1 -0
- package/dist/src/actions/warn.d.ts +22 -0
- package/dist/src/actions/warn.d.ts.map +1 -0
- package/dist/src/actions/warn.js +84 -0
- package/dist/src/actions/warn.js.map +1 -0
- package/dist/src/approval/agent-confirm.d.ts +104 -0
- package/dist/src/approval/agent-confirm.d.ts.map +1 -0
- package/dist/src/approval/agent-confirm.js +173 -0
- package/dist/src/approval/agent-confirm.js.map +1 -0
- package/dist/src/approval/index.d.ts +14 -0
- package/dist/src/approval/index.d.ts.map +1 -0
- package/dist/src/approval/index.js +9 -0
- package/dist/src/approval/index.js.map +1 -0
- package/dist/src/approval/native.d.ts +56 -0
- package/dist/src/approval/native.d.ts.map +1 -0
- package/dist/src/approval/native.js +196 -0
- package/dist/src/approval/native.js.map +1 -0
- package/dist/src/approval/store.d.ts +88 -0
- package/dist/src/approval/store.d.ts.map +1 -0
- package/dist/src/approval/store.js +192 -0
- package/dist/src/approval/store.js.map +1 -0
- package/dist/src/approval/types.d.ts +119 -0
- package/dist/src/approval/types.d.ts.map +1 -0
- package/dist/src/approval/types.js +6 -0
- package/dist/src/approval/types.js.map +1 -0
- package/dist/src/approval/webhook.d.ts +170 -0
- package/dist/src/approval/webhook.d.ts.map +1 -0
- package/dist/src/approval/webhook.js +362 -0
- package/dist/src/approval/webhook.js.map +1 -0
- package/dist/src/cli/commands/audit.d.ts +43 -0
- package/dist/src/cli/commands/audit.d.ts.map +1 -0
- package/dist/src/cli/commands/audit.js +115 -0
- package/dist/src/cli/commands/audit.js.map +1 -0
- package/dist/src/cli/commands/feedback.d.ts +27 -0
- package/dist/src/cli/commands/feedback.d.ts.map +1 -0
- package/dist/src/cli/commands/feedback.js +228 -0
- package/dist/src/cli/commands/feedback.js.map +1 -0
- package/dist/src/cli/commands/index.d.ts +11 -0
- package/dist/src/cli/commands/index.d.ts.map +1 -0
- package/dist/src/cli/commands/index.js +13 -0
- package/dist/src/cli/commands/index.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +20 -0
- package/dist/src/cli/commands/status.d.ts.map +1 -0
- package/dist/src/cli/commands/status.js +122 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/test.d.ts +23 -0
- package/dist/src/cli/commands/test.d.ts.map +1 -0
- package/dist/src/cli/commands/test.js +134 -0
- package/dist/src/cli/commands/test.js.map +1 -0
- package/dist/src/cli/commands/types.d.ts +81 -0
- package/dist/src/cli/commands/types.d.ts.map +1 -0
- package/dist/src/cli/commands/types.js +6 -0
- package/dist/src/cli/commands/types.js.map +1 -0
- package/dist/src/cli/index.d.ts +17 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +267 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/config/defaults.d.ts +20 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +123 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/index.d.ts +8 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +41 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/loader.d.ts +99 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +242 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +627 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +585 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/detectors/destructive/cloud-detector.d.ts +51 -0
- package/dist/src/detectors/destructive/cloud-detector.d.ts.map +1 -0
- package/dist/src/detectors/destructive/cloud-detector.js +556 -0
- package/dist/src/detectors/destructive/cloud-detector.js.map +1 -0
- package/dist/src/detectors/destructive/code-detector.d.ts +59 -0
- package/dist/src/detectors/destructive/code-detector.d.ts.map +1 -0
- package/dist/src/detectors/destructive/code-detector.js +558 -0
- package/dist/src/detectors/destructive/code-detector.js.map +1 -0
- package/dist/src/detectors/destructive/index.d.ts +54 -0
- package/dist/src/detectors/destructive/index.d.ts.map +1 -0
- package/dist/src/detectors/destructive/index.js +168 -0
- package/dist/src/detectors/destructive/index.js.map +1 -0
- package/dist/src/detectors/destructive/shell-detector.d.ts +43 -0
- package/dist/src/detectors/destructive/shell-detector.d.ts.map +1 -0
- package/dist/src/detectors/destructive/shell-detector.js +302 -0
- package/dist/src/detectors/destructive/shell-detector.js.map +1 -0
- package/dist/src/detectors/destructive/types.d.ts +143 -0
- package/dist/src/detectors/destructive/types.d.ts.map +1 -0
- package/dist/src/detectors/destructive/types.js +6 -0
- package/dist/src/detectors/destructive/types.js.map +1 -0
- package/dist/src/detectors/exfiltration/cloud-detector.d.ts +51 -0
- package/dist/src/detectors/exfiltration/cloud-detector.d.ts.map +1 -0
- package/dist/src/detectors/exfiltration/cloud-detector.js +427 -0
- package/dist/src/detectors/exfiltration/cloud-detector.js.map +1 -0
- package/dist/src/detectors/exfiltration/http-detector.d.ts +47 -0
- package/dist/src/detectors/exfiltration/http-detector.d.ts.map +1 -0
- package/dist/src/detectors/exfiltration/http-detector.js +429 -0
- package/dist/src/detectors/exfiltration/http-detector.js.map +1 -0
- package/dist/src/detectors/exfiltration/index.d.ts +44 -0
- package/dist/src/detectors/exfiltration/index.d.ts.map +1 -0
- package/dist/src/detectors/exfiltration/index.js +118 -0
- package/dist/src/detectors/exfiltration/index.js.map +1 -0
- package/dist/src/detectors/exfiltration/network-detector.d.ts +55 -0
- package/dist/src/detectors/exfiltration/network-detector.d.ts.map +1 -0
- package/dist/src/detectors/exfiltration/network-detector.js +504 -0
- package/dist/src/detectors/exfiltration/network-detector.js.map +1 -0
- package/dist/src/detectors/exfiltration/types.d.ts +139 -0
- package/dist/src/detectors/exfiltration/types.d.ts.map +1 -0
- package/dist/src/detectors/exfiltration/types.js +6 -0
- package/dist/src/detectors/exfiltration/types.js.map +1 -0
- package/dist/src/detectors/purchase/domain-detector.d.ts +44 -0
- package/dist/src/detectors/purchase/domain-detector.d.ts.map +1 -0
- package/dist/src/detectors/purchase/domain-detector.js +296 -0
- package/dist/src/detectors/purchase/domain-detector.js.map +1 -0
- package/dist/src/detectors/purchase/form-detector.d.ts +27 -0
- package/dist/src/detectors/purchase/form-detector.d.ts.map +1 -0
- package/dist/src/detectors/purchase/form-detector.js +344 -0
- package/dist/src/detectors/purchase/form-detector.js.map +1 -0
- package/dist/src/detectors/purchase/index.d.ts +65 -0
- package/dist/src/detectors/purchase/index.d.ts.map +1 -0
- package/dist/src/detectors/purchase/index.js +216 -0
- package/dist/src/detectors/purchase/index.js.map +1 -0
- package/dist/src/detectors/purchase/spend-tracker.d.ts +132 -0
- package/dist/src/detectors/purchase/spend-tracker.d.ts.map +1 -0
- package/dist/src/detectors/purchase/spend-tracker.js +313 -0
- package/dist/src/detectors/purchase/spend-tracker.js.map +1 -0
- package/dist/src/detectors/purchase/types.d.ts +139 -0
- package/dist/src/detectors/purchase/types.d.ts.map +1 -0
- package/dist/src/detectors/purchase/types.js +6 -0
- package/dist/src/detectors/purchase/types.js.map +1 -0
- package/dist/src/detectors/purchase/url-detector.d.ts +31 -0
- package/dist/src/detectors/purchase/url-detector.d.ts.map +1 -0
- package/dist/src/detectors/purchase/url-detector.js +292 -0
- package/dist/src/detectors/purchase/url-detector.js.map +1 -0
- package/dist/src/detectors/secrets/api-key-detector.d.ts +30 -0
- package/dist/src/detectors/secrets/api-key-detector.d.ts.map +1 -0
- package/dist/src/detectors/secrets/api-key-detector.js +297 -0
- package/dist/src/detectors/secrets/api-key-detector.js.map +1 -0
- package/dist/src/detectors/secrets/index.d.ts +43 -0
- package/dist/src/detectors/secrets/index.d.ts.map +1 -0
- package/dist/src/detectors/secrets/index.js +261 -0
- package/dist/src/detectors/secrets/index.js.map +1 -0
- package/dist/src/detectors/secrets/pii-detector.d.ts +54 -0
- package/dist/src/detectors/secrets/pii-detector.d.ts.map +1 -0
- package/dist/src/detectors/secrets/pii-detector.js +286 -0
- package/dist/src/detectors/secrets/pii-detector.js.map +1 -0
- package/dist/src/detectors/secrets/token-detector.d.ts +51 -0
- package/dist/src/detectors/secrets/token-detector.d.ts.map +1 -0
- package/dist/src/detectors/secrets/token-detector.js +233 -0
- package/dist/src/detectors/secrets/token-detector.js.map +1 -0
- package/dist/src/detectors/secrets/types.d.ts +157 -0
- package/dist/src/detectors/secrets/types.d.ts.map +1 -0
- package/dist/src/detectors/secrets/types.js +6 -0
- package/dist/src/detectors/secrets/types.js.map +1 -0
- package/dist/src/detectors/website/category-detector.d.ts +22 -0
- package/dist/src/detectors/website/category-detector.d.ts.map +1 -0
- package/dist/src/detectors/website/category-detector.js +162 -0
- package/dist/src/detectors/website/category-detector.js.map +1 -0
- package/dist/src/detectors/website/index.d.ts +53 -0
- package/dist/src/detectors/website/index.d.ts.map +1 -0
- package/dist/src/detectors/website/index.js +232 -0
- package/dist/src/detectors/website/index.js.map +1 -0
- package/dist/src/detectors/website/pattern-matcher.d.ts +33 -0
- package/dist/src/detectors/website/pattern-matcher.d.ts.map +1 -0
- package/dist/src/detectors/website/pattern-matcher.js +121 -0
- package/dist/src/detectors/website/pattern-matcher.js.map +1 -0
- package/dist/src/detectors/website/types.d.ts +105 -0
- package/dist/src/detectors/website/types.d.ts.map +1 -0
- package/dist/src/detectors/website/types.js +6 -0
- package/dist/src/detectors/website/types.js.map +1 -0
- package/dist/src/engine/analyzer.d.ts +87 -0
- package/dist/src/engine/analyzer.d.ts.map +1 -0
- package/dist/src/engine/analyzer.js +427 -0
- package/dist/src/engine/analyzer.js.map +1 -0
- package/dist/src/engine/cache.d.ts +80 -0
- package/dist/src/engine/cache.d.ts.map +1 -0
- package/dist/src/engine/cache.js +167 -0
- package/dist/src/engine/cache.js.map +1 -0
- package/dist/src/engine/index.d.ts +11 -0
- package/dist/src/engine/index.d.ts.map +1 -0
- package/dist/src/engine/index.js +11 -0
- package/dist/src/engine/index.js.map +1 -0
- package/dist/src/engine/llm-client.d.ts +210 -0
- package/dist/src/engine/llm-client.d.ts.map +1 -0
- package/dist/src/engine/llm-client.js +506 -0
- package/dist/src/engine/llm-client.js.map +1 -0
- package/dist/src/engine/types.d.ts +163 -0
- package/dist/src/engine/types.d.ts.map +1 -0
- package/dist/src/engine/types.js +21 -0
- package/dist/src/engine/types.js.map +1 -0
- package/dist/src/feedback/index.d.ts +9 -0
- package/dist/src/feedback/index.d.ts.map +1 -0
- package/dist/src/feedback/index.js +8 -0
- package/dist/src/feedback/index.js.map +1 -0
- package/dist/src/feedback/learner.d.ts +222 -0
- package/dist/src/feedback/learner.d.ts.map +1 -0
- package/dist/src/feedback/learner.js +401 -0
- package/dist/src/feedback/learner.js.map +1 -0
- package/dist/src/feedback/store.d.ts +113 -0
- package/dist/src/feedback/store.d.ts.map +1 -0
- package/dist/src/feedback/store.js +228 -0
- package/dist/src/feedback/store.js.map +1 -0
- package/dist/src/feedback/types.d.ts +126 -0
- package/dist/src/feedback/types.d.ts.map +1 -0
- package/dist/src/feedback/types.js +6 -0
- package/dist/src/feedback/types.js.map +1 -0
- package/dist/src/hooks/before-agent-start/handler.d.ts +37 -0
- package/dist/src/hooks/before-agent-start/handler.d.ts.map +1 -0
- package/dist/src/hooks/before-agent-start/handler.js +109 -0
- package/dist/src/hooks/before-agent-start/handler.js.map +1 -0
- package/dist/src/hooks/before-agent-start/index.d.ts +8 -0
- package/dist/src/hooks/before-agent-start/index.d.ts.map +1 -0
- package/dist/src/hooks/before-agent-start/index.js +7 -0
- package/dist/src/hooks/before-agent-start/index.js.map +1 -0
- package/dist/src/hooks/before-agent-start/prompts.d.ts +48 -0
- package/dist/src/hooks/before-agent-start/prompts.d.ts.map +1 -0
- package/dist/src/hooks/before-agent-start/prompts.js +103 -0
- package/dist/src/hooks/before-agent-start/prompts.js.map +1 -0
- package/dist/src/hooks/before-tool-call/handler.d.ts +42 -0
- package/dist/src/hooks/before-tool-call/handler.d.ts.map +1 -0
- package/dist/src/hooks/before-tool-call/handler.js +226 -0
- package/dist/src/hooks/before-tool-call/handler.js.map +1 -0
- package/dist/src/hooks/before-tool-call/index.d.ts +7 -0
- package/dist/src/hooks/before-tool-call/index.d.ts.map +1 -0
- package/dist/src/hooks/before-tool-call/index.js +6 -0
- package/dist/src/hooks/before-tool-call/index.js.map +1 -0
- package/dist/src/hooks/tool-result-persist/filter.d.ts +72 -0
- package/dist/src/hooks/tool-result-persist/filter.d.ts.map +1 -0
- package/dist/src/hooks/tool-result-persist/filter.js +305 -0
- package/dist/src/hooks/tool-result-persist/filter.js.map +1 -0
- package/dist/src/hooks/tool-result-persist/handler.d.ts +49 -0
- package/dist/src/hooks/tool-result-persist/handler.d.ts.map +1 -0
- package/dist/src/hooks/tool-result-persist/handler.js +217 -0
- package/dist/src/hooks/tool-result-persist/handler.js.map +1 -0
- package/dist/src/hooks/tool-result-persist/index.d.ts +11 -0
- package/dist/src/hooks/tool-result-persist/index.d.ts.map +1 -0
- package/dist/src/hooks/tool-result-persist/index.js +11 -0
- package/dist/src/hooks/tool-result-persist/index.js.map +1 -0
- package/dist/src/index.d.ts +256 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +222 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/notifications/discord.d.ts +10 -0
- package/dist/src/notifications/discord.d.ts.map +1 -0
- package/dist/src/notifications/discord.js +218 -0
- package/dist/src/notifications/discord.js.map +1 -0
- package/dist/src/notifications/index.d.ts +37 -0
- package/dist/src/notifications/index.d.ts.map +1 -0
- package/dist/src/notifications/index.js +68 -0
- package/dist/src/notifications/index.js.map +1 -0
- package/dist/src/notifications/slack.d.ts +10 -0
- package/dist/src/notifications/slack.d.ts.map +1 -0
- package/dist/src/notifications/slack.js +218 -0
- package/dist/src/notifications/slack.js.map +1 -0
- package/dist/src/notifications/telegram.d.ts +10 -0
- package/dist/src/notifications/telegram.d.ts.map +1 -0
- package/dist/src/notifications/telegram.js +242 -0
- package/dist/src/notifications/telegram.js.map +1 -0
- package/dist/src/notifications/types.d.ts +119 -0
- package/dist/src/notifications/types.d.ts.map +1 -0
- package/dist/src/notifications/types.js +6 -0
- package/dist/src/notifications/types.js.map +1 -0
- package/dist/src/proxy/index.d.ts +8 -0
- package/dist/src/proxy/index.d.ts.map +1 -0
- package/dist/src/proxy/index.js +9 -0
- package/dist/src/proxy/index.js.map +1 -0
- package/dist/src/proxy/middleware.d.ts +55 -0
- package/dist/src/proxy/middleware.d.ts.map +1 -0
- package/dist/src/proxy/middleware.js +215 -0
- package/dist/src/proxy/middleware.js.map +1 -0
- package/dist/src/proxy/server.d.ts +57 -0
- package/dist/src/proxy/server.d.ts.map +1 -0
- package/dist/src/proxy/server.js +298 -0
- package/dist/src/proxy/server.js.map +1 -0
- package/dist/src/proxy/types.d.ts +136 -0
- package/dist/src/proxy/types.d.ts.map +1 -0
- package/dist/src/proxy/types.js +6 -0
- package/dist/src/proxy/types.js.map +1 -0
- package/dist/src/sanitization/index.d.ts +10 -0
- package/dist/src/sanitization/index.d.ts.map +1 -0
- package/dist/src/sanitization/index.js +9 -0
- package/dist/src/sanitization/index.js.map +1 -0
- package/dist/src/sanitization/patterns.d.ts +51 -0
- package/dist/src/sanitization/patterns.d.ts.map +1 -0
- package/dist/src/sanitization/patterns.js +266 -0
- package/dist/src/sanitization/patterns.js.map +1 -0
- package/dist/src/sanitization/scanner.d.ts +29 -0
- package/dist/src/sanitization/scanner.d.ts.map +1 -0
- package/dist/src/sanitization/scanner.js +328 -0
- package/dist/src/sanitization/scanner.js.map +1 -0
- package/dist/src/sanitization/types.d.ts +57 -0
- package/dist/src/sanitization/types.d.ts.map +1 -0
- package/dist/src/sanitization/types.js +5 -0
- package/dist/src/sanitization/types.js.map +1 -0
- package/openclaw.plugin.json +114 -0
- package/package.json +63 -0
- package/rules/builtin/README.md +139 -0
- package/rules/builtin/ai-services.yaml +70 -0
- package/rules/builtin/api-keys.yaml +64 -0
- package/rules/builtin/authentication.yaml +56 -0
- package/rules/builtin/aws-security.yaml +57 -0
- package/rules/builtin/azure-security.yaml +58 -0
- package/rules/builtin/cicd-security.yaml +64 -0
- package/rules/builtin/cloud-storage.yaml +64 -0
- package/rules/builtin/container-registry.yaml +55 -0
- package/rules/builtin/crypto-wallets.yaml +71 -0
- package/rules/builtin/database-nosql.yaml +58 -0
- package/rules/builtin/database-sql.yaml +62 -0
- package/rules/builtin/development-env.yaml +67 -0
- package/rules/builtin/docker.yaml +57 -0
- package/rules/builtin/filesystem.yaml +71 -0
- package/rules/builtin/financial-pci.yaml +61 -0
- package/rules/builtin/gcp-security.yaml +57 -0
- package/rules/builtin/git-operations.yaml +68 -0
- package/rules/builtin/healthcare-hipaa.yaml +64 -0
- package/rules/builtin/kubernetes.yaml +60 -0
- package/rules/builtin/messaging-services.yaml +53 -0
- package/rules/builtin/minimal.yaml +47 -0
- package/rules/builtin/mobile-development.yaml +61 -0
- package/rules/builtin/monitoring.yaml +63 -0
- package/rules/builtin/network-security.yaml +57 -0
- package/rules/builtin/package-managers.yaml +74 -0
- package/rules/builtin/payment-processing.yaml +66 -0
- package/rules/builtin/pii-protection.yaml +48 -0
- package/rules/builtin/production-strict.yaml +55 -0
- package/rules/builtin/secrets-management.yaml +63 -0
- package/rules/builtin/serverless.yaml +74 -0
- package/rules/builtin/ssh-security.yaml +66 -0
- package/rules/builtin/terraform.yaml +51 -0
- package/rules/builtin/web-security.yaml +62 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection Result Cache
|
|
3
|
+
* Simple in-memory cache with TTL-based expiration
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from 'crypto';
|
|
6
|
+
/**
|
|
7
|
+
* Default cache TTL: 5 minutes
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum cache size to prevent memory issues
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_CACHE_SIZE = 10000;
|
|
14
|
+
/**
|
|
15
|
+
* Generate a cache key from tool name and input
|
|
16
|
+
* Uses SHA256 hash of the JSON-serialized input
|
|
17
|
+
*/
|
|
18
|
+
export function generateCacheKey(toolName, toolInput) {
|
|
19
|
+
const data = JSON.stringify({ toolName, toolInput });
|
|
20
|
+
return createHash('sha256').update(data).digest('hex').substring(0, 32);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* In-memory detection cache implementation
|
|
24
|
+
*/
|
|
25
|
+
export class InMemoryCache {
|
|
26
|
+
cache;
|
|
27
|
+
defaultTtl;
|
|
28
|
+
constructor(defaultTtlMs = DEFAULT_CACHE_TTL_MS) {
|
|
29
|
+
this.cache = new Map();
|
|
30
|
+
this.defaultTtl = defaultTtlMs;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get a cached result by key
|
|
34
|
+
* Returns undefined if not found or expired
|
|
35
|
+
*/
|
|
36
|
+
get(key) {
|
|
37
|
+
const entry = this.cache.get(key);
|
|
38
|
+
if (!entry) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
// Check if expired
|
|
42
|
+
if (this.isExpired(entry)) {
|
|
43
|
+
this.cache.delete(key);
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
// Return a copy with cached flag set
|
|
47
|
+
return {
|
|
48
|
+
...entry.value,
|
|
49
|
+
cached: true,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Set a cached result
|
|
54
|
+
* @param key Cache key
|
|
55
|
+
* @param result Analysis result to cache
|
|
56
|
+
* @param ttl Optional TTL in milliseconds (uses default if not provided)
|
|
57
|
+
*/
|
|
58
|
+
set(key, result, ttl) {
|
|
59
|
+
// Evict expired entries if we're at capacity
|
|
60
|
+
if (this.cache.size >= MAX_CACHE_SIZE) {
|
|
61
|
+
this.evictExpired();
|
|
62
|
+
// If still at capacity, evict oldest entries
|
|
63
|
+
if (this.cache.size >= MAX_CACHE_SIZE) {
|
|
64
|
+
this.evictOldest(Math.floor(MAX_CACHE_SIZE * 0.1));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const entry = {
|
|
68
|
+
value: { ...result, cached: false }, // Store original without cached flag
|
|
69
|
+
createdAt: Date.now(),
|
|
70
|
+
ttl: ttl ?? this.defaultTtl,
|
|
71
|
+
};
|
|
72
|
+
this.cache.set(key, entry);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if a key exists and is not expired
|
|
76
|
+
*/
|
|
77
|
+
has(key) {
|
|
78
|
+
const entry = this.cache.get(key);
|
|
79
|
+
if (!entry) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (this.isExpired(entry)) {
|
|
83
|
+
this.cache.delete(key);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Clear all entries
|
|
90
|
+
*/
|
|
91
|
+
clear() {
|
|
92
|
+
this.cache.clear();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Delete a specific entry
|
|
96
|
+
*/
|
|
97
|
+
delete(key) {
|
|
98
|
+
return this.cache.delete(key);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the number of entries (including expired)
|
|
102
|
+
*/
|
|
103
|
+
size() {
|
|
104
|
+
return this.cache.size;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get the number of valid (non-expired) entries
|
|
108
|
+
*/
|
|
109
|
+
validSize() {
|
|
110
|
+
let count = 0;
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
for (const [, entry] of this.cache) {
|
|
113
|
+
if (now - entry.createdAt < entry.ttl) {
|
|
114
|
+
count++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return count;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if an entry is expired
|
|
121
|
+
*/
|
|
122
|
+
isExpired(entry) {
|
|
123
|
+
return Date.now() - entry.createdAt >= entry.ttl;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Evict all expired entries
|
|
127
|
+
*/
|
|
128
|
+
evictExpired() {
|
|
129
|
+
const now = Date.now();
|
|
130
|
+
for (const [key, entry] of this.cache) {
|
|
131
|
+
if (now - entry.createdAt >= entry.ttl) {
|
|
132
|
+
this.cache.delete(key);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Evict the oldest n entries
|
|
138
|
+
*/
|
|
139
|
+
evictOldest(count) {
|
|
140
|
+
const entries = Array.from(this.cache.entries())
|
|
141
|
+
.sort((a, b) => a[1].createdAt - b[1].createdAt);
|
|
142
|
+
for (let i = 0; i < Math.min(count, entries.length); i++) {
|
|
143
|
+
this.cache.delete(entries[i][0]);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a new cache instance
|
|
149
|
+
*/
|
|
150
|
+
export function createCache(defaultTtlMs) {
|
|
151
|
+
return new InMemoryCache(defaultTtlMs);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a no-op cache that doesn't store anything
|
|
155
|
+
* Used when caching is disabled
|
|
156
|
+
*/
|
|
157
|
+
export function createNoOpCache() {
|
|
158
|
+
return {
|
|
159
|
+
get: () => undefined,
|
|
160
|
+
set: () => { },
|
|
161
|
+
has: () => false,
|
|
162
|
+
clear: () => { },
|
|
163
|
+
delete: () => false,
|
|
164
|
+
size: () => 0,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/engine/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Detection Engine
|
|
3
|
+
* Re-exports for clean imports
|
|
4
|
+
*/
|
|
5
|
+
export type { ThreatCategory, ToolCallContext, Detection, AnalysisResult, AnalysisAction, CacheEntry, DetectionCache, AnalyzerConfig, Analyzer, } from './types.js';
|
|
6
|
+
export { SEVERITY_WEIGHTS, compareSeverity, } from './types.js';
|
|
7
|
+
export { DEFAULT_CACHE_TTL_MS, MAX_CACHE_SIZE, generateCacheKey, InMemoryCache, createCache, createNoOpCache, } from './cache.js';
|
|
8
|
+
export { HybridAnalyzer, createAnalyzer, createDefaultAnalyzer, } from './analyzer.js';
|
|
9
|
+
export type { ConversationMessage, LLMAnalysisRequest, LLMAnalysisResult, LLMClient, OpenClawAPI, LLMClientConfig, } from './llm-client.js';
|
|
10
|
+
export { DEFAULT_LLM_TIMEOUT_MS, DEFAULT_LLM_CACHE_TTL_MS, MAX_LLM_CACHE_SIZE, LLMResponseCache, buildAnalysisPrompt, parseAnalysisResponse, OpenClawLLMClient, MockLLMClient, createLLMClient, createMockLLMClient, createUnavailableLLMClient, } from './llm-client.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Detection Engine
|
|
3
|
+
* Re-exports for clean imports
|
|
4
|
+
*/
|
|
5
|
+
export { SEVERITY_WEIGHTS, compareSeverity, } from './types.js';
|
|
6
|
+
// Cache
|
|
7
|
+
export { DEFAULT_CACHE_TTL_MS, MAX_CACHE_SIZE, generateCacheKey, InMemoryCache, createCache, createNoOpCache, } from './cache.js';
|
|
8
|
+
// Analyzer
|
|
9
|
+
export { HybridAnalyzer, createAnalyzer, createDefaultAnalyzer, } from './analyzer.js';
|
|
10
|
+
export { DEFAULT_LLM_TIMEOUT_MS, DEFAULT_LLM_CACHE_TTL_MS, MAX_LLM_CACHE_SIZE, LLMResponseCache, buildAnalysisPrompt, parseAnalysisResponse, OpenClawLLMClient, MockLLMClient, createLLMClient, createMockLLMClient, createUnavailableLLMClient, } from './llm-client.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,EACL,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,QAAQ;AACR,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,WAAW;AACX,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAYvB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client for analyzing ambiguous security detections
|
|
3
|
+
*
|
|
4
|
+
* This module provides an LLM client that analyzes ambiguous detections
|
|
5
|
+
* to determine if they're true threats. Used when the HybridAnalyzer
|
|
6
|
+
* sets requiresLLM = true for cases with ambiguous confidence (0.5-0.8).
|
|
7
|
+
*/
|
|
8
|
+
import type { LLMConfig } from '../config/index.js';
|
|
9
|
+
import type { Detection, ToolCallContext } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* LLM analysis result
|
|
12
|
+
*/
|
|
13
|
+
export interface LLMAnalysisResult {
|
|
14
|
+
/** Determination of the threat level */
|
|
15
|
+
determination: 'threat' | 'safe' | 'uncertain';
|
|
16
|
+
/** Confidence in the determination (0-1) */
|
|
17
|
+
confidence: number;
|
|
18
|
+
/** Reasoning behind the determination */
|
|
19
|
+
reasoning: string;
|
|
20
|
+
/** Suggested action based on analysis */
|
|
21
|
+
suggestedAction: 'block' | 'confirm' | 'allow';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interface for LLM clients
|
|
25
|
+
*/
|
|
26
|
+
export interface LLMClient {
|
|
27
|
+
/** Analyze a detection and determine if it's a real threat */
|
|
28
|
+
analyze(request: LLMAnalysisRequest): Promise<LLMAnalysisResult>;
|
|
29
|
+
/** Check if the LLM client is available and configured */
|
|
30
|
+
isAvailable(): boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Conversation message for context
|
|
34
|
+
*/
|
|
35
|
+
export interface ConversationMessage {
|
|
36
|
+
role: 'user' | 'assistant' | 'system';
|
|
37
|
+
content: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Request to analyze a detection with LLM
|
|
41
|
+
*/
|
|
42
|
+
export interface LLMAnalysisRequest {
|
|
43
|
+
/** The detection to analyze */
|
|
44
|
+
detection: Detection;
|
|
45
|
+
/** Context of the tool call that triggered the detection */
|
|
46
|
+
context: ToolCallContext;
|
|
47
|
+
/** Optional conversation history for additional context */
|
|
48
|
+
conversationHistory?: ConversationMessage[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Optional OpenClaw API interface (for real LLM integration)
|
|
52
|
+
*/
|
|
53
|
+
export interface OpenClawAPI {
|
|
54
|
+
/** Send a prompt to the LLM and get a response */
|
|
55
|
+
complete(prompt: string, options?: {
|
|
56
|
+
model?: string | null;
|
|
57
|
+
timeout?: number;
|
|
58
|
+
}): Promise<string>;
|
|
59
|
+
/** Check if the API is available */
|
|
60
|
+
isAvailable(): boolean;
|
|
61
|
+
}
|
|
62
|
+
/** Default timeout for LLM requests (30 seconds) */
|
|
63
|
+
export declare const DEFAULT_LLM_TIMEOUT_MS = 30000;
|
|
64
|
+
/** Default TTL for LLM response cache (5 minutes - longer than detection cache) */
|
|
65
|
+
export declare const DEFAULT_LLM_CACHE_TTL_MS: number;
|
|
66
|
+
/** Maximum cache size for LLM responses */
|
|
67
|
+
export declare const MAX_LLM_CACHE_SIZE = 500;
|
|
68
|
+
/**
|
|
69
|
+
* Generic in-memory cache for LLM responses
|
|
70
|
+
*/
|
|
71
|
+
export declare class LLMResponseCache {
|
|
72
|
+
private cache;
|
|
73
|
+
private defaultTtl;
|
|
74
|
+
constructor(defaultTtlMs?: number);
|
|
75
|
+
/**
|
|
76
|
+
* Generate a cache key from the request
|
|
77
|
+
*/
|
|
78
|
+
generateKey(request: LLMAnalysisRequest): string;
|
|
79
|
+
/**
|
|
80
|
+
* Get a cached result
|
|
81
|
+
*/
|
|
82
|
+
get(key: string): LLMAnalysisResult | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Set a cached result
|
|
85
|
+
*/
|
|
86
|
+
set(key: string, result: LLMAnalysisResult, ttl?: number): void;
|
|
87
|
+
/**
|
|
88
|
+
* Check if a key exists and is not expired
|
|
89
|
+
*/
|
|
90
|
+
has(key: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Clear all entries
|
|
93
|
+
*/
|
|
94
|
+
clear(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get cache size
|
|
97
|
+
*/
|
|
98
|
+
size(): number;
|
|
99
|
+
private isExpired;
|
|
100
|
+
private evictExpired;
|
|
101
|
+
private evictOldest;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Build a prompt for LLM analysis of a security detection
|
|
105
|
+
*/
|
|
106
|
+
export declare function buildAnalysisPrompt(request: LLMAnalysisRequest): string;
|
|
107
|
+
/**
|
|
108
|
+
* Parse LLM response to extract structured result
|
|
109
|
+
*/
|
|
110
|
+
export declare function parseAnalysisResponse(response: string): LLMAnalysisResult;
|
|
111
|
+
/**
|
|
112
|
+
* Configuration for the LLM client
|
|
113
|
+
*/
|
|
114
|
+
export interface LLMClientConfig {
|
|
115
|
+
/** LLM configuration from ClawsecConfig */
|
|
116
|
+
llmConfig: LLMConfig;
|
|
117
|
+
/** Optional timeout in milliseconds */
|
|
118
|
+
timeoutMs?: number;
|
|
119
|
+
/** Optional cache TTL in milliseconds */
|
|
120
|
+
cacheTtlMs?: number;
|
|
121
|
+
/** Whether to enable caching */
|
|
122
|
+
enableCache?: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Real LLM client that uses OpenClaw API
|
|
126
|
+
*/
|
|
127
|
+
export declare class OpenClawLLMClient implements LLMClient {
|
|
128
|
+
private api;
|
|
129
|
+
private model;
|
|
130
|
+
private timeoutMs;
|
|
131
|
+
private cache;
|
|
132
|
+
private cacheTtlMs;
|
|
133
|
+
constructor(api: OpenClawAPI, config: LLMClientConfig);
|
|
134
|
+
isAvailable(): boolean;
|
|
135
|
+
analyze(request: LLMAnalysisRequest): Promise<LLMAnalysisResult>;
|
|
136
|
+
/**
|
|
137
|
+
* Clear the response cache
|
|
138
|
+
*/
|
|
139
|
+
clearCache(): void;
|
|
140
|
+
/**
|
|
141
|
+
* Get cache statistics
|
|
142
|
+
*/
|
|
143
|
+
getCacheStats(): {
|
|
144
|
+
size: number;
|
|
145
|
+
enabled: boolean;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Mock LLM client for testing
|
|
150
|
+
* Provides deterministic responses based on detection characteristics
|
|
151
|
+
*/
|
|
152
|
+
export declare class MockLLMClient implements LLMClient {
|
|
153
|
+
private available;
|
|
154
|
+
private responseDelay;
|
|
155
|
+
private cache;
|
|
156
|
+
private customResponses;
|
|
157
|
+
constructor(options?: {
|
|
158
|
+
available?: boolean;
|
|
159
|
+
responseDelay?: number;
|
|
160
|
+
enableCache?: boolean;
|
|
161
|
+
cacheTtlMs?: number;
|
|
162
|
+
});
|
|
163
|
+
isAvailable(): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Set availability for testing
|
|
166
|
+
*/
|
|
167
|
+
setAvailable(available: boolean): void;
|
|
168
|
+
/**
|
|
169
|
+
* Set a custom response for a specific category
|
|
170
|
+
*/
|
|
171
|
+
setCustomResponse(category: string, response: LLMAnalysisResult): void;
|
|
172
|
+
analyze(request: LLMAnalysisRequest): Promise<LLMAnalysisResult>;
|
|
173
|
+
/**
|
|
174
|
+
* Generate a mock response based on detection characteristics
|
|
175
|
+
*/
|
|
176
|
+
private generateMockResponse;
|
|
177
|
+
/**
|
|
178
|
+
* Clear the response cache
|
|
179
|
+
*/
|
|
180
|
+
clearCache(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Get cache statistics
|
|
183
|
+
*/
|
|
184
|
+
getCacheStats(): {
|
|
185
|
+
size: number;
|
|
186
|
+
enabled: boolean;
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Create an LLM client
|
|
191
|
+
*
|
|
192
|
+
* @param config - LLM client configuration
|
|
193
|
+
* @param api - Optional OpenClaw API instance (if available, creates real client)
|
|
194
|
+
* @returns LLM client instance
|
|
195
|
+
*/
|
|
196
|
+
export declare function createLLMClient(config: LLMClientConfig, api?: OpenClawAPI): LLMClient;
|
|
197
|
+
/**
|
|
198
|
+
* Create a mock LLM client for testing
|
|
199
|
+
*/
|
|
200
|
+
export declare function createMockLLMClient(options?: {
|
|
201
|
+
available?: boolean;
|
|
202
|
+
responseDelay?: number;
|
|
203
|
+
enableCache?: boolean;
|
|
204
|
+
cacheTtlMs?: number;
|
|
205
|
+
}): MockLLMClient;
|
|
206
|
+
/**
|
|
207
|
+
* Create an unavailable LLM client (always returns uncertain)
|
|
208
|
+
*/
|
|
209
|
+
export declare function createUnavailableLLMClient(): LLMClient;
|
|
210
|
+
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../../src/engine/llm-client.ts"],"names":[],"mappings":"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"}
|