mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
* feat: Initial work on security analyzer * feat: Add remote invariant client * chore: improve fault tolerance of client * feat: Add button to enable Invariant Security Analyzer * [feat] confirmation mode for bash actions * feat: Add Invariant Tab with security risk outputs * feat: Add modal setting for Confirmation Mode * fix: frontend tests for confirmation mode switch * fix: add missing CONFIRMATION_MODE value in SettingsModal.test.tsx * fix: update test to integrate new setting * feat: Initial work on security analyzer * feat: Add remote invariant client * chore: improve fault tolerance of client * feat: Add button to enable Invariant Security Analyzer * feat: Add Invariant Tab with security risk outputs * feat: integrate security analyzer with confirmation mode * feat: improve invariant analyzer tab * feat: Implement user confirmation for running bash/python code * fix: don't display rejected actions * fix: make confirmation show only on assistant messages * feat: download traces, update policy, implement settings, auto-approve based on defined risk * Fix: low risk not being shown because it's 0 * fix: duplicate logs in tab * fix: log duplication * chore: prepare for merge, remove logging * Merge confirmation_mode from OpenDevin main * test: update tests to pass * chore: finish merging changes, security analyzer now operational again * feat: document Security Analyzers * refactor: api, monitor * chore: lint, fix risk None, revert policy * fix: check security_risk for None * refactor: rename instances of invariant to security analyzer * feat: add /api/options/security-analyzers endpoint * Move security analyzer from tab to modal * Temporary fix lock when security analyzer is not chosen * feat: don't show lock at all when security analyzer is not enabled * refactor: - Frontend: * change type of SECURITY_ANALYZER from bool to string * add combobox to select SECURITY_ANALYZER, current options are "invariant and "" (no security analyzer) * Security is now a modal, lock in bottom right is visible only if there's a security analyzer selected - Backend: * add close to SecurityAnalyzer * instantiate SecurityAnalyzer based on provided string from frontend * fix: update close to be async, to be consistent with other close on resources * fix: max height of modal (prevent overflow) * feat: add logo * small fixes * update docs for creating a security analyzer module * fix linting * update timeout for http client * fix: move security_analyzer config from agent to session * feat: add security_risk to browser actions * add optional remark on combobox * fix: asdict not called on dataclass, remove invariant dependency * fix: exclude None values when serializing * feat: take default policy from invariant-server instead of being hardcoded * fix: check if policy is None * update image name * test: fix some failing runs * fix: security analyzer tests * refactor: merge confirmation_mode and security_analyzer into SecurityConfig. Change invariant error message for docker * test: add tests for invariant parsing actions / observations * fix: python linting for test_security.py * Apply suggestions from code review Co-authored-by: Engel Nyst <enyst@users.noreply.github.com> * use ActionSecurityRisk | None intead of Optional * refactor action parsing * add extra check * lint parser.py * test: add field keep_prompt to test_security * docs: add information about how to enable the analyzer * test: Remove trailing whitespace in README.md text --------- Co-authored-by: Mislav Balunovic <mislav.balunovic@gmail.com> Co-authored-by: Engel Nyst <enyst@users.noreply.github.com> Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
from enum import Enum
|
|
|
|
|
|
class ConfigType(str, Enum):
|
|
# For frontend
|
|
LLM_CUSTOM_LLM_PROVIDER = 'LLM_CUSTOM_LLM_PROVIDER'
|
|
LLM_DROP_PARAMS = 'LLM_DROP_PARAMS'
|
|
LLM_MAX_INPUT_TOKENS = 'LLM_MAX_INPUT_TOKENS'
|
|
LLM_MAX_OUTPUT_TOKENS = 'LLM_MAX_OUTPUT_TOKENS'
|
|
LLM_TOP_P = 'LLM_TOP_P'
|
|
LLM_TEMPERATURE = 'LLM_TEMPERATURE'
|
|
LLM_TIMEOUT = 'LLM_TIMEOUT'
|
|
LLM_API_KEY = 'LLM_API_KEY'
|
|
LLM_BASE_URL = 'LLM_BASE_URL'
|
|
AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID'
|
|
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
|
|
AWS_REGION_NAME = 'AWS_REGION_NAME'
|
|
WORKSPACE_BASE = 'WORKSPACE_BASE'
|
|
WORKSPACE_MOUNT_PATH = 'WORKSPACE_MOUNT_PATH'
|
|
WORKSPACE_MOUNT_REWRITE = 'WORKSPACE_MOUNT_REWRITE'
|
|
WORKSPACE_MOUNT_PATH_IN_SANDBOX = 'WORKSPACE_MOUNT_PATH_IN_SANDBOX'
|
|
CACHE_DIR = 'CACHE_DIR'
|
|
LLM_MODEL = 'LLM_MODEL'
|
|
CONFIRMATION_MODE = 'CONFIRMATION_MODE'
|
|
SANDBOX_CONTAINER_IMAGE = 'SANDBOX_CONTAINER_IMAGE'
|
|
RUN_AS_DEVIN = 'RUN_AS_DEVIN'
|
|
LLM_EMBEDDING_MODEL = 'LLM_EMBEDDING_MODEL'
|
|
LLM_EMBEDDING_BASE_URL = 'LLM_EMBEDDING_BASE_URL'
|
|
LLM_EMBEDDING_DEPLOYMENT_NAME = 'LLM_EMBEDDING_DEPLOYMENT_NAME'
|
|
LLM_API_VERSION = 'LLM_API_VERSION'
|
|
LLM_NUM_RETRIES = 'LLM_NUM_RETRIES'
|
|
LLM_RETRY_MIN_WAIT = 'LLM_RETRY_MIN_WAIT'
|
|
LLM_RETRY_MAX_WAIT = 'LLM_RETRY_MAX_WAIT'
|
|
AGENT_MEMORY_MAX_THREADS = 'AGENT_MEMORY_MAX_THREADS'
|
|
AGENT_MEMORY_ENABLED = 'AGENT_MEMORY_ENABLED'
|
|
MAX_ITERATIONS = 'MAX_ITERATIONS'
|
|
AGENT = 'AGENT'
|
|
E2B_API_KEY = 'E2B_API_KEY'
|
|
SECURITY_ANALYZER = 'SECURITY_ANALYZER'
|
|
SANDBOX_USER_ID = 'SANDBOX_USER_ID'
|
|
SANDBOX_TIMEOUT = 'SANDBOX_TIMEOUT'
|
|
USE_HOST_NETWORK = 'USE_HOST_NETWORK'
|
|
DISABLE_COLOR = 'DISABLE_COLOR'
|
|
DEBUG = 'DEBUG'
|
|
FILE_UPLOADS_MAX_FILE_SIZE_MB = 'FILE_UPLOADS_MAX_FILE_SIZE_MB'
|
|
FILE_UPLOADS_RESTRICT_FILE_TYPES = 'FILE_UPLOADS_RESTRICT_FILE_TYPES'
|
|
FILE_UPLOADS_ALLOWED_EXTENSIONS = 'FILE_UPLOADS_ALLOWED_EXTENSIONS'
|