Documentation
¶
Overview ¶
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors
Package security provides security plugin for NemesisBot
Index ¶
- Variables
- func IsSafeCommand(command string) (bool, string)
- func MatchCommandPattern(pattern, command string) bool
- func MatchDomainPattern(pattern, domain string) bool
- func MatchPattern(pattern, target string) bool
- func MonitorSecurityStatus(ctx context.Context, auditor *SecurityAuditor, interval time.Duration)
- func ValidatePath(path, workspace string, operation OperationType) (string, error)
- type ApprovalRequiredError
- type AuditEvent
- type AuditFilter
- type AuditorConfig
- type BatchOperationRequest
- type DangerLevel
- type OperationRequest
- type OperationType
- type Permission
- type Policy
- type PolicyRule
- type SecureFileWrapper
- func (w *SecureFileWrapper) AppendFile(path string, content []byte) error
- func (w *SecureFileWrapper) CreateDirectory(path string) error
- func (w *SecureFileWrapper) DeleteDirectory(path string) error
- func (w *SecureFileWrapper) DeleteFile(path string) error
- func (w *SecureFileWrapper) EditFile(path, oldText, newText string) error
- func (w *SecureFileWrapper) ReadDirectory(path string) ([]string, error)
- func (w *SecureFileWrapper) ReadFile(path string) ([]byte, error)
- func (w *SecureFileWrapper) WriteFile(path string, content []byte) error
- type SecureHardwareWrapper
- type SecureNetworkWrapper
- type SecureProcessWrapper
- type SecurityAuditor
- func (sa *SecurityAuditor) ApproveRequest(requestID, approver string) error
- func (sa *SecurityAuditor) CleanupOldAuditLogs() error
- func (sa *SecurityAuditor) Close() error
- func (sa *SecurityAuditor) DenyRequest(requestID, approver, reason string) error
- func (sa *SecurityAuditor) Disable()
- func (sa *SecurityAuditor) Enable()
- func (sa *SecurityAuditor) ExportAuditLog(filePath string) error
- func (sa *SecurityAuditor) GetApprovalManager() approval.ApprovalManager
- func (sa *SecurityAuditor) GetAuditLog(filter AuditFilter) []AuditEvent
- func (sa *SecurityAuditor) GetPendingRequests() []*OperationRequest
- func (sa *SecurityAuditor) GetStatistics() map[string]interface{}
- func (sa *SecurityAuditor) RequestPermission(ctx context.Context, req *OperationRequest) (bool, error, string)
- func (sa *SecurityAuditor) SetApprovalManager(mgr approval.ApprovalManager)
- func (sa *SecurityAuditor) SetDefaultAction(action string)
- func (sa *SecurityAuditor) SetRules(opType OperationType, rules []config.SecurityRule)
- type SecurityMiddleware
- func (sm *SecurityMiddleware) ApprovePendingRequest(requestID string) error
- func (sm *SecurityMiddleware) DenyPendingRequest(requestID, reason string) error
- func (sm *SecurityMiddleware) ExportAuditLog(filePath string) error
- func (sm *SecurityMiddleware) File() *SecureFileWrapper
- func (sm *SecurityMiddleware) GetAuditLog(filter AuditFilter) []AuditEvent
- func (sm *SecurityMiddleware) GetSecuritySummary() map[string]interface{}
- func (sm *SecurityMiddleware) Hardware() *SecureHardwareWrapper
- func (sm *SecurityMiddleware) Network() *SecureNetworkWrapper
- func (sm *SecurityMiddleware) Process() *SecureProcessWrapper
- func (sm *SecurityMiddleware) RequestBatchPermission(ctx context.Context, batch *BatchOperationRequest) (bool, error, string)
- type SecurityPlugin
- func (p *SecurityPlugin) Cleanup() error
- func (p *SecurityPlugin) Execute(ctx context.Context, invocation *plugin.ToolInvocation) (bool, error, bool)
- func (p *SecurityPlugin) GetAuditChain() *integrity.AuditChain
- func (p *SecurityPlugin) GetAuditor() *SecurityAuditor
- func (p *SecurityPlugin) GetCommandGuard() *command.Guard
- func (p *SecurityPlugin) GetCredentialScanner() *credential.Scanner
- func (p *SecurityPlugin) GetDLPEngine() *dlp.DLPEngine
- func (p *SecurityPlugin) GetInjectionDetector() *injection.Detector
- func (p *SecurityPlugin) GetSSRFGuard() *ssrf.Guard
- func (p *SecurityPlugin) Init(pluginConfig map[string]interface{}) error
- func (p *SecurityPlugin) IsEnabled() bool
- func (p *SecurityPlugin) ReloadConfig() error
- func (p *SecurityPlugin) SetEnabled(enabled bool)
Constants ¶
This section is empty.
Variables ¶
var DefaultDenyPatterns = map[OperationType][]string{ OpProcessExec: { `\brm\s+-[rf]{1,2}\b`, `\bdel\s+/[fq]\b`, `\b(format|mkfs|diskpart)\b`, `\bdd\s+if=`, `\b(shutdown|reboot|poweroff)\b`, `\bsudo\b`, `\bchmod\s+[0-7]{3,4}\b`, `\bchown\b`, `\bpkill\b`, `\bkillall\b`, `\bkill\s+-[9]\b`, `\bcurl\b.*\|\s*(sh|bash)`, `\bwget\b.*\|\s*(sh|bash)`, `\beval\b`, `\bsource\s+.*\.sh\b`, }, OpFileWrite: { `\.\.[/\\]`, `^/etc/`, `^/sys/`, `^/proc/`, `^/dev/`, `C:\\Windows\\System32`, `C:\\Windows\\System32\\drivers\\etc\\hosts`, }, OpNetworkDownload: { `file://`, `ftp://`, }, }
DefaultDenyPatterns defines default dangerous patterns to block
Functions ¶
func IsSafeCommand ¶
IsSafeCommand checks if a command is safe to execute
func MatchCommandPattern ¶
MatchCommandPattern checks if a command matches a pattern Supports * wildcard for command arguments Examples:
"git *" matches "git status", "git commit -m 'msg'" "rm -rf *" matches "rm -rf /tmp/test" "*sudo*" matches "sudo apt-get install", "sudo vim"
func MatchDomainPattern ¶
MatchDomainPattern checks if a domain matches a pattern Examples:
"*.github.com" matches "api.github.com", "raw.githubusercontent.com" "*.openai.com" matches "api.openai.com" "github.com" matches exactly "github.com"
func MatchPattern ¶
MatchPattern checks if a target matches a pattern with wildcard support Supported wildcards:
- - matches any sequence in a single directory level (e.g., *.key, D:/123/*.key) ** - matches any sequence across multiple directory levels (e.g., D:/123/**.key) No wildcard - exact match (e.g., /etc/passwd)
Special case: patterns without directory separator (e.g., *.key) match globally across all directories (e.g., *.key matches /home/user/test.key)
Examples:
*.key matches all .key files in all directories (global pattern) D:/123/*.key matches .key files directly in D:/123/ D:/123/**.key matches .key files in D:/123/ and all subdirectories /etc/passwd matches exactly /etc/passwd
func MonitorSecurityStatus ¶
func MonitorSecurityStatus(ctx context.Context, auditor *SecurityAuditor, interval time.Duration)
MonitorSecurityStatus continuously monitors and logs security status
func ValidatePath ¶
func ValidatePath(path, workspace string, operation OperationType) (string, error)
ValidatePath checks if a path is safe for the given operation
Types ¶
type ApprovalRequiredError ¶
ApprovalRequiredError is returned when approval is required
func (*ApprovalRequiredError) Error ¶
func (e *ApprovalRequiredError) Error() string
func (*ApprovalRequiredError) IsApprovalRequired ¶
func (e *ApprovalRequiredError) IsApprovalRequired() bool
type AuditEvent ¶
type AuditEvent struct {
EventID string // Unique event ID
Request OperationRequest // Original request
Decision string // "allowed", "denied", "approved", "pending"
Reason string // Reason for decision
Timestamp time.Time // When the decision was made
Duration time.Duration // Time to process
PolicyRule string // Which policy rule matched
}
AuditEvent represents an audit log entry
type AuditFilter ¶
type AuditFilter struct {
OperationType OperationType
User string
Source string
Decision string
StartTime *time.Time
EndTime *time.Time
}
AuditFilter filters audit logs
func (*AuditFilter) IsEmpty ¶
func (f *AuditFilter) IsEmpty() bool
func (*AuditFilter) Matches ¶
func (f *AuditFilter) Matches(event AuditEvent) bool
type AuditorConfig ¶
type AuditorConfig struct {
Enabled bool
LogAllOperations bool
LogDenialsOnly bool
ApprovalTimeout time.Duration
MaxPendingRequests int
AuditLogRetentionDays int
AuditLogPath string
AuditLogFileEnabled bool
AuditLogDir string
SynchronousMode bool
DefaultAction string
}
AuditorConfig configures the security auditor
type BatchOperationRequest ¶
type BatchOperationRequest struct {
ID string
Operations []*OperationRequest
User string
Source string
Description string
}
BatchOperationRequest represents a batch of operations to be approved together
type DangerLevel ¶
type DangerLevel int
DangerLevel represents the risk level of an operation
const ( DangerLow DangerLevel = iota // Safe operations with minimal risk DangerMedium // Operations that modify data/state DangerHigh // Operations that can cause significant damage DangerCritical // Operations that can compromise system security )
func GetDangerLevel ¶
func GetDangerLevel(opType OperationType) DangerLevel
GetDangerLevel returns the danger level for an operation type
func (DangerLevel) String ¶
func (d DangerLevel) String() string
type OperationRequest ¶
type OperationRequest struct {
ID string // Unique request ID
Type OperationType // Type of operation
DangerLevel DangerLevel // Risk level
User string // User/agent requesting the operation
Source string // Source (cli, web, telegram, etc.)
Target string // Target of operation (file path, command, URL, etc.)
Context map[string]interface{} // Additional context
Timestamp time.Time // When the request was made
Approver string // Who approved (if applicable)
ApprovedAt time.Time // When approved
DeniedReason string // Reason for denial (if denied)
AuditLog string // Audit trail entry
}
OperationRequest represents a request for a dangerous operation
type OperationType ¶
type OperationType string
OperationType represents the category of dangerous operation
const ( // File operations OpFileRead OperationType = "file_read" OpFileWrite OperationType = "file_write" OpFileDelete OperationType = "file_delete" // Directory operations OpDirRead OperationType = "dir_read" OpDirCreate OperationType = "dir_create" OpDirDelete OperationType = "dir_delete" // Process operations OpProcessExec OperationType = "process_exec" OpProcessSpawn OperationType = "process_spawn" OpProcessKill OperationType = "process_kill" OpProcessSuspend OperationType = "process_suspend" // Network operations OpNetworkDownload OperationType = "network_download" OpNetworkUpload OperationType = "network_upload" OpNetworkRequest OperationType = "network_request" // Hardware operations OpHardwareI2C OperationType = "hardware_i2c" OpHardwareSPI OperationType = "hardware_spi" OpHardwareGPIO OperationType = "hardware_gpio" // System operations OpSystemShutdown OperationType = "system_shutdown" OpSystemReboot OperationType = "system_reboot" OpSystemConfig OperationType = "system_config" OpSystemService OperationType = "system_service" OpSystemInstall OperationType = "system_install" // Registry operations (Windows) OpRegistryRead OperationType = "registry_read" OpRegistryWrite OperationType = "registry_write" OpRegistryDelete OperationType = "registry_delete" )
type Permission ¶
type Permission struct {
AllowedTypes map[OperationType]bool
AllowedTargets []string // Whitelist patterns (regexp)
DeniedTargets []string // Blacklist patterns (regexp)
RequireApproval map[OperationType]bool // Ops requiring explicit approval
MaxDangerLevel DangerLevel // Maximum danger level allowed
}
Permission defines what operations are allowed
func CreateAgentPermission ¶
func CreateAgentPermission(agentID string) *Permission
CreateAgentPermission creates permission for AI agents (context-aware)
func CreateCLIPermission ¶
func CreateCLIPermission() *Permission
CreateCLIPermission creates permission for CLI user (less restrictive)
func CreateWebPermission ¶
func CreateWebPermission() *Permission
CreateWebPermission creates permission for web users (more restrictive)
type Policy ¶
type Policy struct {
Name string
Description string
Enabled bool
Rules []PolicyRule
DefaultAction string // "allow", "deny", "require_approval"
LogOnly bool // If true, log but don't block
RequireMFA bool // Require multi-factor approval for critical ops
}
Policy defines security rules
type PolicyRule ¶
type PolicyRule struct {
Name string
MatchOpType OperationType
MatchTarget string // Regexp pattern for target
MatchUser string // Regexp pattern for user
MatchSource string // Regexp pattern for source
MinDanger DangerLevel // Minimum danger level to match
Action string // "allow", "deny", "require_approval"
Reason string // Explanation for this rule
}
PolicyRule defines a single security rule
type SecureFileWrapper ¶
type SecureFileWrapper struct {
// contains filtered or unexported fields
}
SecureFileWrapper wraps file operations with security checks
func NewSecureFileWrapper ¶
func NewSecureFileWrapper(auditor *SecurityAuditor, user, source, workspace string) *SecureFileWrapper
func (*SecureFileWrapper) AppendFile ¶
func (w *SecureFileWrapper) AppendFile(path string, content []byte) error
AppendFile appends to a file with security check
func (*SecureFileWrapper) CreateDirectory ¶
func (w *SecureFileWrapper) CreateDirectory(path string) error
CreateDirectory creates a directory with security check
func (*SecureFileWrapper) DeleteDirectory ¶
func (w *SecureFileWrapper) DeleteDirectory(path string) error
DeleteDirectory deletes a directory with security check
func (*SecureFileWrapper) DeleteFile ¶
func (w *SecureFileWrapper) DeleteFile(path string) error
DeleteFile deletes a file with security check
func (*SecureFileWrapper) EditFile ¶
func (w *SecureFileWrapper) EditFile(path, oldText, newText string) error
EditFile edits a file with security check
func (*SecureFileWrapper) ReadDirectory ¶
func (w *SecureFileWrapper) ReadDirectory(path string) ([]string, error)
ReadDirectory reads a directory with security check
type SecureHardwareWrapper ¶
type SecureHardwareWrapper struct {
// contains filtered or unexported fields
}
SecureHardwareWrapper wraps hardware operations with security checks
func NewSecureHardwareWrapper ¶
func NewSecureHardwareWrapper(auditor *SecurityAuditor, user, source string) *SecureHardwareWrapper
type SecureNetworkWrapper ¶
type SecureNetworkWrapper struct {
// contains filtered or unexported fields
}
SecureNetworkWrapper wraps network operations with security checks
func NewSecureNetworkWrapper ¶
func NewSecureNetworkWrapper(auditor *SecurityAuditor, user, source string) *SecureNetworkWrapper
func (*SecureNetworkWrapper) DownloadURL ¶
func (w *SecureNetworkWrapper) DownloadURL(url string, savePath string) error
DownloadURL downloads a file from URL with security check
type SecureProcessWrapper ¶
type SecureProcessWrapper struct {
// contains filtered or unexported fields
}
SecureProcessWrapper wraps process operations with security checks
func NewSecureProcessWrapper ¶
func NewSecureProcessWrapper(auditor *SecurityAuditor, user, source, workingDir string) *SecureProcessWrapper
func (*SecureProcessWrapper) ExecuteCommand ¶
func (w *SecureProcessWrapper) ExecuteCommand(command string) (string, error)
ExecuteCommand executes a command with security check
type SecurityAuditor ¶
type SecurityAuditor struct {
// contains filtered or unexported fields
}
SecurityAuditor is the main security auditor
func GetGlobalAuditor ¶
func GetGlobalAuditor() *SecurityAuditor
GetGlobalAuditor returns the global security auditor
func InitGlobalAuditor ¶
func InitGlobalAuditor(config *AuditorConfig) *SecurityAuditor
InitGlobalAuditor initializes the global security auditor
func NewSecurityAuditor ¶
func NewSecurityAuditor(auditorConfig *AuditorConfig) *SecurityAuditor
NewSecurityAuditor creates a new security auditor
func (*SecurityAuditor) ApproveRequest ¶
func (sa *SecurityAuditor) ApproveRequest(requestID, approver string) error
ApproveRequest approves a pending operation request
func (*SecurityAuditor) CleanupOldAuditLogs ¶
func (sa *SecurityAuditor) CleanupOldAuditLogs() error
CleanupOldAuditLogs is a no-op. Events are no longer stored in memory; all data is persisted to the audit log file. File-based retention can be handled externally by rotating the log file.
func (*SecurityAuditor) Close ¶
func (sa *SecurityAuditor) Close() error
Close closes the audit log file
func (*SecurityAuditor) DenyRequest ¶
func (sa *SecurityAuditor) DenyRequest(requestID, approver, reason string) error
DenyRequest denies a pending operation request
func (*SecurityAuditor) Disable ¶
func (sa *SecurityAuditor) Disable()
Disable disables the security auditor (use with caution!)
func (*SecurityAuditor) Enable ¶
func (sa *SecurityAuditor) Enable()
Enable enables the security auditor
func (*SecurityAuditor) ExportAuditLog ¶
func (sa *SecurityAuditor) ExportAuditLog(filePath string) error
ExportAuditLog exports audit log to a file. Copies the persistent audit log file to the specified path. If no log file is available, creates an empty file with header.
func (*SecurityAuditor) GetApprovalManager ¶
func (sa *SecurityAuditor) GetApprovalManager() approval.ApprovalManager
GetApprovalManager returns the current approval manager
func (*SecurityAuditor) GetAuditLog ¶
func (sa *SecurityAuditor) GetAuditLog(filter AuditFilter) []AuditEvent
GetAuditLog returns the audit log. Events are persisted to the audit log file; this method returns an empty slice. Use ExportAuditLog to export data from the file.
func (*SecurityAuditor) GetPendingRequests ¶
func (sa *SecurityAuditor) GetPendingRequests() []*OperationRequest
GetPendingRequests returns all pending approval requests
func (*SecurityAuditor) GetStatistics ¶
func (sa *SecurityAuditor) GetStatistics() map[string]interface{}
GetStatistics returns security statistics
func (*SecurityAuditor) RequestPermission ¶
func (sa *SecurityAuditor) RequestPermission(ctx context.Context, req *OperationRequest) (bool, error, string)
RequestPermission requests permission to perform a dangerous operation Returns: (allowed, error, requestID)
func (*SecurityAuditor) SetApprovalManager ¶
func (sa *SecurityAuditor) SetApprovalManager(mgr approval.ApprovalManager)
SetApprovalManager sets the approval manager for interactive approval dialogs
func (*SecurityAuditor) SetDefaultAction ¶
func (sa *SecurityAuditor) SetDefaultAction(action string)
SetDefaultAction sets the default action for unmatched requests
func (*SecurityAuditor) SetRules ¶
func (sa *SecurityAuditor) SetRules(opType OperationType, rules []config.SecurityRule)
SetRules sets rules for a specific operation type
type SecurityMiddleware ¶
type SecurityMiddleware struct {
// contains filtered or unexported fields
}
SecurityMiddleware provides a unified security interface for tools
func NewSecurityMiddleware ¶
func NewSecurityMiddleware(auditor *SecurityAuditor, user, source, workspace string) *SecurityMiddleware
func (*SecurityMiddleware) ApprovePendingRequest ¶
func (sm *SecurityMiddleware) ApprovePendingRequest(requestID string) error
ApprovePendingRequest approves a pending request (for user interaction)
func (*SecurityMiddleware) DenyPendingRequest ¶
func (sm *SecurityMiddleware) DenyPendingRequest(requestID, reason string) error
DenyPendingRequest denies a pending request (for user interaction)
func (*SecurityMiddleware) ExportAuditLog ¶
func (sm *SecurityMiddleware) ExportAuditLog(filePath string) error
ExportAuditLog exports the audit log to a file
func (*SecurityMiddleware) File ¶
func (sm *SecurityMiddleware) File() *SecureFileWrapper
File returns the file operations wrapper
func (*SecurityMiddleware) GetAuditLog ¶
func (sm *SecurityMiddleware) GetAuditLog(filter AuditFilter) []AuditEvent
GetAuditLog returns the audit log with optional filtering
func (*SecurityMiddleware) GetSecuritySummary ¶
func (sm *SecurityMiddleware) GetSecuritySummary() map[string]interface{}
GetSecuritySummary returns a summary of security status
func (*SecurityMiddleware) Hardware ¶
func (sm *SecurityMiddleware) Hardware() *SecureHardwareWrapper
Hardware returns the hardware operations wrapper
func (*SecurityMiddleware) Network ¶
func (sm *SecurityMiddleware) Network() *SecureNetworkWrapper
Network returns the network operations wrapper
func (*SecurityMiddleware) Process ¶
func (sm *SecurityMiddleware) Process() *SecureProcessWrapper
Process returns the process operations wrapper
func (*SecurityMiddleware) RequestBatchPermission ¶
func (sm *SecurityMiddleware) RequestBatchPermission(ctx context.Context, batch *BatchOperationRequest) (bool, error, string)
RequestBatchPermission requests permission for multiple operations at once
type SecurityPlugin ¶
type SecurityPlugin struct {
*plugin.BasePlugin
// contains filtered or unexported fields
}
SecurityPlugin implements the plugin interface for security checks
func NewSecurityPlugin ¶
func NewSecurityPlugin() *SecurityPlugin
NewSecurityPlugin creates a new security plugin
func (*SecurityPlugin) Cleanup ¶
func (p *SecurityPlugin) Cleanup() error
Cleanup cleans up the security plugin
func (*SecurityPlugin) Execute ¶
func (p *SecurityPlugin) Execute(ctx context.Context, invocation *plugin.ToolInvocation) (bool, error, bool)
Execute implements the plugin interface for security checks Security layers are applied in order: 1. InjectionDetector - intercept malicious input 2. CommandGuard - check dangerous commands 3. Auditor (ABAC) - attribute-based access control 4. CredentialScanner - detect leaked credentials 5. DLP - scan sensitive data 6. SSRFGuard - validate URLs for network operations 7. ScanChain - virus scanning 8. AuditChain - Merkle integrity audit log
func (*SecurityPlugin) GetAuditChain ¶
func (p *SecurityPlugin) GetAuditChain() *integrity.AuditChain
GetAuditChain returns the audit chain (for testing)
func (*SecurityPlugin) GetAuditor ¶
func (p *SecurityPlugin) GetAuditor() *SecurityAuditor
GetAuditor returns the security auditor (for backward compatibility)
func (*SecurityPlugin) GetCommandGuard ¶
func (p *SecurityPlugin) GetCommandGuard() *command.Guard
GetCommandGuard returns the command guard (for testing)
func (*SecurityPlugin) GetCredentialScanner ¶
func (p *SecurityPlugin) GetCredentialScanner() *credential.Scanner
GetCredentialScanner returns the credential scanner (for testing)
func (*SecurityPlugin) GetDLPEngine ¶
func (p *SecurityPlugin) GetDLPEngine() *dlp.DLPEngine
GetDLPEngine returns the DLP engine (for testing)
func (*SecurityPlugin) GetInjectionDetector ¶
func (p *SecurityPlugin) GetInjectionDetector() *injection.Detector
GetInjectionDetector returns the injection detector (for testing)
func (*SecurityPlugin) GetSSRFGuard ¶
func (p *SecurityPlugin) GetSSRFGuard() *ssrf.Guard
GetSSRFGuard returns the SSRF guard (for testing)
func (*SecurityPlugin) Init ¶
func (p *SecurityPlugin) Init(pluginConfig map[string]interface{}) error
Init initializes the security plugin with configuration
func (*SecurityPlugin) IsEnabled ¶
func (p *SecurityPlugin) IsEnabled() bool
IsEnabled returns whether the plugin is enabled
func (*SecurityPlugin) ReloadConfig ¶
func (p *SecurityPlugin) ReloadConfig() error
ReloadConfig reloads the security configuration
func (*SecurityPlugin) SetEnabled ¶
func (p *SecurityPlugin) SetEnabled(enabled bool)
SetEnabled sets the enabled state
Directories
¶
| Path | Synopsis |
|---|---|
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package command provides dangerous command detection and blocking
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package command provides dangerous command detection and blocking |
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package credential provides credential detection patterns for common secret types
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package credential provides credential detection patterns for common secret types |
|
Package dlp provides Data Loss Prevention scanning for NemesisBot.
|
Package dlp provides Data Loss Prevention scanning for NemesisBot. |
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors |
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package integrity provides a tamper-evident persistent audit chain
|
NemesisBot - AI agent License: MIT Copyright (c) 2026 NemesisBot contributors Package integrity provides a tamper-evident persistent audit chain |
|
clamav
Package clamav provides a Go client for the ClamAV clamd daemon
|
Package clamav provides a Go client for the ClamAV clamd daemon |
|
Package signature provides Ed25519-based skill signature verification for NemesisBot.
|
Package signature provides Ed25519-based skill signature verification for NemesisBot. |