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,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Command
|
|
3
|
+
* View and manage the audit log of detections
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* In-memory audit log storage
|
|
7
|
+
* In a production system, this would be persisted to disk or a database
|
|
8
|
+
*/
|
|
9
|
+
const auditLog = [];
|
|
10
|
+
/**
|
|
11
|
+
* Add an entry to the audit log
|
|
12
|
+
*
|
|
13
|
+
* @param entry - The audit entry to add
|
|
14
|
+
*/
|
|
15
|
+
export function addAuditEntry(entry) {
|
|
16
|
+
auditLog.push({
|
|
17
|
+
...entry,
|
|
18
|
+
timestamp: new Date(),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Clear all audit log entries
|
|
23
|
+
* Primarily used for testing
|
|
24
|
+
*/
|
|
25
|
+
export function clearAuditLog() {
|
|
26
|
+
auditLog.length = 0;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the raw audit log (for testing)
|
|
30
|
+
*/
|
|
31
|
+
export function getAuditLog() {
|
|
32
|
+
return auditLog;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Execute the audit command
|
|
36
|
+
*
|
|
37
|
+
* @param options - Audit options for filtering and limiting results
|
|
38
|
+
* @returns Audit result with filtered entries
|
|
39
|
+
*/
|
|
40
|
+
export async function auditCommand(options = {}) {
|
|
41
|
+
let entries = [...auditLog];
|
|
42
|
+
// Filter by category if specified
|
|
43
|
+
if (options.category) {
|
|
44
|
+
entries = entries.filter(entry => entry.category === options.category);
|
|
45
|
+
}
|
|
46
|
+
// Sort by timestamp (newest first)
|
|
47
|
+
entries.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
48
|
+
// Apply limit if specified
|
|
49
|
+
const limit = options.limit ?? 10;
|
|
50
|
+
const limitedEntries = entries.slice(0, limit);
|
|
51
|
+
return {
|
|
52
|
+
entries: limitedEntries,
|
|
53
|
+
totalEntries: auditLog.length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format a single audit entry for display
|
|
58
|
+
*/
|
|
59
|
+
function formatEntry(entry, index) {
|
|
60
|
+
const timestamp = entry.timestamp.toISOString().replace('T', ' ').substring(0, 19);
|
|
61
|
+
const severityColors = {
|
|
62
|
+
critical: 'CRITICAL',
|
|
63
|
+
high: 'HIGH',
|
|
64
|
+
medium: 'MEDIUM',
|
|
65
|
+
low: 'LOW',
|
|
66
|
+
};
|
|
67
|
+
const lines = [];
|
|
68
|
+
lines.push(`[${index + 1}] ${timestamp}`);
|
|
69
|
+
lines.push(` Tool: ${entry.toolName}`);
|
|
70
|
+
lines.push(` Category: ${entry.category} | Severity: ${severityColors[entry.severity]} | Action: ${entry.action}`);
|
|
71
|
+
lines.push(` Reason: ${entry.reason}`);
|
|
72
|
+
return lines.join('\n');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Format audit result for console output
|
|
76
|
+
*
|
|
77
|
+
* @param result - Audit result to format
|
|
78
|
+
* @param options - The options used for the query
|
|
79
|
+
* @returns Formatted string for display
|
|
80
|
+
*/
|
|
81
|
+
export function formatAuditResult(result, options = {}) {
|
|
82
|
+
const lines = [];
|
|
83
|
+
lines.push('=== Audit Log ===');
|
|
84
|
+
lines.push('');
|
|
85
|
+
if (options.category) {
|
|
86
|
+
lines.push(`Filter: category=${options.category}`);
|
|
87
|
+
}
|
|
88
|
+
lines.push(`Showing ${result.entries.length} of ${result.totalEntries} entries`);
|
|
89
|
+
lines.push('');
|
|
90
|
+
if (result.entries.length === 0) {
|
|
91
|
+
lines.push('No audit entries found.');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
for (let i = 0; i < result.entries.length; i++) {
|
|
95
|
+
lines.push(formatEntry(result.entries[i], i));
|
|
96
|
+
lines.push('');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return lines.join('\n');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Helper function to create an audit entry from detection data
|
|
103
|
+
* This is used by the action handlers to log detections
|
|
104
|
+
*/
|
|
105
|
+
export function createAuditEntry(toolName, category, severity, action, reason, metadata) {
|
|
106
|
+
addAuditEntry({
|
|
107
|
+
toolName,
|
|
108
|
+
category,
|
|
109
|
+
severity,
|
|
110
|
+
action,
|
|
111
|
+
reason,
|
|
112
|
+
metadata,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Command
|
|
3
|
+
* CLI command for submitting and viewing user feedback on detection accuracy
|
|
4
|
+
*/
|
|
5
|
+
import type { FeedbackEntry, FeedbackOptions, FeedbackResult } from '../../feedback/index.js';
|
|
6
|
+
import { FileFeedbackStore } from '../../feedback/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute the feedback command
|
|
9
|
+
*
|
|
10
|
+
* @param options - Feedback command options
|
|
11
|
+
* @param store - Optional feedback store (for testing)
|
|
12
|
+
* @returns Result of the feedback operation
|
|
13
|
+
*/
|
|
14
|
+
export declare function feedbackCommand(options: FeedbackOptions, store?: FileFeedbackStore): Promise<FeedbackResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Format feedback result for console output
|
|
17
|
+
*
|
|
18
|
+
* @param result - The feedback result to format
|
|
19
|
+
* @param detailed - Whether to include full details
|
|
20
|
+
* @returns Formatted string for display
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatFeedbackResult(result: FeedbackResult, detailed?: boolean): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a brief summary of a feedback entry for list display
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatFeedbackSummary(entry: FeedbackEntry): string;
|
|
27
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,cAAc,EAEf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAc9E;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,cAAc,CAAC,CAiCzB;AA0ID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,UAAQ,GAAG,MAAM,CAwCrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAalE"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Command
|
|
3
|
+
* CLI command for submitting and viewing user feedback on detection accuracy
|
|
4
|
+
*/
|
|
5
|
+
import { getFeedbackStore } from '../../feedback/index.js';
|
|
6
|
+
import { getAuditLog } from './audit.js';
|
|
7
|
+
/**
|
|
8
|
+
* Valid threat categories for validation
|
|
9
|
+
*/
|
|
10
|
+
const VALID_CATEGORIES = [
|
|
11
|
+
'purchase',
|
|
12
|
+
'website',
|
|
13
|
+
'destructive',
|
|
14
|
+
'secrets',
|
|
15
|
+
'exfiltration',
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Execute the feedback command
|
|
19
|
+
*
|
|
20
|
+
* @param options - Feedback command options
|
|
21
|
+
* @param store - Optional feedback store (for testing)
|
|
22
|
+
* @returns Result of the feedback operation
|
|
23
|
+
*/
|
|
24
|
+
export async function feedbackCommand(options, store) {
|
|
25
|
+
const feedbackStore = store ?? getFeedbackStore();
|
|
26
|
+
// Ensure store is loaded
|
|
27
|
+
if (!feedbackStore.isLoaded()) {
|
|
28
|
+
await feedbackStore.load();
|
|
29
|
+
}
|
|
30
|
+
// Handle list operation
|
|
31
|
+
if (options.list) {
|
|
32
|
+
return handleList(feedbackStore, options.type);
|
|
33
|
+
}
|
|
34
|
+
// Handle show operation
|
|
35
|
+
if (options.show) {
|
|
36
|
+
return handleShow(feedbackStore, options.show);
|
|
37
|
+
}
|
|
38
|
+
// Handle false positive submission
|
|
39
|
+
if (options.falsePositive) {
|
|
40
|
+
return handleFalsePositive(feedbackStore, options.falsePositive);
|
|
41
|
+
}
|
|
42
|
+
// Handle false negative submission
|
|
43
|
+
if (options.falseNegative) {
|
|
44
|
+
return handleFalseNegative(feedbackStore, options.falseNegative, options.category);
|
|
45
|
+
}
|
|
46
|
+
// No valid operation specified
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
message: 'No operation specified. Use --list, --show, --false-positive, or --false-negative.',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Handle listing feedback entries
|
|
54
|
+
*/
|
|
55
|
+
function handleList(store, type) {
|
|
56
|
+
const entries = type ? store.getByType(type) : store.getAll();
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
message: `Found ${entries.length} feedback ${entries.length === 1 ? 'entry' : 'entries'}`,
|
|
60
|
+
entries,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Handle showing a specific feedback entry
|
|
65
|
+
*/
|
|
66
|
+
function handleShow(store, id) {
|
|
67
|
+
const entry = store.get(id);
|
|
68
|
+
if (!entry) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
message: `Feedback entry not found: ${id}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
message: 'Feedback entry found',
|
|
77
|
+
entry,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Handle false positive submission
|
|
82
|
+
*/
|
|
83
|
+
function handleFalsePositive(store, detectionId) {
|
|
84
|
+
// Try to find the detection in the audit log
|
|
85
|
+
const auditLog = getAuditLog();
|
|
86
|
+
const auditEntry = auditLog.find((entry, index) => {
|
|
87
|
+
// Match by index (1-based for user display) or partial timestamp match
|
|
88
|
+
const indexId = `${index + 1}`;
|
|
89
|
+
return indexId === detectionId ||
|
|
90
|
+
entry.timestamp.toISOString().includes(detectionId);
|
|
91
|
+
});
|
|
92
|
+
const entry = store.add({
|
|
93
|
+
type: 'false-positive',
|
|
94
|
+
detectionId,
|
|
95
|
+
detection: auditEntry ? {
|
|
96
|
+
category: auditEntry.category,
|
|
97
|
+
severity: auditEntry.severity,
|
|
98
|
+
reason: auditEntry.reason,
|
|
99
|
+
toolName: auditEntry.toolName,
|
|
100
|
+
toolInput: auditEntry.metadata ?? {},
|
|
101
|
+
} : undefined,
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
message: auditEntry
|
|
106
|
+
? `False positive reported for detection: ${auditEntry.category} (${auditEntry.reason})`
|
|
107
|
+
: `False positive reported with ID: ${detectionId}`,
|
|
108
|
+
entry,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Handle false negative submission
|
|
113
|
+
*/
|
|
114
|
+
function handleFalseNegative(store, description, category) {
|
|
115
|
+
// Validate category if provided
|
|
116
|
+
if (category && !VALID_CATEGORIES.includes(category)) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: `Invalid category: ${category}. Valid categories: ${VALID_CATEGORIES.join(', ')}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const entry = store.add({
|
|
123
|
+
type: 'false-negative',
|
|
124
|
+
description,
|
|
125
|
+
suggestedCategory: category,
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
success: true,
|
|
129
|
+
message: category
|
|
130
|
+
? `False negative reported in category "${category}": ${description}`
|
|
131
|
+
: `False negative reported: ${description}`,
|
|
132
|
+
entry,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Format a single feedback entry for display
|
|
137
|
+
*/
|
|
138
|
+
function formatEntry(entry, detailed = false) {
|
|
139
|
+
const lines = [];
|
|
140
|
+
const date = new Date(entry.timestamp);
|
|
141
|
+
const dateStr = date.toISOString().replace('T', ' ').substring(0, 19);
|
|
142
|
+
lines.push(`ID: ${entry.id}`);
|
|
143
|
+
lines.push(`Type: ${entry.type}`);
|
|
144
|
+
lines.push(`Status: ${entry.status}`);
|
|
145
|
+
lines.push(`Date: ${dateStr}`);
|
|
146
|
+
if (entry.type === 'false-positive') {
|
|
147
|
+
lines.push(`Detection ID: ${entry.detectionId ?? '(not specified)'}`);
|
|
148
|
+
if (entry.detection) {
|
|
149
|
+
lines.push(`Category: ${entry.detection.category}`);
|
|
150
|
+
lines.push(`Severity: ${entry.detection.severity}`);
|
|
151
|
+
lines.push(`Reason: ${entry.detection.reason}`);
|
|
152
|
+
if (detailed) {
|
|
153
|
+
lines.push(`Tool: ${entry.detection.toolName}`);
|
|
154
|
+
lines.push(`Input: ${JSON.stringify(entry.detection.toolInput, null, 2)}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
lines.push(`Description: ${entry.description ?? '(none)'}`);
|
|
160
|
+
if (entry.suggestedCategory) {
|
|
161
|
+
lines.push(`Suggested Category: ${entry.suggestedCategory}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (entry.notes) {
|
|
165
|
+
lines.push(`Notes: ${entry.notes}`);
|
|
166
|
+
}
|
|
167
|
+
return lines.join('\n');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format feedback result for console output
|
|
171
|
+
*
|
|
172
|
+
* @param result - The feedback result to format
|
|
173
|
+
* @param detailed - Whether to include full details
|
|
174
|
+
* @returns Formatted string for display
|
|
175
|
+
*/
|
|
176
|
+
export function formatFeedbackResult(result, detailed = false) {
|
|
177
|
+
const lines = [];
|
|
178
|
+
lines.push('=== Feedback ===');
|
|
179
|
+
lines.push('');
|
|
180
|
+
if (!result.success) {
|
|
181
|
+
lines.push(`Error: ${result.message}`);
|
|
182
|
+
return lines.join('\n');
|
|
183
|
+
}
|
|
184
|
+
// Single entry (add or show)
|
|
185
|
+
if (result.entry) {
|
|
186
|
+
lines.push(result.message);
|
|
187
|
+
lines.push('');
|
|
188
|
+
lines.push(formatEntry(result.entry, detailed));
|
|
189
|
+
return lines.join('\n');
|
|
190
|
+
}
|
|
191
|
+
// List of entries
|
|
192
|
+
if (result.entries !== undefined) {
|
|
193
|
+
lines.push(result.message);
|
|
194
|
+
lines.push('');
|
|
195
|
+
if (result.entries.length === 0) {
|
|
196
|
+
lines.push('No feedback entries found.');
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
for (const entry of result.entries) {
|
|
200
|
+
lines.push('---');
|
|
201
|
+
lines.push(formatEntry(entry, detailed));
|
|
202
|
+
lines.push('');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return lines.join('\n');
|
|
206
|
+
}
|
|
207
|
+
// Generic success message
|
|
208
|
+
lines.push(result.message);
|
|
209
|
+
return lines.join('\n');
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Format a brief summary of a feedback entry for list display
|
|
213
|
+
*/
|
|
214
|
+
export function formatFeedbackSummary(entry) {
|
|
215
|
+
const date = new Date(entry.timestamp);
|
|
216
|
+
const dateStr = date.toISOString().substring(0, 10);
|
|
217
|
+
const shortId = entry.id.substring(0, 8);
|
|
218
|
+
if (entry.type === 'false-positive') {
|
|
219
|
+
const category = entry.detection?.category ?? 'unknown';
|
|
220
|
+
return `[${shortId}] ${dateStr} FP: ${category} - ${entry.detection?.reason ?? entry.detectionId}`;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
const desc = entry.description ?? '(no description)';
|
|
224
|
+
const truncated = desc.length > 50 ? desc.substring(0, 47) + '...' : desc;
|
|
225
|
+
return `[${shortId}] ${dateStr} FN: ${truncated}`;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands
|
|
3
|
+
* Re-exports for all CLI commands
|
|
4
|
+
*/
|
|
5
|
+
export type { CLIOptions, StatusResult, TestResult, AuditEntry, AuditOptions, AuditResult, } from './types.js';
|
|
6
|
+
export { statusCommand, formatStatusResult, } from './status.js';
|
|
7
|
+
export { testCommand, formatTestResult, } from './test.js';
|
|
8
|
+
export { auditCommand, formatAuditResult, addAuditEntry, clearAuditLog, getAuditLog, createAuditEntry, } from './audit.js';
|
|
9
|
+
export { feedbackCommand, formatFeedbackResult, formatFeedbackSummary, } from './feedback.js';
|
|
10
|
+
export type { FeedbackOptions, FeedbackResult, } from '../../feedback/index.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands
|
|
3
|
+
* Re-exports for all CLI commands
|
|
4
|
+
*/
|
|
5
|
+
// Status command
|
|
6
|
+
export { statusCommand, formatStatusResult, } from './status.js';
|
|
7
|
+
// Test command
|
|
8
|
+
export { testCommand, formatTestResult, } from './test.js';
|
|
9
|
+
// Audit command
|
|
10
|
+
export { auditCommand, formatAuditResult, addAuditEntry, clearAuditLog, getAuditLog, createAuditEntry, } from './audit.js';
|
|
11
|
+
// Feedback command
|
|
12
|
+
export { feedbackCommand, formatFeedbackResult, formatFeedbackSummary, } from './feedback.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,eAAe;AACf,OAAO,EACL,WAAW,EACX,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Command
|
|
3
|
+
* Shows configuration status, enabled rules, and any issues
|
|
4
|
+
*/
|
|
5
|
+
import type { StatusResult, CLIOptions } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Execute the status command
|
|
8
|
+
*
|
|
9
|
+
* @param options - CLI options including optional config path
|
|
10
|
+
* @returns Status result with config info and rule status
|
|
11
|
+
*/
|
|
12
|
+
export declare function statusCommand(options?: CLIOptions): Promise<StatusResult>;
|
|
13
|
+
/**
|
|
14
|
+
* Format status result for console output
|
|
15
|
+
*
|
|
16
|
+
* @param result - Status result to format
|
|
17
|
+
* @returns Formatted string for display
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatStatusResult(result: StatusResult): string;
|
|
20
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK3D;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CA4EnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAiC/D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Command
|
|
3
|
+
* Shows configuration status, enabled rules, and any issues
|
|
4
|
+
*/
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import { loadConfig, findConfigFile, isValidConfig, ConfigLoadError, } from '../../config/index.js';
|
|
7
|
+
/** All available rule names */
|
|
8
|
+
const ALL_RULES = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
|
|
9
|
+
/**
|
|
10
|
+
* Execute the status command
|
|
11
|
+
*
|
|
12
|
+
* @param options - CLI options including optional config path
|
|
13
|
+
* @returns Status result with config info and rule status
|
|
14
|
+
*/
|
|
15
|
+
export async function statusCommand(options = {}) {
|
|
16
|
+
const issues = [];
|
|
17
|
+
let configPath = options.config || '';
|
|
18
|
+
let configValid = false;
|
|
19
|
+
const enabledRules = [];
|
|
20
|
+
const disabledRules = [];
|
|
21
|
+
// Find config file if not specified
|
|
22
|
+
if (!configPath) {
|
|
23
|
+
const foundPath = findConfigFile();
|
|
24
|
+
if (foundPath) {
|
|
25
|
+
configPath = foundPath;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
configPath = '(none - using defaults)';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
configPath = path.resolve(configPath);
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
// Load and validate config
|
|
36
|
+
const config = loadConfig(options.config);
|
|
37
|
+
// Check if config is valid
|
|
38
|
+
const validation = isValidConfig(config);
|
|
39
|
+
configValid = validation.valid;
|
|
40
|
+
if (!validation.valid) {
|
|
41
|
+
issues.push(...validation.errors.map(e => `${e.path}: ${e.message}`));
|
|
42
|
+
}
|
|
43
|
+
// Check global enabled status
|
|
44
|
+
if (!config.global.enabled) {
|
|
45
|
+
issues.push('Plugin is globally disabled');
|
|
46
|
+
}
|
|
47
|
+
// Check each rule's status
|
|
48
|
+
for (const ruleName of ALL_RULES) {
|
|
49
|
+
const rule = config.rules[ruleName];
|
|
50
|
+
if (rule && rule.enabled) {
|
|
51
|
+
enabledRules.push(ruleName);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
disabledRules.push(ruleName);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Additional validation checks
|
|
58
|
+
if (config.rules.website.mode === 'allowlist' && config.rules.website.allowlist.length === 0) {
|
|
59
|
+
issues.push('Website rule is in allowlist mode but allowlist is empty (blocks all sites)');
|
|
60
|
+
}
|
|
61
|
+
if (config.approval.webhook?.enabled && !config.approval.webhook.url) {
|
|
62
|
+
issues.push('Webhook approval is enabled but no URL is configured');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
configValid = false;
|
|
67
|
+
if (error instanceof ConfigLoadError) {
|
|
68
|
+
issues.push(`Failed to load config: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
else if (error instanceof Error) {
|
|
71
|
+
issues.push(`Configuration error: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
issues.push('Unknown configuration error');
|
|
75
|
+
}
|
|
76
|
+
// If config failed to load, mark all rules as unknown
|
|
77
|
+
disabledRules.push(...ALL_RULES);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
configPath,
|
|
81
|
+
configValid,
|
|
82
|
+
enabledRules,
|
|
83
|
+
disabledRules,
|
|
84
|
+
issues,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Format status result for console output
|
|
89
|
+
*
|
|
90
|
+
* @param result - Status result to format
|
|
91
|
+
* @returns Formatted string for display
|
|
92
|
+
*/
|
|
93
|
+
export function formatStatusResult(result) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
lines.push('=== Clawsec Status ===');
|
|
96
|
+
lines.push('');
|
|
97
|
+
lines.push(`Config File: ${result.configPath}`);
|
|
98
|
+
lines.push(`Config Valid: ${result.configValid ? 'Yes' : 'No'}`);
|
|
99
|
+
lines.push('');
|
|
100
|
+
if (result.enabledRules.length > 0) {
|
|
101
|
+
lines.push('Enabled Rules:');
|
|
102
|
+
for (const rule of result.enabledRules) {
|
|
103
|
+
lines.push(` - ${rule}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (result.disabledRules.length > 0) {
|
|
107
|
+
lines.push('');
|
|
108
|
+
lines.push('Disabled Rules:');
|
|
109
|
+
for (const rule of result.disabledRules) {
|
|
110
|
+
lines.push(` - ${rule}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (result.issues.length > 0) {
|
|
114
|
+
lines.push('');
|
|
115
|
+
lines.push('Issues:');
|
|
116
|
+
for (const issue of result.issues) {
|
|
117
|
+
lines.push(` ! ${issue}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return lines.join('\n');
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Command
|
|
3
|
+
* Tests a specific rule against sample input
|
|
4
|
+
*/
|
|
5
|
+
import type { TestResult, CLIOptions } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Execute the test command
|
|
8
|
+
*
|
|
9
|
+
* @param ruleName - Name of the rule to test
|
|
10
|
+
* @param input - JSON input object to test
|
|
11
|
+
* @param options - CLI options including optional config path
|
|
12
|
+
* @returns Test result showing detection status
|
|
13
|
+
*/
|
|
14
|
+
export declare function testCommand(ruleName: string, input: Record<string, unknown>, options?: CLIOptions): Promise<TestResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Format test result for console output
|
|
17
|
+
*
|
|
18
|
+
* @param result - Test result to format
|
|
19
|
+
* @param ruleName - Name of the rule that was tested
|
|
20
|
+
* @returns Formatted string for display
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatTestResult(result: TestResult, ruleName: string): string;
|
|
23
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAazD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CA8FrB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB7E"}
|