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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Command
|
|
3
|
+
* Tests a specific rule against sample input
|
|
4
|
+
*/
|
|
5
|
+
import { loadConfig } from '../../config/index.js';
|
|
6
|
+
import { createPurchaseDetector } from '../../detectors/purchase/index.js';
|
|
7
|
+
import { createWebsiteDetector } from '../../detectors/website/index.js';
|
|
8
|
+
import { createDestructiveDetector } from '../../detectors/destructive/index.js';
|
|
9
|
+
import { createSecretsDetector } from '../../detectors/secrets/index.js';
|
|
10
|
+
import { createExfiltrationDetector } from '../../detectors/exfiltration/index.js';
|
|
11
|
+
/** Valid rule names */
|
|
12
|
+
const VALID_RULES = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a string is a valid rule name
|
|
15
|
+
*/
|
|
16
|
+
function isValidRule(rule) {
|
|
17
|
+
return VALID_RULES.includes(rule);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Execute the test command
|
|
21
|
+
*
|
|
22
|
+
* @param ruleName - Name of the rule to test
|
|
23
|
+
* @param input - JSON input object to test
|
|
24
|
+
* @param options - CLI options including optional config path
|
|
25
|
+
* @returns Test result showing detection status
|
|
26
|
+
*/
|
|
27
|
+
export async function testCommand(ruleName, input, options = {}) {
|
|
28
|
+
// Validate rule name
|
|
29
|
+
if (!isValidRule(ruleName)) {
|
|
30
|
+
throw new Error(`Invalid rule: "${ruleName}". Valid rules are: ${VALID_RULES.join(', ')}`);
|
|
31
|
+
}
|
|
32
|
+
// Load config
|
|
33
|
+
const config = loadConfig(options.config);
|
|
34
|
+
// Create detection context from input
|
|
35
|
+
const context = {
|
|
36
|
+
toolName: input.toolName || 'test',
|
|
37
|
+
toolInput: input,
|
|
38
|
+
url: input.url,
|
|
39
|
+
toolOutput: input.toolOutput,
|
|
40
|
+
};
|
|
41
|
+
// Run the appropriate detector
|
|
42
|
+
let result;
|
|
43
|
+
switch (ruleName) {
|
|
44
|
+
case 'purchase': {
|
|
45
|
+
const detector = createPurchaseDetector(config.rules.purchase);
|
|
46
|
+
const detection = await detector.detect(context);
|
|
47
|
+
result = {
|
|
48
|
+
detected: detection.detected,
|
|
49
|
+
category: detection.detected ? detection.category : undefined,
|
|
50
|
+
severity: detection.detected ? detection.severity : undefined,
|
|
51
|
+
confidence: detection.detected ? detection.confidence : undefined,
|
|
52
|
+
reason: detection.detected ? detection.reason : undefined,
|
|
53
|
+
};
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case 'website': {
|
|
57
|
+
const detector = createWebsiteDetector(config.rules.website);
|
|
58
|
+
const detection = await detector.detect(context);
|
|
59
|
+
result = {
|
|
60
|
+
detected: detection.detected,
|
|
61
|
+
category: detection.detected ? detection.category : undefined,
|
|
62
|
+
severity: detection.detected ? detection.severity : undefined,
|
|
63
|
+
confidence: detection.detected ? detection.confidence : undefined,
|
|
64
|
+
reason: detection.detected ? detection.reason : undefined,
|
|
65
|
+
};
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'destructive': {
|
|
69
|
+
const detector = createDestructiveDetector(config.rules.destructive);
|
|
70
|
+
const detection = await detector.detect(context);
|
|
71
|
+
result = {
|
|
72
|
+
detected: detection.detected,
|
|
73
|
+
category: detection.detected ? detection.category : undefined,
|
|
74
|
+
severity: detection.detected ? detection.severity : undefined,
|
|
75
|
+
confidence: detection.detected ? detection.confidence : undefined,
|
|
76
|
+
reason: detection.detected ? detection.reason : undefined,
|
|
77
|
+
};
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'secrets': {
|
|
81
|
+
const detector = createSecretsDetector(config.rules.secrets);
|
|
82
|
+
const detection = await detector.detect(context);
|
|
83
|
+
result = {
|
|
84
|
+
detected: detection.detected,
|
|
85
|
+
category: detection.detected ? detection.category : undefined,
|
|
86
|
+
severity: detection.detected ? detection.severity : undefined,
|
|
87
|
+
confidence: detection.detected ? detection.confidence : undefined,
|
|
88
|
+
reason: detection.detected ? detection.reason : undefined,
|
|
89
|
+
};
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'exfiltration': {
|
|
93
|
+
const detector = createExfiltrationDetector(config.rules.exfiltration);
|
|
94
|
+
const detection = await detector.detect(context);
|
|
95
|
+
result = {
|
|
96
|
+
detected: detection.detected,
|
|
97
|
+
category: detection.detected ? detection.category : undefined,
|
|
98
|
+
severity: detection.detected ? detection.severity : undefined,
|
|
99
|
+
confidence: detection.detected ? detection.confidence : undefined,
|
|
100
|
+
reason: detection.detected ? detection.reason : undefined,
|
|
101
|
+
};
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
// Should never reach here due to isValidRule check
|
|
106
|
+
throw new Error(`Unknown rule: ${ruleName}`);
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Format test result for console output
|
|
112
|
+
*
|
|
113
|
+
* @param result - Test result to format
|
|
114
|
+
* @param ruleName - Name of the rule that was tested
|
|
115
|
+
* @returns Formatted string for display
|
|
116
|
+
*/
|
|
117
|
+
export function formatTestResult(result, ruleName) {
|
|
118
|
+
const lines = [];
|
|
119
|
+
lines.push(`=== Test Result: ${ruleName} ===`);
|
|
120
|
+
lines.push('');
|
|
121
|
+
if (result.detected) {
|
|
122
|
+
lines.push('Status: DETECTED');
|
|
123
|
+
lines.push(`Category: ${result.category}`);
|
|
124
|
+
lines.push(`Severity: ${result.severity}`);
|
|
125
|
+
lines.push(`Confidence: ${((result.confidence || 0) * 100).toFixed(1)}%`);
|
|
126
|
+
lines.push(`Reason: ${result.reason}`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
lines.push('Status: NOT DETECTED');
|
|
130
|
+
lines.push('No threats found for this input.');
|
|
131
|
+
}
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../src/cli/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Command Types
|
|
3
|
+
* Type definitions for CLI commands and results
|
|
4
|
+
*/
|
|
5
|
+
import type { ThreatCategory } from '../../engine/index.js';
|
|
6
|
+
import type { Severity } from '../../config/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* CLI options for all commands
|
|
9
|
+
*/
|
|
10
|
+
export interface CLIOptions {
|
|
11
|
+
/** Path to clawsec.yaml config file */
|
|
12
|
+
config?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result of the status command
|
|
16
|
+
*/
|
|
17
|
+
export interface StatusResult {
|
|
18
|
+
/** Path to the config file */
|
|
19
|
+
configPath: string;
|
|
20
|
+
/** Whether the config is valid */
|
|
21
|
+
configValid: boolean;
|
|
22
|
+
/** List of enabled rule names */
|
|
23
|
+
enabledRules: string[];
|
|
24
|
+
/** List of disabled rule names */
|
|
25
|
+
disabledRules: string[];
|
|
26
|
+
/** Any issues found with the configuration */
|
|
27
|
+
issues: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of the test command
|
|
31
|
+
*/
|
|
32
|
+
export interface TestResult {
|
|
33
|
+
/** Whether a threat was detected */
|
|
34
|
+
detected: boolean;
|
|
35
|
+
/** Category of threat detected (if any) */
|
|
36
|
+
category?: ThreatCategory;
|
|
37
|
+
/** Severity level */
|
|
38
|
+
severity?: Severity;
|
|
39
|
+
/** Confidence score 0-1 */
|
|
40
|
+
confidence?: number;
|
|
41
|
+
/** Reason for detection */
|
|
42
|
+
reason?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Audit log entry for tracking detections
|
|
46
|
+
*/
|
|
47
|
+
export interface AuditEntry {
|
|
48
|
+
/** Timestamp of the detection */
|
|
49
|
+
timestamp: Date;
|
|
50
|
+
/** Tool that was called */
|
|
51
|
+
toolName: string;
|
|
52
|
+
/** Category of threat detected */
|
|
53
|
+
category: ThreatCategory;
|
|
54
|
+
/** Severity level */
|
|
55
|
+
severity: Severity;
|
|
56
|
+
/** Action taken (block, warn, etc.) */
|
|
57
|
+
action: string;
|
|
58
|
+
/** Reason for the detection */
|
|
59
|
+
reason: string;
|
|
60
|
+
/** Additional metadata */
|
|
61
|
+
metadata?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Options for the audit command
|
|
65
|
+
*/
|
|
66
|
+
export interface AuditOptions {
|
|
67
|
+
/** Maximum number of entries to show */
|
|
68
|
+
limit?: number;
|
|
69
|
+
/** Filter by category */
|
|
70
|
+
category?: ThreatCategory;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Result of the audit command
|
|
74
|
+
*/
|
|
75
|
+
export interface AuditResult {
|
|
76
|
+
/** Audit entries matching the query */
|
|
77
|
+
entries: AuditEntry[];
|
|
78
|
+
/** Total entries in the log */
|
|
79
|
+
totalEntries: number;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,qBAAqB;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawsec CLI Entry Point
|
|
3
|
+
* Command line interface for interacting with Clawsec
|
|
4
|
+
*/
|
|
5
|
+
export * from './commands/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Run the CLI
|
|
8
|
+
*
|
|
9
|
+
* @param args - Command line arguments (without node and script path)
|
|
10
|
+
* @returns Exit code (0 for success, 1 for error)
|
|
11
|
+
*/
|
|
12
|
+
export declare function runCLI(args: string[]): Promise<number>;
|
|
13
|
+
/**
|
|
14
|
+
* Main entry point when run directly
|
|
15
|
+
*/
|
|
16
|
+
export declare function main(): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,cAAc,qBAAqB,CAAC;AAyHpC;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0J5D;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAK1C"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawsec CLI Entry Point
|
|
3
|
+
* Command line interface for interacting with Clawsec
|
|
4
|
+
*/
|
|
5
|
+
import { statusCommand, formatStatusResult, testCommand, formatTestResult, auditCommand, formatAuditResult, feedbackCommand, formatFeedbackResult, } from './commands/index.js';
|
|
6
|
+
// Re-export commands and types
|
|
7
|
+
export * from './commands/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Show CLI help message
|
|
10
|
+
*/
|
|
11
|
+
function showHelp() {
|
|
12
|
+
console.log(`
|
|
13
|
+
Clawsec CLI - Security plugin for OpenClaw.ai
|
|
14
|
+
|
|
15
|
+
Usage: clawsec <command> [options]
|
|
16
|
+
|
|
17
|
+
Commands:
|
|
18
|
+
status Show configuration status and enabled rules
|
|
19
|
+
test Test a rule against sample input
|
|
20
|
+
audit View audit log of detections
|
|
21
|
+
feedback Submit or view feedback on detection accuracy
|
|
22
|
+
|
|
23
|
+
Options:
|
|
24
|
+
--config <path> Path to clawsec.yaml config file
|
|
25
|
+
--help, -h Show this help message
|
|
26
|
+
|
|
27
|
+
Command: status
|
|
28
|
+
Check configuration status and show enabled/disabled rules.
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
clawsec status
|
|
32
|
+
clawsec status --config ./my-config.yaml
|
|
33
|
+
|
|
34
|
+
Command: test
|
|
35
|
+
Test a specific rule against JSON input.
|
|
36
|
+
|
|
37
|
+
Options:
|
|
38
|
+
--rule <name> Rule to test (purchase, website, destructive, secrets, exfiltration)
|
|
39
|
+
--input <json> JSON input to test against
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
clawsec test --rule purchase --input '{"url":"https://amazon.com/checkout"}'
|
|
43
|
+
clawsec test --rule destructive --input '{"command":"rm -rf /"}'
|
|
44
|
+
clawsec test --rule secrets --input '{"content":"api_key=sk-abc123"}'
|
|
45
|
+
|
|
46
|
+
Command: audit
|
|
47
|
+
View the audit log of recent detections.
|
|
48
|
+
|
|
49
|
+
Options:
|
|
50
|
+
--limit <n> Maximum number of entries to show (default: 10)
|
|
51
|
+
--category <cat> Filter by category (purchase, website, destructive, secrets, exfiltration)
|
|
52
|
+
|
|
53
|
+
Examples:
|
|
54
|
+
clawsec audit
|
|
55
|
+
clawsec audit --limit 20
|
|
56
|
+
clawsec audit --category secrets
|
|
57
|
+
|
|
58
|
+
Command: feedback
|
|
59
|
+
Submit or view feedback on detection accuracy.
|
|
60
|
+
|
|
61
|
+
Options:
|
|
62
|
+
--false-positive <id> Report a false positive (blocked but shouldn't have been)
|
|
63
|
+
--false-negative <desc> Report a false negative (missed threat)
|
|
64
|
+
--category <cat> Suggested category for false negative
|
|
65
|
+
--list List all feedback entries
|
|
66
|
+
--type <type> Filter list by type (false-positive, false-negative)
|
|
67
|
+
--show <id> Show details of a specific feedback entry
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
70
|
+
clawsec feedback --false-positive 1
|
|
71
|
+
clawsec feedback --false-negative "API key leaked" --category secrets
|
|
72
|
+
clawsec feedback --list
|
|
73
|
+
clawsec feedback --list --type false-positive
|
|
74
|
+
clawsec feedback --show abc123
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
function parseArgs(args) {
|
|
78
|
+
const result = {
|
|
79
|
+
command: null,
|
|
80
|
+
options: {},
|
|
81
|
+
};
|
|
82
|
+
let i = 0;
|
|
83
|
+
// First non-option argument is the command
|
|
84
|
+
while (i < args.length) {
|
|
85
|
+
const arg = args[i];
|
|
86
|
+
if (arg.startsWith('--')) {
|
|
87
|
+
const key = arg.slice(2);
|
|
88
|
+
const nextArg = args[i + 1];
|
|
89
|
+
// Check if next arg is a value or another option
|
|
90
|
+
if (nextArg && !nextArg.startsWith('--') && !nextArg.startsWith('-')) {
|
|
91
|
+
result.options[key] = nextArg;
|
|
92
|
+
i += 2;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
result.options[key] = true;
|
|
96
|
+
i++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (arg.startsWith('-')) {
|
|
100
|
+
// Short option
|
|
101
|
+
const key = arg.slice(1);
|
|
102
|
+
result.options[key] = true;
|
|
103
|
+
i++;
|
|
104
|
+
}
|
|
105
|
+
else if (!result.command) {
|
|
106
|
+
result.command = arg;
|
|
107
|
+
i++;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Skip unknown positional arguments
|
|
111
|
+
i++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Run the CLI
|
|
118
|
+
*
|
|
119
|
+
* @param args - Command line arguments (without node and script path)
|
|
120
|
+
* @returns Exit code (0 for success, 1 for error)
|
|
121
|
+
*/
|
|
122
|
+
export async function runCLI(args) {
|
|
123
|
+
const parsed = parseArgs(args);
|
|
124
|
+
// Check for help flag
|
|
125
|
+
if (parsed.options.help || parsed.options.h) {
|
|
126
|
+
showHelp();
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
// No command provided
|
|
130
|
+
if (!parsed.command) {
|
|
131
|
+
console.error('Error: No command specified.\n');
|
|
132
|
+
showHelp();
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
// Build CLI options
|
|
136
|
+
const cliOptions = {};
|
|
137
|
+
if (typeof parsed.options.config === 'string') {
|
|
138
|
+
cliOptions.config = parsed.options.config;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
switch (parsed.command) {
|
|
142
|
+
case 'status': {
|
|
143
|
+
const result = await statusCommand(cliOptions);
|
|
144
|
+
console.log(formatStatusResult(result));
|
|
145
|
+
return result.configValid && result.issues.length === 0 ? 0 : 1;
|
|
146
|
+
}
|
|
147
|
+
case 'test': {
|
|
148
|
+
// Validate required options
|
|
149
|
+
const ruleName = parsed.options.rule;
|
|
150
|
+
const inputJson = parsed.options.input;
|
|
151
|
+
if (typeof ruleName !== 'string') {
|
|
152
|
+
console.error('Error: --rule is required for test command');
|
|
153
|
+
console.error('Example: clawsec test --rule purchase --input \'{"url":"https://example.com"}\'');
|
|
154
|
+
return 1;
|
|
155
|
+
}
|
|
156
|
+
if (typeof inputJson !== 'string') {
|
|
157
|
+
console.error('Error: --input is required for test command');
|
|
158
|
+
console.error('Example: clawsec test --rule purchase --input \'{"url":"https://example.com"}\'');
|
|
159
|
+
return 1;
|
|
160
|
+
}
|
|
161
|
+
// Parse JSON input
|
|
162
|
+
let input;
|
|
163
|
+
try {
|
|
164
|
+
input = JSON.parse(inputJson);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
console.error('Error: Invalid JSON input');
|
|
168
|
+
console.error(`Received: ${inputJson}`);
|
|
169
|
+
return 1;
|
|
170
|
+
}
|
|
171
|
+
const result = await testCommand(ruleName, input, cliOptions);
|
|
172
|
+
console.log(formatTestResult(result, ruleName));
|
|
173
|
+
return result.detected ? 1 : 0;
|
|
174
|
+
}
|
|
175
|
+
case 'audit': {
|
|
176
|
+
const auditOptions = {};
|
|
177
|
+
// Parse limit
|
|
178
|
+
if (typeof parsed.options.limit === 'string') {
|
|
179
|
+
const limit = parseInt(parsed.options.limit, 10);
|
|
180
|
+
if (isNaN(limit) || limit < 1) {
|
|
181
|
+
console.error('Error: --limit must be a positive integer');
|
|
182
|
+
return 1;
|
|
183
|
+
}
|
|
184
|
+
auditOptions.limit = limit;
|
|
185
|
+
}
|
|
186
|
+
// Parse category
|
|
187
|
+
if (typeof parsed.options.category === 'string') {
|
|
188
|
+
const validCategories = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
|
|
189
|
+
if (!validCategories.includes(parsed.options.category)) {
|
|
190
|
+
console.error(`Error: Invalid category "${parsed.options.category}"`);
|
|
191
|
+
console.error(`Valid categories: ${validCategories.join(', ')}`);
|
|
192
|
+
return 1;
|
|
193
|
+
}
|
|
194
|
+
auditOptions.category = parsed.options.category;
|
|
195
|
+
}
|
|
196
|
+
const result = await auditCommand(auditOptions);
|
|
197
|
+
console.log(formatAuditResult(result, auditOptions));
|
|
198
|
+
return 0;
|
|
199
|
+
}
|
|
200
|
+
case 'feedback': {
|
|
201
|
+
const feedbackOptions = {};
|
|
202
|
+
// Check for list operation
|
|
203
|
+
if (parsed.options.list === true) {
|
|
204
|
+
feedbackOptions.list = true;
|
|
205
|
+
}
|
|
206
|
+
// Check for show operation
|
|
207
|
+
if (typeof parsed.options.show === 'string') {
|
|
208
|
+
feedbackOptions.show = parsed.options.show;
|
|
209
|
+
}
|
|
210
|
+
// Check for false positive
|
|
211
|
+
if (typeof parsed.options['false-positive'] === 'string') {
|
|
212
|
+
feedbackOptions.falsePositive = parsed.options['false-positive'];
|
|
213
|
+
}
|
|
214
|
+
// Check for false negative
|
|
215
|
+
if (typeof parsed.options['false-negative'] === 'string') {
|
|
216
|
+
feedbackOptions.falseNegative = parsed.options['false-negative'];
|
|
217
|
+
}
|
|
218
|
+
// Parse type filter
|
|
219
|
+
if (typeof parsed.options.type === 'string') {
|
|
220
|
+
const validTypes = ['false-positive', 'false-negative'];
|
|
221
|
+
if (!validTypes.includes(parsed.options.type)) {
|
|
222
|
+
console.error(`Error: Invalid type "${parsed.options.type}"`);
|
|
223
|
+
console.error(`Valid types: ${validTypes.join(', ')}`);
|
|
224
|
+
return 1;
|
|
225
|
+
}
|
|
226
|
+
feedbackOptions.type = parsed.options.type;
|
|
227
|
+
}
|
|
228
|
+
// Parse category for false negative
|
|
229
|
+
if (typeof parsed.options.category === 'string') {
|
|
230
|
+
const validCategories = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
|
|
231
|
+
if (!validCategories.includes(parsed.options.category)) {
|
|
232
|
+
console.error(`Error: Invalid category "${parsed.options.category}"`);
|
|
233
|
+
console.error(`Valid categories: ${validCategories.join(', ')}`);
|
|
234
|
+
return 1;
|
|
235
|
+
}
|
|
236
|
+
feedbackOptions.category = parsed.options.category;
|
|
237
|
+
}
|
|
238
|
+
const result = await feedbackCommand(feedbackOptions);
|
|
239
|
+
console.log(formatFeedbackResult(result, feedbackOptions.show !== undefined));
|
|
240
|
+
return result.success ? 0 : 1;
|
|
241
|
+
}
|
|
242
|
+
default:
|
|
243
|
+
console.error(`Error: Unknown command "${parsed.command}"`);
|
|
244
|
+
showHelp();
|
|
245
|
+
return 1;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error instanceof Error) {
|
|
250
|
+
console.error(`Error: ${error.message}`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
console.error('An unknown error occurred');
|
|
254
|
+
}
|
|
255
|
+
return 1;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Main entry point when run directly
|
|
260
|
+
*/
|
|
261
|
+
export async function main() {
|
|
262
|
+
// Remove 'node' and script path from arguments
|
|
263
|
+
const args = process.argv.slice(2);
|
|
264
|
+
const exitCode = await runCLI(args);
|
|
265
|
+
process.exit(exitCode);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawsec Default Configuration
|
|
3
|
+
* Sensible default values for the security plugin
|
|
4
|
+
*/
|
|
5
|
+
import type { ClawsecConfig } from './schema.js';
|
|
6
|
+
/**
|
|
7
|
+
* Default configuration for Clawsec
|
|
8
|
+
*
|
|
9
|
+
* All features enabled by default with conservative settings:
|
|
10
|
+
* - Purchases are blocked by default
|
|
11
|
+
* - Destructive commands require confirmation
|
|
12
|
+
* - Secrets and exfiltration are blocked
|
|
13
|
+
*/
|
|
14
|
+
export declare const defaultConfig: ClawsecConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a deep clone of the default configuration
|
|
17
|
+
* to prevent accidental mutations
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDefaultConfig(): ClawsecConfig;
|
|
20
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,aA+G3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD"}
|