🙌 OpenHands: AI-Driven Development
This report presents the forensic synthetic code analysis of OpenHands/OpenHands, a Python project with 80,698 GitHub stars. SynthScan v2.0 examined 396,267 lines of code across 2195 source files, recording 7202 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 23.2 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 7202 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …tend/__tests__/conversation-websocket-handler.test.tsx | 92 | function renderWithWebSocketContext( | CODE |
| LOW | …__/components/features/user/user-context-menu.test.tsx | 38 | function UserContextMenuWithRootOutlet({ | CODE |
| LOW | …end/__tests__/hooks/use-click-outside-element.test.tsx | 10 | function ClickOutsideTestComponent({ | CODE |
| LOW | frontend/__tests__/routes/llm-settings.test.tsx | 49 | function resetProfilesServiceDefaults() { | CODE |
| LOW | frontend/__tests__/routes/llm-settings.test.tsx | 67 | function resetOrgProfilesServiceDefaults() { | CODE |
| LOW | frontend/__tests__/routes/llm-settings.test.tsx | 188 | function buildSettingsWithAdvancedToggle( | CODE |
| LOW | frontend/__tests__/routes/billing.test.tsx | 350 | function renderWithForcedReRenders( | CODE |
| LOW | …ontend/__tests__/routes/verification-settings.test.tsx | 43 | function renderVerificationSettingsScreen() { | CODE |
| LOW | frontend/__tests__/routes/task-list-tab.test.tsx | 20 | function createTaskTrackingObservation( | CODE |
| LOW | …/__tests__/routes/manage-organization-members.test.tsx | 56 | function ManageOrganizationMembersWithPortalRoot() { | CODE |
| LOW | …ontend/__tests__/helpers/websocket-test-components.tsx | 12 | export function ConnectionStatusComponent() { | CODE |
| LOW | …ontend/__tests__/helpers/websocket-test-components.tsx | 45 | export function OptimisticUserMessageStoreComponent() { | CODE |
| LOW | …ontend/__tests__/helpers/websocket-test-components.tsx | 59 | export function ErrorMessageStoreComponent() { | CODE |
| LOW | …ontend/src/contexts/conversation-websocket-context.tsx | 80 | export function ConversationWebSocketProvider({ | CODE |
| LOW | …nd/src/context/conversation-subscriptions-provider.tsx | 73 | export function ConversationSubscriptionsProvider({ | CODE |
| LOW | …nd/src/context/conversation-subscriptions-provider.tsx | 322 | export function useConversationSubscriptions() { | CODE |
| LOW | frontend/src/constants/acp-provider-secrets.ts | 103 | export function getAcpCredentialConflicts( | CODE |
| LOW | frontend/src/utils/download-trajectory.ts | 3 | function isSaveFilePickerSupported(): boolean { | CODE |
| LOW | frontend/src/utils/sdk-settings-field-metadata.ts | 65 | export function getSettingsFieldConstraints(fieldKey: string) { | CODE |
| LOW | frontend/src/utils/sdk-settings-field-metadata.ts | 125 | export function resolveSchemaFieldDescription( | CODE |
| LOW | frontend/src/utils/sdk-settings-field-metadata.ts | 137 | export function resolveSchemaFieldSectionLabel( | CODE |
| LOW | frontend/src/utils/mcp-config.ts | 61 | function apiKeyFromAuthorizationHeader(value: unknown): string | undefined { | CODE |
| LOW | frontend/src/utils/error-handler.ts | 45 | export function isBudgetOrCreditError(errorMessage: string): boolean { | CODE |
| LOW | frontend/src/utils/file-validation.ts | 13 | export function validateIndividualFileSizes( | CODE |
| LOW | frontend/src/utils/sdk-settings-schema.ts | 90 | export function getConversationSettingValue( | CODE |
| LOW | frontend/src/utils/sdk-settings-schema.ts | 219 | export function buildInitialSettingsFormValues( | CODE |
| LOW | frontend/src/utils/sdk-settings-schema.ts | 284 | export function hasAdvancedSettingsOverrides(settings: Settings): boolean { | CODE |
| LOW | frontend/src/utils/sdk-settings-schema.ts | 409 | export function buildSdkSettingsPayloadForView( | CODE |
| LOW | frontend/src/utils/sdk-settings-schema.ts | 431 | export function getVisibleSettingsSections( | CODE |
| LOW | frontend/src/utils/conversation-local-storage.ts | 128 | export function clearConversationLocalStorage(conversationId: string) { | CODE |
| LOW | frontend/src/utils/conversation-local-storage.ts | 153 | export function useConversationLocalStorageState(conversationId: string): { | CODE |
| LOW | frontend/src/utils/derive-profile-name.ts | 19 | export function deriveProfileNameFromModel(model: string): string | null { | CODE |
| LOW | frontend/src/utils/org/permission-guard.ts | 26 | async function getPermissionDeniedFallback(): Promise<string> { | CODE |
| LOW | …at/task-tracking/task-tracking-observation-content.tsx | 10 | export function TaskTrackingObservationContent({ | CODE |
| LOW | …rc/components/v1/chat/hooks/use-plan-preview-events.ts | 50 | function findLastPlanningObservationInPhase( | CODE |
| LOW | …ents/v1/chat/subagent/subagent-observation-content.tsx | 34 | export function SubagentObservationContent({ | CODE |
| LOW | …hat/event-message-components/critic-result-display.tsx | 39 | function getIterativeRefinementEnabled( | CODE |
| LOW | …-message-components/observation-pair-event-message.tsx | 10 | export function ObservationPairEventMessage({ | CODE |
| LOW | …t-message-components/generic-event-message-wrapper.tsx | 23 | export function GenericEventMessageWrapper({ | CODE |
| LOW | …nt-message-components/user-assistant-event-message.tsx | 15 | export function UserAssistantEventMessage({ | CODE |
| LOW | …nts/features/settings/upgrade-banner-with-backdrop.tsx | 9 | export function UpgradeBannerWithBackdrop({ | CODE |
| LOW | …/project-management/project-management-integration.tsx | 8 | export function ProjectManagementIntegration() { | CODE |
| LOW | …settings/llm-settings/llm-settings-inputs-skeleton.tsx | 5 | export function LlmSettingsInputsSkeleton() { | CODE |
| LOW | …settings/app-settings/app-settings-inputs-skeleton.tsx | 4 | export function AppSettingsInputsSkeleton() { | CODE |
| LOW | …settings/git-settings/azure-devops-webhook-manager.tsx | 50 | export function AzureDevOpsWebhookManager({ | CODE |
| LOW | …ttings/git-settings/azure-devops-token-help-anchor.tsx | 4 | export function AzureDevOpsTokenHelpAnchor() { | CODE |
| LOW | …ttings/git-settings/bitbucket-dc-token-help-anchor.tsx | 4 | export function BitbucketDCTokenHelpAnchor() { | CODE |
| LOW | …ettings/git-settings/configure-azure-devops-anchor.tsx | 7 | export function ConfigureAzureDevOpsAnchor() { | CODE |
| LOW | …/git-settings/configure-github-repositories-anchor.tsx | 9 | export function ConfigureGitHubRepositoriesAnchor({ | CODE |
| LOW | …settings/git-settings/bitbucket-dc-webhook-manager.tsx | 38 | export function BitbucketDCWebhookManager({ | CODE |
| LOW | …settings/git-settings/gitlab-webhook-manager-state.tsx | 13 | export function GitLabWebhookManagerState({ | CODE |
| LOW | …recent-conversations/recent-conversations-skeleton.tsx | 29 | function RecentConversationSkeleton({ | CODE |
| LOW | …recent-conversations/recent-conversations-skeleton.tsx | 44 | export function RecentConversationsSkeleton() { | CODE |
| LOW | …recent-conversations/conversation-status-indicator.tsx | 12 | export function ConversationStatusIndicator({ | CODE |
| LOW | …ents/features/chat/git-control-bar-tooltip-wrapper.tsx | 10 | export function GitControlBarTooltipWrapper({ | CODE |
| LOW | …ts/features/chat/task-tracking-observation-content.tsx | 8 | export function TaskTrackingObservationContent({ | CODE |
| LOW | …onents/features/chat/git-control-bar-branch-button.tsx | 15 | export function GitControlBarBranchButton({ | CODE |
| LOW | …-message-components/observation-pair-event-message.tsx | 14 | export function ObservationPairEventMessage({ | CODE |
| LOW | …t-message-components/generic-event-message-wrapper.tsx | 20 | export function GenericEventMessageWrapper({ | CODE |
| LOW | …nt-message-components/user-assistant-event-message.tsx | 14 | export function UserAssistantEventMessage({ | CODE |
| 4795 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/__tests__/routes/llm-settings.test.tsx | 2457 | // ── Auto-profile flow ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/__tests__/routes/llm-settings.test.tsx | 2739 | // ── Add Profile (create flow) ─────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 99 | // ── Sub-agents (OpenHands mode) ────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 120 | // ── Parallel tool calls (OpenHands mode) ───────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 140 | // ── ACP (ACP mode) ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 179 | // ── Derived state ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 201 | // ── Credential form ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 218 | // ── Save ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 285 | // ── Loading ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/routes/agent-settings.tsx | 290 | // ── Render ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_billing.py | 652 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_billing.py | 654 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 379 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 381 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 1217 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 1219 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_agent_profiles.py | 64 | # ── Container model ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | enterprise/tests/unit/test_agent_profiles.py | 166 | # ── Router integration (real Org row over SQLite) ────────────────────────── | COMMENT |
| MEDIUM | enterprise/tests/unit/test_agent_profiles.py | 506 | # ── FK guard wired into the LLM-profile router ───────────────────────────── | COMMENT |
| MEDIUM | enterprise/tests/unit/test_agent_profiles.py | 586 | # ── SaasSettingsStore resolution + provenance ────────────────────────────── | COMMENT |
| MEDIUM | enterprise/tests/unit/test_agent_profiles.py | 783 | # ── Persisted vs resolved settings views ──────────────────────────────────── | COMMENT |
| MEDIUM | enterprise/tests/unit/test_agent_profiles.py | 1008 | # ── Best-effort load must not amplify into data loss ──────────────────────── | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_org_store.py | 1387 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_org_store.py | 1389 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 91 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 93 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 129 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 131 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 232 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 234 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 280 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 282 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 370 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 372 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 873 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 875 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1011 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1013 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1211 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1213 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1442 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_authorization.py | 1444 | # ============================================================================= | COMMENT |
| MEDIUM | enterprise/tests/unit/test_authorization.py | 27 | # ============================================================================= | COMMENT |
| MEDIUM | enterprise/tests/unit/test_authorization.py | 29 | # ============================================================================= | COMMENT |
| MEDIUM | enterprise/tests/unit/test_authorization.py | 481 | # ============================================================================= | COMMENT |
| MEDIUM | enterprise/tests/unit/test_authorization.py | 483 | # ============================================================================= | COMMENT |
| MEDIUM | enterprise/tests/unit/test_org_profiles.py | 180 | # ── Integration tests ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_auth_routes.py | 2501 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_auth_routes.py | 2503 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_auth_routes.py | 2592 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_auth_routes.py | 2594 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …erprise/tests/unit/test_email_validation_dependency.py | 275 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …erprise/tests/unit/test_email_validation_dependency.py | 277 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 214 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …tests/unit/test_sharing/test_shared_event_filtering.py | 239 | # --------------------------------------------------------------------------- | COMMENT |
| 324 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 47 | # Create a stale task (working for more than 1 hour) | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 57 | # Create a non-stale task (working for less than 1 hour) | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 267 | # Create a mock processor that raises an exception | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 271 | # Create a task | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 380 | # Create a mock processor | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_run_maintenance_tasks.py | 384 | # Create a task with delay | COMMENT |
| MEDIUM | enterprise/tests/unit/test_run_maintenance_tasks.py | 87 | # Create a pending task (older) | COMMENT |
| MEDIUM | enterprise/tests/unit/test_run_maintenance_tasks.py | 168 | # Create a pending task | COMMENT |
| MEDIUM | enterprise/tests/unit/test_run_maintenance_tasks.py | 179 | # Create a patched version of next_task with the bug fixed | COMMENT |
| MEDIUM | enterprise/tests/unit/test_run_maintenance_tasks.py | 210 | # Create a mock processor | COMMENT |
| MEDIUM | enterprise/tests/unit/test_run_maintenance_tasks.py | 426 | # Create a stale task and a pending task | COMMENT |
| MEDIUM | enterprise/tests/unit/test_stripe_service_db.py | 80 | # Create a mock org object to return from OrgStore | COMMENT |
| MEDIUM | enterprise/tests/unit/test_stripe_service_db.py | 120 | # Create a mock org object to return from OrgStore | COMMENT |
| MEDIUM | enterprise/tests/unit/test_stripe_service_db.py | 164 | # Create a mock org object to return from OrgStore | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 771 | # Create a JWT access token | COMMENT |
| MEDIUM⚡ | enterprise/tests/unit/test_saas_user_auth.py | 780 | # Create a signed token containing the access and refresh tokens | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 144 | # Create a valid JWT token that expires in the future | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 725 | # Create a signed token | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 805 | # Create a mock request with Authorization header | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 818 | # Create a mock request with X-Session-API-Key header | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 831 | # Create a mock request with both headers | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 847 | # Create a mock request with no relevant headers or cookies | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 861 | # Create a mock request with incorrectly formatted Authorization header | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 875 | # Create a mock request with X-Access-Token header | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 888 | # Create a mock request with both headers | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 904 | # Create a mock request with both headers | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 920 | # Create a mock request with all three headers | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 937 | # Create a mock request with invalid Authorization header and X-Access-Token | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 953 | # Create a mock request with empty header values | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 970 | # Create a mock request with Bearer header with empty token | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 987 | # Create a mock request with the api_key cookie set | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_user_auth.py | 222 | # Create a valid JWT token | STRING |
| MEDIUM | enterprise/tests/unit/test_gitlab_resolver.py | 34 | # Create a mock request with a payload containing object_attributes.id | COMMENT |
| MEDIUM | enterprise/tests/unit/test_gitlab_resolver.py | 109 | # Create a mock request with a payload without object_attributes.id | COMMENT |
| MEDIUM | enterprise/tests/unit/test_gitlab_resolver.py | 256 | # Create a payload with object_attributes.id | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_secrets_store.py | 58 | # Create a Secrets object with some test data | COMMENT |
| MEDIUM | enterprise/tests/unit/test_saas_secrets_store.py | 97 | # Create a Secrets object with sensitive data | COMMENT |
| MEDIUM | enterprise/tests/unit/test_org_store.py | 53 | # Create a test org | COMMENT |
| MEDIUM | enterprise/tests/unit/test_org_store.py | 126 | # Create a test org | COMMENT |
| MEDIUM | enterprise/tests/unit/test_org_store.py | 338 | # Create a test org | COMMENT |
| MEDIUM | enterprise/tests/unit/test_org_store.py | 1339 | # Create a second org for the user's current_org_id | COMMENT |
| MEDIUM | enterprise/tests/unit/test_auth_middleware.py | 464 | # Create a fresh mock request for each test | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 21 | # Create a mock request | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 26 | # Create a mock stripe session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 30 | # Create a mock for stripe.checkout.Session.create_async | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 33 | # Create a mock for the CreateBillingSessionResponse class | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 38 | # Create a mock implementation of create_customer_setup_session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 46 | # Create the session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 75 | # Create a mock request | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 80 | # Create a mock stripe session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 85 | # Create a mock for stripe.checkout.Session.create_async | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 88 | # Create a mock for the CreateBillingSessionResponse class | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 93 | # Create a mock for the CreateCheckoutSessionRequest class | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 98 | # Create a mock implementation of create_checkout_session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 106 | # Create the session | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 161 | # Create a mock request | COMMENT |
| MEDIUM⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 168 | # Create a mock implementation of has_payment_method route | COMMENT |
| MEDIUM | enterprise/tests/unit/mock_stripe_service.py | 58 | # Create the customer in stripe | COMMENT |
| MEDIUM | enterprise/tests/unit/test_models.py | 31 | # Create a test org | COMMENT |
| MEDIUM | enterprise/tests/unit/test_models.py | 36 | # Create a test user | COMMENT |
| 151 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | enterprise/run_maintenance_tasks.py | 19 | except Exception as e: | CODE |
| LOW | enterprise/run_maintenance_tasks.py | 52 | except Exception as e: | CODE |
| MEDIUM | enterprise/run_maintenance_tasks.py | 15 | def main(): | CODE |
| LOW | enterprise/enterprise_local/convert_to_env.py | 50 | except Exception as decode_error: | CODE |
| MEDIUM | enterprise/enterprise_local/convert_to_env.py | 51 | print(f"Error decoding base64 for '{param}': {decode_error}") | CODE |
| LOW | enterprise/enterprise_local/convert_to_env.py | 71 | except Exception as e: | CODE |
| MEDIUM | enterprise/enterprise_local/convert_to_env.py | 72 | print(f'Error: {e}') | CODE |
| LOW | …/tests/unit/test_maintenance_task_runner_standalone.py | 113 | except Exception: | CODE |
| LOW | …/tests/unit/test_maintenance_task_runner_standalone.py | 162 | except Exception: | CODE |
| LOW | …/tests/unit/test_maintenance_task_runner_standalone.py | 297 | except Exception as e: | CODE |
| LOW | …/tests/unit/test_maintenance_task_runner_standalone.py | 365 | except Exception as e: | CODE |
| LOW | …/tests/unit/test_maintenance_task_runner_standalone.py | 622 | except Exception as e: | CODE |
| LOW | …unit/test_user_version_upgrade_processor_standalone.py | 170 | except Exception as e: | CODE |
| LOW | enterprise/server/rate_limit.py | 67 | except Exception: | CODE |
| LOW | enterprise/server/rate_limit.py | 73 | except Exception: | CODE |
| LOW | enterprise/server/middleware.py | 93 | except Exception as logout_error: | CODE |
| LOW | enterprise/server/middleware.py | 140 | except Exception as e: | CODE |
| LOW | enterprise/server/middleware.py | 222 | except Exception: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 132 | except Exception: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 678 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 781 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 820 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 969 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/token_manager.py | 1114 | except Exception: | CODE |
| LOW | enterprise/server/auth/saas_user_auth.py | 518 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/saas_user_auth.py | 567 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/saas_user_auth.py | 585 | except Exception as e: | CODE |
| LOW | enterprise/server/auth/saas_user_auth.py | 716 | except Exception as e: | CODE |
| LOW⚡ | enterprise/server/auth/saas_user_auth.py | 805 | except Exception as exc: | CODE |
| LOW⚡ | enterprise/server/auth/saas_user_auth.py | 815 | except Exception as exc: | CODE |
| LOW | enterprise/server/auth/gitlab_sync.py | 68 | except Exception: | CODE |
| MEDIUM | enterprise/server/auth/gitlab_sync.py | 46 | def _run(): | CODE |
| LOW | enterprise/server/auth/sheets_client.py | 26 | except Exception: | CODE |
| LOW | enterprise/server/auth/sheets_client.py | 107 | except Exception: | CODE |
| LOW | enterprise/server/auth/user/user_authorizer.py | 43 | except Exception as ex: | CODE |
| LOW | enterprise/server/auth/user/default_user_authorizer.py | 82 | except Exception: | CODE |
| LOW | enterprise/server/utils/rate_limit_utils.py | 120 | except Exception as e: | CODE |
| LOW | …e/server/verified_models/litellm_proxy_model_router.py | 250 | except Exception: | CODE |
| LOW | …prise/server/app_lifespan/saas_app_lifespan_service.py | 43 | except Exception: | CODE |
| LOW | …prise/server/app_lifespan/saas_app_lifespan_service.py | 54 | except Exception: | CODE |
| MEDIUM | …prise/server/app_lifespan/saas_app_lifespan_service.py | 38 | def __aexit__(self, exc_type, exc_value, traceback): | CODE |
| LOW | enterprise/server/routes/auth.py | 152 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 177 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 216 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 247 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 319 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/auth.py | 396 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/auth.py | 574 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/auth.py | 594 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/auth.py | 605 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/auth.py | 710 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 959 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 1097 | except Exception: | CODE |
| LOW | enterprise/server/routes/auth.py | 1143 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/service.py | 182 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/analytics_events.py | 104 | except Exception: | CODE |
| LOW | enterprise/server/routes/oauth_device.py | 117 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/oauth_device.py | 233 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/oauth_device.py | 299 | except Exception as e: | CODE |
| LOW | enterprise/server/routes/oauth_device.py | 312 | except Exception as cleanup_error: | CODE |
| 466 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | enterprise/server/email_validation.py | 15 | Dependency that validates user has @openhands.dev email domain. This dependency can be used in place of get_us | STRING |
| HIGH | enterprise/server/email_validation.py | 75 | Dependency that authorizes a user to create an organization. Behavior is gated by the ``OPEN_ORG_CREATION_ENAB | STRING |
| HIGH | enterprise/server/auth/token_manager.py | 154 | Get user info from Keycloak userinfo endpoint. Args: access_token: A valid Keycloak access token | STRING |
| HIGH | enterprise/server/auth/token_manager.py | 742 | Check if a user with the same base email already exists. This method checks for duplicate signups using email + | STRING |
| HIGH | enterprise/server/auth/token_manager.py | 835 | Create a new Keycloak user in the configured realm. Used by the provisioning endpoint to seed accounts on behal | STRING |
| HIGH | enterprise/server/auth/token_manager.py | 883 | Exchange password credentials for an offline refresh token. Uses the Resource Owner Password Credentials (ROPC) | STRING |
| HIGH | enterprise/server/auth/email_validation.py | 7 | Extract base email from an email address. For emails with + modifier, extracts the base email (local part before + | STRING |
| HIGH | enterprise/server/auth/authorization.py | 553 | Authorization dependency for accessing organization financial data. Allows access if ANY of these conditions a | STRING |
| HIGH | …terprise/server/utils/saas_pending_message_injector.py | 123 | Queue a message with ownership validation. Args: conversation_id: The conversation ID to queue the | STRING |
| HIGH | …terprise/server/utils/saas_pending_message_injector.py | 140 | Get pending messages with ownership validation. Args: conversation_id: The conversation ID to get m | STRING |
| HIGH | …terprise/server/utils/saas_pending_message_injector.py | 155 | Count pending messages with ownership validation. Args: conversation_id: The conversation ID to cou | STRING |
| HIGH | …se/server/utils/saas_app_conversation_info_injector.py | 52 | Apply user_id and org_id filters to ensure conversation isolation. Filters conversations by: - user_id: | STRING |
| HIGH | enterprise/server/routes/service.py | 60 | Validate the service API key from the request header. Args: x_service_api_key: The service API key fro | STRING |
| HIGH | enterprise/server/routes/service.py | 118 | Get or create an API key for a user on behalf of the automations service. If a key with the given name already | STRING |
| HIGH | enterprise/server/routes/service.py | 221 | Delete a system API key created by the service. This endpoint allows the automations service to clean up API k | STRING |
| HIGH | enterprise/server/routes/user_app_settings.py | 32 | Get the current user's app settings. Returns language, analytics consent, sound notifications, and git config. | STRING |
| HIGH | enterprise/server/routes/user_app_settings.py | 77 | Update the current user's app settings (partial update). Only provided fields will be updated. Pass null to clear a | STRING |
| HIGH | enterprise/server/routes/orgs.py | 115 | List organizations for the authenticated user. This endpoint returns a paginated list of all organizations that the | STRING |
| HIGH | enterprise/server/routes/orgs.py | 190 | Create a new organization. This endpoint allows authenticated users that hold the ``CREATE_ORGANIZATION`` permi | STRING |
| HIGH | enterprise/server/routes/orgs.py | 438 | Get organization app settings for the user's current organization. This endpoint retrieves application settings for | STRING |
| HIGH | enterprise/server/routes/orgs.py | 483 | Update organization app settings for the user's current organization. Base access requires MANAGE_APPLICATION_SETTI | STRING |
| HIGH | enterprise/server/routes/orgs.py | 591 | Get the current user's membership record for an organization. Returns the authenticated user's role, status, email, | STRING |
| HIGH | enterprise/server/routes/orgs.py | 653 | Delete an organization. This endpoint permanently deletes an organization and all associated data including org | STRING |
| HIGH | enterprise/server/routes/orgs.py | 766 | Update an existing organization. This endpoint updates organization settings. Access requires the EDIT_ORG_SETTINGS | STRING |
| HIGH | enterprise/server/routes/orgs.py | 872 | Get all members of an organization with pagination and optional email filter. This endpoint retrieves a paginated l | STRING |
| HIGH | enterprise/server/routes/orgs.py | 965 | Get count of organization members with optional email filter. This endpoint returns the total count of organization | STRING |
| HIGH | enterprise/server/routes/orgs.py | 1041 | Get paginated financial data for organization members. Returns financial information (lifetime spend, current budge | STRING |
| HIGH | enterprise/server/routes/orgs.py | 1345 | Switch to a different organization. This endpoint allows authenticated users to switch their current active org | STRING |
| HIGH | enterprise/server/routes/orgs.py | 1567 | Claim a Git organization for an OpenHands organization. Only admin and owner roles can claim Git organizations. | STRING |
| HIGH | enterprise/server/routes/orgs.py | 1655 | Remove a Git organization claim from an OpenHands organization. Only admin and owner roles can disconnect Git organ | STRING |
| HIGH | enterprise/server/routes/orgs.py | 1773 | List all conversations for an organization. This endpoint returns a paginated list of all conversations within an o | STRING |
| HIGH | enterprise/server/routes/org_invitations.py | 64 | Create organization invitations for multiple email addresses. Sends emails to invitees with secure links to join th | STRING |
| HIGH | enterprise/server/routes/org_invitations.py | 298 | Accept an organization invitation via authenticated POST request. This endpoint is called by the frontend after dis | STRING |
| HIGH | enterprise/server/routes/integration/jira.py | 131 | Verify Jira webhook signature. Args: body: Raw request body bytes signature: Signature from x- | STRING |
| HIGH | …rprise/server/services/org_member_financial_service.py | 26 | Get paginated financial data for organization members. Fetches member list from database and joins with financi | STRING |
| HIGH | enterprise/server/services/org_app_settings_service.py | 89 | Update organization app settings. Only updates fields that are explicitly provided in update_data. User | STRING |
| HIGH | enterprise/server/services/org_member_service.py | 32 | Get the current user's membership record for an organization. Retrieves the authenticated user's role, status, | STRING |
| HIGH | enterprise/server/services/org_member_service.py | 146 | Get count of organization members with authorization check. Args: org_id: Organization UUID. | STRING |
| HIGH | enterprise/server/services/org_member_service.py | 257 | Update a member's role in an organization. Permission rules: - Owners can modify anyone (including othe | STRING |
| HIGH | enterprise/server/services/org_invitation_service.py | 38 | Create a new organization invitation. This method: 1. Validates the organization exists 2. Vali | STRING |
| HIGH | enterprise/server/services/org_invitation_service.py | 166 | Create multiple organization invitations concurrently. Validates permissions once upfront, then creates invitat | STRING |
| HIGH | enterprise/server/services/org_invitation_service.py | 358 | Accept an organization invitation. This method: 1. Validates the token and invitation status 2. | STRING |
| HIGH | enterprise/server/services/user_app_settings_service.py | 64 | Update user app settings. Only updates fields that are explicitly provided in update_data. User ID is o | STRING |
| HIGH | enterprise/storage/org_app_settings_store.py | 100 | Update organization app settings. Only updates fields that are explicitly provided in update_data. Uses | STRING |
| HIGH | enterprise/storage/auth_token_store.py | 109 | Load authentication tokens from the database and refresh them if necessary. This method uses a double-checked l | STRING |
| HIGH | enterprise/storage/device_code_store.py | 34 | Create a new device code entry. Uses database constraints to ensure uniqueness, avoiding TOCTOU race conditions | STRING |
| HIGH | enterprise/storage/org_service.py | 59 | Create LiteLLM team integration for the organization. Args: org_id: Organization ID | STRING |
| HIGH | enterprise/storage/org_service.py | 200 | Create a new organization, optionally with the specified user as owner. This method orchestrates the c | STRING |
| HIGH | enterprise/storage/org_service.py | 311 | Persist organization with compensation on failure. If database persistence fails, cleans up LiteLLM re | STRING |
| HIGH | enterprise/storage/org_service.py | 497 | Update organization with permission checks for LLM settings. Args: org_id: Organization UU | STRING |
| HIGH | enterprise/storage/org_service.py | 698 | Get organization by ID with membership validation. This method verifies that the user is a member of t | STRING |
| HIGH | enterprise/storage/org_service.py | 785 | Delete organization with complete cleanup of all associated data. This method performs the complete or | STRING |
| HIGH | enterprise/storage/org_service.py | 881 | Switch user's current organization to the specified organization. This method: 1. Validates th | STRING |
| HIGH | enterprise/storage/org_store.py | 500 | Persist organization and optional owner membership in a single transaction. Args: org: Organization | STRING |
| HIGH | enterprise/storage/org_store.py | 524 | Delete organization and all associated data in cascade, including external LiteLLM cleanup. Users that belong t | STRING |
| HIGH | enterprise/storage/resend_synced_user_store.py | 59 | Mark a user as synced to a specific audience. Uses upsert to handle race conditions - if the user is already | STRING |
| HIGH | enterprise/integrations/jira/jira_view.py | 468 | Create a Jira view with repository already selected. This factory method: 1. Creates the view with payl | STRING |
| HIGH | enterprise/integrations/github/github_service.py | 122 | Get the new GitHub GraphQL node ID for a repository using REST API. Args: repo_id: Numeric | STRING |
| HIGH | enterprise/integrations/slack/slack_manager.py | 157 | Retrieve stored user message from Redis. Args: message_ts: The message timestamp thread | STRING |
| HIGH | enterprise/sync/resend_keycloak.py | 172 | Get contacts from Resend. Args: audience_id: The Resend audience ID. Returns: A dictionary map | STRING |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | enterprise/tests/unit/conftest.py | 0 | create an async session maker bound to the async engine. | STRING |
| HIGH | …tests/unit/server/auth/test_saas_user_auth_org_info.py | 0 | create an async session maker bound to the async engine. | STRING |
| HIGH | enterprise/tests/unit/storage/test_auth_token_store.py | 0 | create an async session maker bound to the async engine. | STRING |
| HIGH | …se/tests/unit/storage/test_user_authorization_store.py | 0 | create an async session maker bound to the async engine. | STRING |
| HIGH | …storage/test_saas_sql_app_conversation_info_service.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | …/app_server/test_webhook_router_parent_conversation.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | …t/app_server/test_sql_app_conversation_info_service.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | tests/unit/app_server/test_webhook_router_stats.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | tests/unit/app_server/test_webhook_router_auto_title.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | tests/unit/app_server/test_webhook_router_tags.py | 0 | create a sqlappconversationinfoservice instance for testing. | STRING |
| HIGH | …tegrations/gitlab/test_gitlab_v1_callback_processor.py | 0 | test that budget exceeded errors are logged at info level and user gets friendly message. | STRING |
| HIGH | …tegrations/github/test_github_v1_callback_processor.py | 0 | test that budget exceeded errors are logged at info level and user gets friendly message. | STRING |
| HIGH | …integrations/slack/test_slack_v1_callback_processor.py | 0 | test that budget exceeded errors are logged at info level and user gets friendly message. | STRING |
| HIGH | enterprise/server/sharing/shared_event_service.py | 0 | given a conversation_id and event_id, retrieve an event if the conversation is shared. | STRING |
| HIGH | enterprise/server/sharing/aws_shared_event_service.py | 0 | given a conversation_id and event_id, retrieve an event if the conversation is shared. | STRING |
| HIGH | …se/server/sharing/google_cloud_shared_event_service.py | 0 | given a conversation_id and event_id, retrieve an event if the conversation is shared. | STRING |
| HIGH | …rise/server/sharing/filesystem_shared_event_service.py | 0 | given a conversation_id and event_id, retrieve an event if the conversation is shared. | STRING |
| HIGH | enterprise/storage/jira_integration_store.py | 0 | deactivate the workspace and all user links for a given workspace. | STRING |
| HIGH | enterprise/storage/jira_dc_integration_store.py | 0 | deactivate the workspace and all user links for a given workspace. | STRING |
| HIGH | enterprise/storage/linear_integration_store.py | 0 | deactivate the workspace and all user links for a given workspace. | STRING |
| HIGH | enterprise/integrations/types.py | 0 | return instructions passed when conversation is first initialized. | STRING |
| HIGH | enterprise/integrations/jira_dc/jira_dc_view.py | 0 | return instructions passed when conversation is first initialized. | STRING |
| HIGH | enterprise/integrations/slack/slack_view.py | 0 | return instructions passed when conversation is first initialized. | STRING |
| HIGH | enterprise/integrations/gitlab/gitlab_view.py | 0 | create conversation using the v1 app conversation system. | STRING |
| HIGH | enterprise/integrations/jira/jira_view.py | 0 | create conversation using the v1 app conversation system. | STRING |
| HIGH | enterprise/integrations/github/github_view.py | 0 | create conversation using the v1 app conversation system. | STRING |
| HIGH | enterprise/integrations/slack/slack_view.py | 0 | create conversation using the v1 app conversation system. | STRING |
| HIGH | enterprise/integrations/jira_dc/jira_dc_view.py | 0 | create conversation using the v1 app conversation system. | STRING |
| HIGH | …se/integrations/gitlab/gitlab_v1_callback_processor.py | 0 | send a message to the agent server via the v1 api and return response text. | STRING |
| HIGH | …rprise/integrations/jira/jira_v1_callback_processor.py | 0 | send a message to the agent server via the v1 api and return response text. | STRING |
| HIGH | …/integrations/jira_dc/jira_dc_v1_callback_processor.py | 0 | send a message to the agent server via the v1 api and return response text. | STRING |
| HIGH | tests/unit/app_server/test_config_router.py | 0 | create a test client with the actual event router and mocked dependencies. we override check_session_api_key to bypass a | STRING |
| HIGH | tests/unit/app_server/test_git_router.py | 0 | create a test client with the actual event router and mocked dependencies. we override check_session_api_key to bypass a | STRING |
| HIGH | tests/unit/app_server/test_event_router.py | 0 | create a test client with the actual event router and mocked dependencies. we override check_session_api_key to bypass a | STRING |
| HIGH | tests/unit/integrations/gitlab/test_gitlab.py | 0 | test that get_repositories correctly sets owner_type field for user repositories. | STRING |
| HIGH | tests/unit/integrations/github/test_github_service.py | 0 | test that get_repositories correctly sets owner_type field for user repositories. | STRING |
| HIGH | tests/unit/integrations/bitbucket/test_bitbucket.py | 0 | test that get_repositories correctly sets owner_type field for user repositories. | STRING |
| HIGH | tests/unit/integrations/gitlab/test_gitlab.py | 0 | test that get_repositories correctly sets owner_type field for organization repositories. | STRING |
| HIGH | tests/unit/integrations/github/test_github_service.py | 0 | test that get_repositories correctly sets owner_type field for organization repositories. | STRING |
| HIGH | tests/unit/integrations/bitbucket/test_bitbucket.py | 0 | test that get_repositories correctly sets owner_type field for organization repositories. | STRING |
| HIGH | tests/unit/integrations/gitlab/test_gitlab.py | 0 | test that get_repositories correctly handles mixed user and organization repositories. | STRING |
| HIGH | tests/unit/integrations/github/test_github_service.py | 0 | test that get_repositories correctly handles mixed user and organization repositories. | STRING |
| HIGH | tests/unit/integrations/bitbucket/test_bitbucket.py | 0 | test that get_repositories correctly handles mixed user and organization repositories. | STRING |
| HIGH | openhands/app_server/integrations/service_types.py | 0 | check if a bitbucket pull request is still active (not closed/merged). args: repository: repository name in format 'owne | STRING |
| HIGH | …rver/integrations/bitbucket_data_center/service/prs.py | 0 | check if a bitbucket pull request is still active (not closed/merged). args: repository: repository name in format 'owne | STRING |
| HIGH | openhands/app_server/integrations/github/service/prs.py | 0 | check if a bitbucket pull request is still active (not closed/merged). args: repository: repository name in format 'owne | STRING |
| HIGH | …hands/app_server/integrations/bitbucket/service/prs.py | 0 | check if a bitbucket pull request is still active (not closed/merged). args: repository: repository name in format 'owne | STRING |
| HIGH | …nhands/app_server/integrations/gitlab/service/repos.py | 0 | parse a bitbucket api repository response into a repository object. args: repo: repository data from bitbucket api link_ | STRING |
| HIGH | …nhands/app_server/integrations/github/service/repos.py | 0 | parse a bitbucket api repository response into a repository object. args: repo: repository data from bitbucket api link_ | STRING |
| HIGH | …ands/app_server/integrations/bitbucket/service/base.py | 0 | parse a bitbucket api repository response into a repository object. args: repo: repository data from bitbucket api link_ | STRING |
| HIGH | …er/integrations/bitbucket_data_center/service/repos.py | 0 | get suggested tasks for the authenticated user across all repositories. | STRING |
| HIGH | …nds/app_server/integrations/bitbucket/service/repos.py | 0 | get suggested tasks for the authenticated user across all repositories. | STRING |
| HIGH | …p_server/integrations/azure_devops/service/features.py | 0 | get suggested tasks for the authenticated user across all repositories. | STRING |
| HIGH | …rver/integrations/bitbucket_data_center/service/prs.py | 0 | get detailed information about a specific pull request args: repository: repository name in format 'owner/repo' pr_numbe | STRING |
| HIGH | openhands/app_server/integrations/github/service/prs.py | 0 | get detailed information about a specific pull request args: repository: repository name in format 'owner/repo' pr_numbe | STRING |
| HIGH | …hands/app_server/integrations/bitbucket/service/prs.py | 0 | get detailed information about a specific pull request args: repository: repository name in format 'owner/repo' pr_numbe | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | enterprise/tests/unit/conftest.py | 9 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 21 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 25 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 29 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 30 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 31 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 32 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 34 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 36 | CODE | |
| LOW | enterprise/tests/unit/conftest.py | 44 | CODE | |
| LOW | enterprise/tests/unit/test_org_budget_service.py | 1 | CODE | |
| LOW | …tests/unit/test_sharing/test_shared_event_filtering.py | 9 | CODE | |
| LOW | …unit/server/auth/test_reject_x_org_id_path_mismatch.py | 14 | CODE | |
| LOW | enterprise/tests/unit/server/routes/conftest.py | 12 | CODE | |
| LOW | …ise/tests/unit/server/routes/test_org_budget_models.py | 1 | CODE | |
| LOW | …e/tests/unit/storage/test_saas_stores_effective_org.py | 17 | CODE | |
| LOW | …ts/unit/storage/test_jira_dc_active_link_constraint.py | 1 | CODE | |
| LOW | …/unit/storage/test_conversation_cost_events_cascade.py | 17 | CODE | |
| LOW | …ons/github/test_github_view_v1_initial_user_message.py | 1 | CODE | |
| LOW | enterprise/tests/unit/routes/test_user_provisioning.py | 10 | CODE | |
| LOW | …server/sharing/sql_shared_conversation_info_service.py | 9 | CODE | |
| LOW | enterprise/server/sharing/aws_shared_event_service.py | 11 | CODE | |
| LOW | …se/server/sharing/google_cloud_shared_event_service.py | 9 | CODE | |
| LOW | …rise/server/sharing/filesystem_shared_event_service.py | 9 | CODE | |
| LOW | enterprise/server/auth/org_context.py | 29 | CODE | |
| LOW | enterprise/server/auth/cookie_chunking.py | 18 | CODE | |
| LOW | …prise/server/app_lifespan/saas_app_lifespan_service.py | 7 | CODE | |
| LOW | enterprise/server/routes/super_admins.py | 19 | CODE | |
| LOW | enterprise/server/routes/agent_profiles.py | 27 | CODE | |
| LOW | enterprise/server/routes/user_provisioning.py | 73 | CODE | |
| LOW | enterprise/server/routes/integration/bitbucket_dc.py | 1 | CODE | |
| LOW | enterprise/server/routes/integration/bitbucket.py | 1 | CODE | |
| LOW | enterprise/server/routes/integration/azure_devops.py | 1 | CODE | |
| LOW | enterprise/server/services/org_app_settings_service.py | 7 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 7 | CODE | |
| LOW | enterprise/server/services/user_app_settings_service.py | 7 | CODE | |
| LOW | enterprise/server/services/org_budget_service.py | 1 | CODE | |
| LOW | …nce_task_processor/org_budget_maintenance_processor.py | 1 | CODE | |
| LOW | enterprise/storage/user_settings.py | 1 | CODE | |
| LOW | enterprise/storage/openhands_pr_store.py | 1 | CODE | |
| LOW | enterprise/storage/saas_settings_store.py | 1 | CODE | |
| LOW | enterprise/storage/user.py | 16 | CODE | |
| LOW | enterprise/storage/user.py | 17 | CODE | |
| LOW | enterprise/storage/user.py | 18 | CODE | |
| LOW | enterprise/storage/user.py | 19 | CODE | |
| LOW | enterprise/storage/user_repo_map_store.py | 1 | CODE | |
| LOW | enterprise/storage/bitbucket_webhook_store.py | 1 | CODE | |
| LOW | enterprise/storage/org.py | 17 | CODE | |
| LOW | enterprise/storage/org.py | 18 | CODE | |
| LOW | enterprise/storage/org.py | 19 | CODE | |
| LOW | enterprise/storage/org.py | 20 | CODE | |
| LOW | enterprise/storage/org.py | 21 | CODE | |
| LOW | enterprise/storage/org.py | 22 | CODE | |
| LOW | enterprise/storage/org.py | 23 | CODE | |
| LOW | enterprise/storage/org.py | 24 | CODE | |
| LOW | enterprise/storage/org.py | 25 | CODE | |
| LOW | enterprise/storage/org.py | 26 | CODE | |
| LOW | enterprise/storage/org.py | 27 | CODE | |
| LOW | enterprise/storage/bitbucket_dc_webhook_store.py | 1 | CODE | |
| LOW | enterprise/storage/stripe_customer.py | 10 | CODE | |
| 232 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/placeholder.spec.ts | 4 | test("placeholder", () => {}); | CODE |
| LOW | frontend/__tests__/utils/input-validation.test.ts | 12 | expect(isValidEmail("user@example.com")).toBe(true); | CODE |
| LOW | frontend/__tests__/utils/input-validation.test.ts | 87 | const emails = ["user@example.com", "test@domain.org"]; | CODE |
| LOW | frontend/__tests__/utils/input-validation.test.ts | 116 | const emails = ["user@example.com", "test@domain.org", "admin@company.io"]; | CODE |
| LOW | frontend/__tests__/utils/input-validation.test.ts | 121 | const emails = ["user@example.com", "invalid", "test@domain.org"]; | CODE |
| LOW | frontend/__tests__/utils/permission-guard.test.ts | 91 | email: "admin@example.com", | CODE |
| LOW | frontend/__tests__/components/ui/dropdown.test.tsx | 291 | expect(input).toHaveAttribute("placeholder", "Select an option"); | CODE |
| LOW | …/__tests__/components/settings/settings-input.test.tsx | 56 | "placeholder", | CODE |
| LOW | …_tests__/components/features/org/org-selector.test.tsx | 150 | expect(options[1]).toHaveTextContent("Acme Corp"); | CODE |
| LOW | …_tests__/components/features/org/org-selector.test.tsx | 175 | const acmeOption = within(listbox).getByText("Acme Corp"); | CODE |
| LOW | …_tests__/components/features/org/org-selector.test.tsx | 203 | const acmeOption = within(listbox).getByText("Acme Corp"); | CODE |
| LOW | …_tests__/components/features/org/org-selector.test.tsx | 237 | const acmeOption = within(listbox).getByText("Acme Corp"); | CODE |
| LOW | …_tests__/components/features/org/org-selector.test.tsx | 270 | expect(screen.getByRole("combobox")).toHaveValue("Acme Corp"); | CODE |
| LOW | …__tests__/components/features/budgets/budgets.test.tsx | 60 | user_email: "user@example.com", | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 122 | await user.type(nameInput, "John Doe"); | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 124 | expect(nameInput).toHaveValue("John Doe"); | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 221 | await user.type(screen.getByTestId("form-input-name"), "John Doe"); | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 222 | await user.type(screen.getByTestId("form-input-company"), "Acme Inc"); | CODE |
| LOW⚡ | …/features/onboarding/information-request-form.test.tsx | 240 | await user.type(nameInput, "John Doe"); | CODE |
| LOW⚡ | …/features/onboarding/information-request-form.test.tsx | 250 | await user.type(screen.getByTestId("form-input-name"), "John Doe"); | CODE |
| LOW⚡ | …/features/onboarding/information-request-form.test.tsx | 251 | await user.type(screen.getByTestId("form-input-company"), "Acme Inc"); | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 271 | await user.type(screen.getByTestId("form-input-name"), "John Doe"); | CODE |
| LOW | …/features/onboarding/information-request-form.test.tsx | 272 | await user.type(screen.getByTestId("form-input-company"), "Acme Inc"); | CODE |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 398 | await user.type(orgNameInput, "Acme Corp"); | CODE |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 414 | org_name: "Acme Corp", | CODE |
| LOW | …s__/components/features/onboarding/form-input.test.tsx | 71 | expect(input).toHaveAttribute("placeholder", "Enter text here"); | CODE |
| LOW | …ntend/__tests__/hooks/query/use-organizations.test.tsx | 81 | createMinimalOrg("2", "Acme Corp", false), | CODE |
| LOW | …ntend/__tests__/hooks/query/use-organizations.test.tsx | 98 | expect(organizations[1].name).toBe("Acme Corp"); | CODE |
| LOW | …ntend/__tests__/hooks/query/use-organizations.test.tsx | 180 | createMinimalOrg("2", "Acme Corp", false), | CODE |
| LOW | …ntend/__tests__/hooks/query/use-organizations.test.tsx | 224 | createMinimalOrg("2", "Acme Corp", false), | CODE |
| LOW | frontend/__tests__/routes/llm-settings.test.tsx | 3135 | "placeholder", | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 212 | expect(githubInput).toHaveProperty("placeholder", ""); | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 218 | expect(gitlabInput).toHaveProperty("placeholder", ""); | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 237 | expect(githubInput).toHaveProperty("placeholder", "<hidden>"); | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 243 | expect(gitlabInput).toHaveProperty("placeholder", "<hidden>"); | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 261 | expect(githubInput).toHaveProperty("placeholder", ""); | CODE |
| LOW | frontend/__tests__/routes/git-settings.test.tsx | 267 | expect(gitlabInput).toHaveProperty("placeholder", "<hidden>"); | CODE |
| LOW | frontend/__tests__/routes/home-screen.test.tsx | 195 | github: "fake-token", | CODE |
| LOW | frontend/__tests__/routes/home-screen.test.tsx | 196 | gitlab: "fake-token", | CODE |
| LOW | frontend/__tests__/routes/agent-settings.test.tsx | 271 | "placeholder", | CODE |
| LOW | enterprise/tests/unit/test_recaptcha_service.py | 41 | email = 'user@example.com' | CODE |
| LOW⚡ | enterprise/tests/unit/test_recaptcha_service.py | 63 | email2 = 'user@example.com' | CODE |
| LOW⚡ | enterprise/tests/unit/test_recaptcha_service.py | 213 | email='user@example.com', | CODE |
| LOW⚡ | enterprise/tests/unit/test_recaptcha_service.py | 222 | assert assessment.event.user_info.user_ids[0].email == 'user@example.com' | CODE |
| LOW | enterprise/tests/unit/test_org_budget_service.py | 346 | service._get_admin_emails = AsyncMock(return_value=['admin@example.com']) | CODE |
| LOW | enterprise/tests/unit/test_org_budget_service.py | 362 | ['admin@example.com'], | CODE |
| LOW | enterprise/tests/unit/test_token_manager_extended.py | 325 | 'email': 'user@example.com', | CODE |
| LOW⚡ | enterprise/tests/unit/test_identity_utils.py | 23 | 'name': 'Jane Doe', | CODE |
| LOW⚡ | enterprise/tests/unit/test_identity_utils.py | 28 | assert resolve_display_name(user_info) == 'Jane Doe' | CODE |
| LOW⚡ | enterprise/tests/unit/test_identity_utils.py | 38 | assert resolve_display_name(user_info) == 'Jane Doe' | CODE |
| LOW⚡ | enterprise/tests/unit/test_identity_utils.py | 106 | assert resolve_display_name(user_info) == 'Jane Doe' | CODE |
| LOW⚡ | enterprise/tests/unit/test_saas_user_auth.py | 394 | mock_user.email = 'user@example.com' | CODE |
| LOW⚡ | enterprise/tests/unit/test_saas_user_auth.py | 404 | assert email == 'user@example.com' | CODE |
| LOW⚡ | enterprise/tests/unit/test_saas_user_auth.py | 1177 | assert result.email == 'user@example.com' | CODE |
| LOW⚡ | enterprise/tests/unit/test_saas_user_auth.py | 1179 | 'user@example.com', None | CODE |
| LOW | enterprise/tests/unit/test_saas_user_auth.py | 1155 | 'email': 'user@example.com', | CODE |
| LOW⚡ | enterprise/tests/unit/test_smtp_email_service.py | 132 | org_name='Acme Corp', | CODE |
| LOW⚡ | enterprise/tests/unit/test_smtp_email_service.py | 133 | inviter_name='John Doe', | CODE |
| LOW⚡ | enterprise/tests/unit/test_smtp_email_service.py | 141 | assert 'Acme Corp' in message | CODE |
| LOW⚡ | enterprise/tests/unit/test_smtp_email_service.py | 142 | assert 'John Doe' in message | CODE |
| 162 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .openhands/pre-commit.sh | 13 | # Check if any files match specific patterns | COMMENT |
| LOW | .openhands/pre-commit.sh | 32 | # Check if we're in a CI environment or if frontend dependencies are missing | COMMENT |
| LOW | enterprise/enterprise_local/decrypt_env.sh | 4 | # Check if DEPLOY_DIR argument was provided | COMMENT |
| LOW | enterprise/tests/unit/test_saas_settings_store.py | 1400 | # Set llm_api_key to raise an error if accessed - this verifies we don't access it | COMMENT |
| LOW | enterprise/tests/unit/test_auth_routes.py | 568 | # Set validate_offline_token to return False to test the "without offline token" scenario | COMMENT |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 219 | user_settings.user_version = 4 # Set version to avoid None comparison | CODE |
| LOW | enterprise/tests/unit/server/routes/test_org_models.py | 88 | # Set llm_api_key to raise an error if accessed - this verifies we don't access it | COMMENT |
| LOW | enterprise/server/config.py | 120 | # Check if the response is successful | COMMENT |
| LOW | enterprise/server/constants.py | 7 | # Check if this is a feature environment | COMMENT |
| LOW | enterprise/server/auth/recaptcha_service.py | 125 | # Check if any suspicious labels are present | COMMENT |
| LOW | enterprise/server/auth/authorization.py | 596 | # Check if user has @openhands.dev email | COMMENT |
| LOW | enterprise/server/auth/authorization.py | 607 | # Check if user has Admin or Owner role in the organization | COMMENT |
| LOW | enterprise/server/auth/saas_user_auth.py | 843 | # Check if email is blacklisted (whitelist takes precedence) | COMMENT |
| LOW | enterprise/server/auth/gitlab_sync.py | 48 | # Check if the user has a GitLab provider token before syncing | COMMENT |
| LOW | …se/server/utils/saas_app_conversation_info_injector.py | 195 | # Check if there are more results | COMMENT |
| LOW | …se/server/utils/saas_app_conversation_info_injector.py | 389 | # Check if SAAS metadata already exists | COMMENT |
| LOW⚡ | enterprise/server/routes/users_v1.py | 153 | # Check if this is an AuthUserContext with a SaasUserAuth | COMMENT |
| LOW | enterprise/server/routes/orgs.py | 1585 | # Check if this Git org is already claimed (early feedback for the common case) | COMMENT |
| LOW | enterprise/server/routes/api_keys.py | 394 | # Check if authenticated via API key | COMMENT |
| LOW | enterprise/server/routes/api_keys.py | 449 | # Check if the BYOR key exists in the database | COMMENT |
| LOW | enterprise/server/routes/integration/gitlab.py | 292 | # Check if user has admin access to this resource | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 328 | # Check if user currently has an active workspace link | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 346 | # Check if user had a previous link to this specific workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 378 | # Check if user is the admin of the workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 385 | # Check if user's current link matches the workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 404 | # Check if Jira DC webhooks are enabled | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 1323 | # Check if workspace exists | COMMENT |
| LOW | enterprise/server/routes/integration/jira_dc.py | 1333 | # Check if workspace is active | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 212 | # Check if user currently has an active workspace link | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 230 | # Check if user had a previous link to this specific workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 262 | # Check if user is the admin of the workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 269 | # Check if user's current link matches the workspace | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 289 | # Check if Jira webhooks are enabled | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 739 | # Check if workspace exists | COMMENT |
| LOW | enterprise/server/routes/integration/jira.py | 749 | # Check if workspace is active | COMMENT |
| LOW | enterprise/server/routes/integration/github.py | 59 | # Check if GitHub webhooks are enabled | COMMENT |
| LOW | enterprise/server/services/org_app_settings_service.py | 112 | # Check if any fields are provided | COMMENT |
| LOW | enterprise/server/services/org_member_service.py | 189 | # Check if trying to remove self | COMMENT |
| LOW | enterprise/server/services/org_member_service.py | 210 | # Check if removing the last owner | COMMENT |
| LOW | enterprise/server/services/org_member_service.py | 223 | # Set current_org_id to personal workspace (org.id == user.id) | COMMENT |
| LOW | enterprise/server/services/org_member_service.py | 291 | # Check if trying to modify self | COMMENT |
| LOW | enterprise/server/services/org_member_service.py | 334 | # Check if demoting the last owner | COMMENT |
| LOW | enterprise/server/services/org_conversation_service.py | 1175 | # Check if there's a sandbox to stop | COMMENT |
| LOW | enterprise/server/services/user_app_settings_service.py | 89 | # Check if any fields are provided | COMMENT |
| LOW | enterprise/storage/openhands_pr_store.py | 19 | # Check if PR already exists | COMMENT |
| LOW | enterprise/storage/openhands_pr_store.py | 104 | # Check if the updated_at timestamp has changed (indicating concurrent modification) | COMMENT |
| LOW | enterprise/storage/saas_settings_store.py | 530 | # Check if we need to migrate from user_settings | COMMENT |
| LOW | enterprise/storage/org_member_store.py | 234 | # Check if there are more results | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 35 | # Check if billing is enabled (defaults to false for enterprise deployments) | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 168 | # Check if team already exists and get its budget | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 363 | # Check if max_budget is None (not 0.0) or set to unlimited to determine if already migrated | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 429 | # Check if the database key exists in LiteLLM | COMMENT |
| LOW | enterprise/storage/auth_token_store.py | 151 | # Check if token needs refresh | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 761 | # Check if organization exists | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 766 | # Check if user is a member of the organization | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 771 | # Check if user has owner role | COMMENT |
| LOW | enterprise/storage/org_service.py | 528 | # Check if user is a member of this organization | COMMENT |
| LOW | enterprise/storage/org_service.py | 541 | # Check if name is being updated and validate uniqueness | COMMENT |
| LOW | enterprise/storage/org_service.py | 543 | # Check if new name conflicts with another org | COMMENT |
| LOW | enterprise/storage/device_code.py | 113 | # Check if polling too fast | COMMENT |
| 64 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 170 | // Step 1 - select org size (first step in saas mode - single select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 174 | // Step 2 - select use case (multi-select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 178 | // Step 3 - select role (last step in saas mode - single select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 237 | // Step 1 - select org size (single select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 241 | // Step 2 - select multiple use cases (multi-select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 247 | // Step 3 - select role (single select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 266 | // Step 1 - select org size | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 270 | // Step 2 - select and deselect use cases | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 277 | // Step 3 - select role | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 395 | // Step 1 - enter org name and domain (input fields) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 402 | // Step 2 - select org size (single select) | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 406 | // Step 3 - select use case (multi-select) - this is the last step in self-hosted mode | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 559 | // Step 1 - org size | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 563 | // Step 2 - use case | COMMENT |
| LOW⚡ | …omponents/features/onboarding/onboarding-form.test.tsx | 567 | // Step 3 - role | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 113 | // Step 1: Validate and filter files | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 119 | // Step 2: Show loading indicators immediately | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 122 | // Step 3: Process files using REAL FileReader | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 129 | // Step 4: Handle successful results | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 133 | // Step 5: Handle failed results | COMMENT |
| LOW | frontend/src/routes/settings.tsx | 59 | // Step 1: Get config first (needed for all checks, no user data required) | COMMENT |
| LOW⚡ | frontend/src/routes/settings.tsx | 73 | // Step 2: Check SAAS_ONLY_PATHS for OSS mode (no user data required) | COMMENT |
| LOW⚡ | frontend/src/routes/settings.tsx | 78 | // Step 3: Check feature flag-based hiding and redirect IMMEDIATELY (no user data required) | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1278 | # Step 2: Switch user to ORG2 in browser session | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1287 | # Step 3: User in ORG2 should NOT see the conversation | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1303 | # Step 4: Switch user back to ORG1 | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1312 | # Step 5: User in ORG1 should see the conversation | COMMENT |
| LOW | …storage/test_saas_sql_app_conversation_info_service.py | 1257 | # Step 1: Create conversation via API key bound to ORG1 | COMMENT |
| LOW | enterprise/server/routes/bitbucket_dc_proxy.py | 42 | # Step 1: get username | COMMENT |
| LOW | enterprise/server/routes/bitbucket_dc_proxy.py | 54 | # Step 2: get user details | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 76 | # Step 1: Validate organization exists | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 81 | # Step 2: Check this is not a personal workspace | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 88 | # Step 3: Check inviter is a member and has permission | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 99 | # Step 4: Validate role assignment permissions | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 109 | # Step 5: Check if user is already a member (by email) | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 120 | # Step 6: Create the invitation | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 128 | # Step 7: Send invitation email | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 461 | # Step 3: Check if user is already a member | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 470 | # Step 4: Create LiteLLM integration for the user in the new org | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 193 | # Step 1: Validate permissions upfront (shared for all emails) | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 221 | # Step 2: Create invitations concurrently | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 239 | # Step 3: Separate successes and failures | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 388 | # Step 1: Get and validate invitation | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 413 | # Step 2: Check expiration | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 494 | # Step 5: Add user to organization. New members start with no | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 512 | # Step 6: Mark invitation as accepted | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 573 | # Step 2: Update user to set their max_budget back from unlimited | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 582 | # Step 3: Add user back to the default team | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 607 | # Step 5: Remove user from their org team | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 616 | # Step 6: Delete the org team | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 528 | # Step 1: Get the team info to retrieve the budget | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 596 | # Step 4: Update all user keys to remove org team association (set team_id to default) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 234 | # Step 1: Validate name uniqueness (fails early, no cleanup needed) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 237 | # Step 2: Generate organization ID | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 240 | # Step 3: Create LiteLLM integration (external state created) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 248 | # Step 4: Create organization entity | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 256 | # Step 5: Apply LiteLLM settings | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 261 | # Step 6: Get owner role and create member entity | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 270 | # Step 7: Persist in transaction (critical section) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 809 | # Step 1: Verify user authorization | COMMENT |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 113 | // Step 1: Validate and filter files | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 119 | // Step 2: Show loading indicators immediately | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 122 | // Step 3: Process files using REAL FileReader | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 129 | // Step 4: Handle successful results | COMMENT |
| LOW⚡ | …/src/components/features/chat/interactive-chat-box.tsx | 133 | // Step 5: Handle failed results | COMMENT |
| LOW | frontend/src/routes/settings.tsx | 59 | // Step 1: Get config first (needed for all checks, no user data required) | COMMENT |
| LOW⚡ | frontend/src/routes/settings.tsx | 73 | // Step 2: Check SAAS_ONLY_PATHS for OSS mode (no user data required) | COMMENT |
| LOW⚡ | frontend/src/routes/settings.tsx | 78 | // Step 3: Check feature flag-based hiding and redirect IMMEDIATELY (no user data required) | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1278 | # Step 2: Switch user to ORG2 in browser session | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1287 | # Step 3: User in ORG2 should NOT see the conversation | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1303 | # Step 4: Switch user back to ORG1 | COMMENT |
| LOW⚡ | …storage/test_saas_sql_app_conversation_info_service.py | 1312 | # Step 5: User in ORG1 should see the conversation | COMMENT |
| LOW | …storage/test_saas_sql_app_conversation_info_service.py | 1257 | # Step 1: Create conversation via API key bound to ORG1 | COMMENT |
| LOW | enterprise/server/routes/bitbucket_dc_proxy.py | 42 | # Step 1: get username | COMMENT |
| LOW | enterprise/server/routes/bitbucket_dc_proxy.py | 54 | # Step 2: get user details | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 76 | # Step 1: Validate organization exists | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 81 | # Step 2: Check this is not a personal workspace | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 88 | # Step 3: Check inviter is a member and has permission | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 99 | # Step 4: Validate role assignment permissions | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 109 | # Step 5: Check if user is already a member (by email) | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 120 | # Step 6: Create the invitation | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 128 | # Step 7: Send invitation email | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 461 | # Step 3: Check if user is already a member | COMMENT |
| LOW⚡ | enterprise/server/services/org_invitation_service.py | 470 | # Step 4: Create LiteLLM integration for the user in the new org | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 193 | # Step 1: Validate permissions upfront (shared for all emails) | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 221 | # Step 2: Create invitations concurrently | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 239 | # Step 3: Separate successes and failures | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 388 | # Step 1: Get and validate invitation | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 413 | # Step 2: Check expiration | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 494 | # Step 5: Add user to organization. New members start with no | COMMENT |
| LOW | enterprise/server/services/org_invitation_service.py | 512 | # Step 6: Mark invitation as accepted | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 573 | # Step 2: Update user to set their max_budget back from unlimited | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 582 | # Step 3: Add user back to the default team | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 607 | # Step 5: Remove user from their org team | COMMENT |
| LOW⚡ | enterprise/storage/lite_llm_manager.py | 616 | # Step 6: Delete the org team | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 528 | # Step 1: Get the team info to retrieve the budget | COMMENT |
| LOW | enterprise/storage/lite_llm_manager.py | 596 | # Step 4: Update all user keys to remove org team association (set team_id to default) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 234 | # Step 1: Validate name uniqueness (fails early, no cleanup needed) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 237 | # Step 2: Generate organization ID | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 240 | # Step 3: Create LiteLLM integration (external state created) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 248 | # Step 4: Create organization entity | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 256 | # Step 5: Apply LiteLLM settings | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 261 | # Step 6: Get owner role and create member entity | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 270 | # Step 7: Persist in transaction (critical section) | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 809 | # Step 1: Verify user authorization | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 812 | # Step 2: Perform database cascade deletion with LiteLLM cleanup in transaction | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 906 | # Step 1: Check if organization exists | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 911 | # Step 2: Validate user is a member of the organization | COMMENT |
| LOW⚡ | enterprise/storage/org_service.py | 921 | # Step 3: Update user's current_org_id | COMMENT |
| LOW⚡ | enterprise/storage/user_store.py | 651 | # Step 4: Delete conversation_metadata_saas entries | STRING |
| LOW⚡ | enterprise/storage/user_store.py | 657 | # Step 5: Reset org_id columns in related tables | STRING |
| LOW⚡ | enterprise/storage/user_store.py | 700 | # Step 6: Delete org_member entries for this org | STRING |
| LOW⚡ | enterprise/storage/user_store.py | 706 | # Step 7: Delete the user entry | STRING |
| LOW | enterprise/storage/user_store.py | 635 | # Step 3: Copy user_id from conversation_metadata_saas to conversation_metadata | STRING |
| LOW | enterprise/storage/user_store.py | 718 | # Step 8: Set already_migrated=False on user_settings and encrypt fields | STRING |
| LOW⚡ | enterprise/integrations/gitlab/gitlab_service.py | 438 | # For projects, we need to check if the user has maintainer or owner access | COMMENT |
| LOW | enterprise/integrations/gitlab/gitlab_service.py | 415 | # For groups, we need to check if the user is an owner or maintainer | COMMENT |
| LOW | enterprise/integrations/jira/jira_manager.py | 93 | # Step 1: Parse webhook payload | COMMENT |
| LOW⚡ | enterprise/integrations/jira/jira_manager.py | 123 | # Step 2: Validate workspace | COMMENT |
| LOW⚡ | enterprise/integrations/jira/jira_manager.py | 128 | # Step 3: Authenticate user | COMMENT |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | enterprise/enterprise_local/convert_to_env.py | 8 | CODE | |
| LOW | enterprise/tests/unit/test_run_maintenance_tasks.py | 208 | CODE | |
| LOW | enterprise/tests/unit/test_run_maintenance_tasks.py | 265 | CODE | |
| LOW | enterprise/tests/unit/test_run_maintenance_tasks.py | 343 | CODE | |
| LOW | enterprise/tests/unit/test_run_maintenance_tasks.py | 378 | CODE | |
| LOW | enterprise/tests/unit/test_run_maintenance_tasks.py | 424 | CODE | |
| LOW | enterprise/tests/unit/test_saas_settings_store.py | 112 | CODE | |
| LOW | enterprise/tests/unit/test_saas_settings_store.py | 157 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 966 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 995 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 1034 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 1108 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 2386 | CODE | |
| LOW | enterprise/tests/unit/test_lite_llm_manager.py | 2407 | CODE | |
| LOW | …/unit/server/routes/test_jira_dc_integration_routes.py | 34 | CODE | |
| LOW | …/unit/server/routes/test_jira_dc_integration_routes.py | 1485 | CODE | |
| LOW | enterprise/tests/unit/routes/test_service.py | 125 | CODE | |
| LOW | enterprise/tests/unit/routes/test_service.py | 150 | CODE | |
| LOW | enterprise/tests/unit/routes/test_service.py | 196 | CODE | |
| LOW | enterprise/server/auth/token_manager.py | 374 | CODE | |
| LOW | enterprise/server/auth/saas_user_auth.py | 524 | CODE | |
| LOW | enterprise/server/utils/rate_limit_utils.py | 51 | CODE | |
| LOW | …se/server/utils/saas_app_conversation_info_injector.py | 131 | CODE | |
| LOW | enterprise/server/routes/auth.py | 255 | CODE | |
| LOW | enterprise/server/routes/users_v1.py | 107 | CODE | |
| LOW | enterprise/server/routes/orgs.py | 2310 | CODE | |
| LOW | enterprise/server/routes/user_provisioning.py | 256 | CODE | |
| LOW | enterprise/server/routes/integration/bitbucket_dc.py | 537 | CODE | |
| LOW | enterprise/server/routes/integration/azure_devops.py | 310 | CODE | |
| LOW | enterprise/server/routes/integration/jira_dc.py | 577 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 241 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 445 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 860 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 1140 | CODE | |
| LOW | enterprise/server/services/org_budget_service.py | 358 | CODE | |
| LOW | enterprise/storage/saas_settings_store.py | 261 | CODE | |
| LOW | enterprise/storage/saas_settings_store.py | 720 | CODE | |
| LOW | enterprise/storage/lite_llm_manager.py | 122 | CODE | |
| LOW | enterprise/storage/lite_llm_manager.py | 823 | CODE | |
| LOW | enterprise/storage/org_app_settings_store.py | 97 | CODE | |
| LOW | enterprise/integrations/utils.py | 290 | CODE | |
| LOW | enterprise/integrations/gitlab/gitlab_service.py | 227 | CODE | |
| LOW | enterprise/integrations/gitlab/gitlab_service.py | 357 | CODE | |
| LOW | enterprise/integrations/gitlab/gitlab_service.py | 399 | CODE | |
| LOW | enterprise/integrations/gitlab/gitlab_view.py | 387 | CODE | |
| LOW | enterprise/integrations/github/data_collector.py | 151 | CODE | |
| LOW | enterprise/integrations/github/github_view.py | 729 | CODE | |
| LOW | enterprise/scripts/standalone_server.py | 153 | CODE | |
| LOW | enterprise/scripts/seed_conversation_data.py | 270 | CODE | |
| LOW | enterprise/scripts/setup_and_seed.py | 356 | CODE | |
| LOW | enterprise/sync/resend_keycloak.py | 375 | CODE | |
| LOW | tests/unit/server/routes/test_skills_api.py | 396 | CODE | |
| LOW | openhands/app_server/config.py | 240 | CODE | |
| LOW | openhands/app_server/version.py | 7 | CODE | |
| LOW | openhands/app_server/settings/settings_router.py | 131 | CODE | |
| LOW | openhands/app_server/settings/settings_models.py | 210 | CODE | |
| LOW | openhands/app_server/settings/settings_models.py | 475 | CODE | |
| LOW | openhands/app_server/event_callback/webhook_router.py | 469 | CODE | |
| LOW | openhands/app_server/secrets/secrets_models.py | 111 | CODE | |
| LOW | openhands/app_server/secrets/secrets_router.py | 96 | CODE | |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | enterprise/storage/org.py | 79 | # ``{profiles: {<id>: AgentProfile}, active: <id> | null}`` (see AgentProfiles). | COMMENT |
| HIGH | enterprise/scripts/standalone_server.py | 490 | let currentOrg = null; | CODE |
| HIGH | enterprise/scripts/standalone_server.py | 558 | <td>\${c.user_name || c.user_email || 'Unknown'}</td> | CODE |
| HIGH | enterprise/scripts/standalone_server.py | 580 | return n.toString(); | CODE |
| HIGH | tests/unit/app_server/test_skill_loader.py | 974 | # The key is omitted entirely (not sent as null) when not provided. | COMMENT |
| HIGH | tests/unit/app_server/test_profiles_api.py | 385 | assert fetched['config']['api_key'] is None # GET returns null, not mask | CODE |
| HIGH | tests/unit/app_server/test_agent_server_env_override.py | 158 | 'OH_AGENT_SERVER_ENV': '{"NUMBER": 123, "BOOLEAN": true, "NULL": null}', | CODE |
| HIGH | openhands/app_server/settings/agent_profiles.py | 10 | * a pydantic envelope ``{profiles: {<id>: AgentProfile}, active: <id> | null}`` stored | STRING |
| HIGH⚡ | openhands/app_server/sandbox/workspace_archive.py | 211 | '|| python3 --version 2>/dev/null || true)"; ' | CODE |
| HIGH⚡ | openhands/app_server/sandbox/workspace_archive.py | 212 | 'echo "node=$(node --version 2>/dev/null || true)"; ' | CODE |
| HIGH⚡ | openhands/app_server/sandbox/workspace_archive.py | 213 | 'echo "os=$(. /etc/os-release 2>/dev/null; echo "${ID:-} ${VERSION_ID:-}")"' | CODE |
| HIGH | …rver/app_conversation/app_conversation_service_base.py | 365 | 'git init && git config --global ' | CODE |
| HIGH | …rver/app_conversation/app_conversation_service_base.py | 507 | "$secret_url" 2>/dev/null)" || exit 0 | CODE |
| HIGH | …rver/app_conversation/app_conversation_service_base.py | 568 | command = 'mkdir -p .git/hooks && chmod +x .openhands/pre-commit.sh' | STRING |
| HIGH | …p_conversation/live_status_app_conversation_service.py | 2369 | # Repository is being removed (set to null) | COMMENT |
| HIGH | scripts/issue_duplicate_check_openhands.py | 206 | ' "canonical_issue_number": 123 or null,', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | enterprise/server/utils/conversation_utils.py | 50 | # Create injector state for dependency injection | COMMENT |
| MEDIUM⚡ | …se/integrations/gitlab/gitlab_v1_callback_processor.py | 215 | # Summary orchestration | COMMENT |
| MEDIUM | …se/integrations/gitlab/gitlab_v1_callback_processor.py | 237 | # Create injector state for dependency injection | COMMENT |
| MEDIUM | …rprise/integrations/jira/jira_v1_callback_processor.py | 112 | # Create injector state for dependency injection | COMMENT |
| MEDIUM⚡ | …se/integrations/github/github_v1_callback_processor.py | 233 | # Final response orchestration | COMMENT |
| MEDIUM | …se/integrations/github/github_v1_callback_processor.py | 250 | # Create injector state for dependency injection | COMMENT |
| MEDIUM | enterprise/integrations/jira_dc/jira_dc_view.py | 276 | # Create injector state for dependency injection | COMMENT |
| MEDIUM | …/integrations/jira_dc/jira_dc_v1_callback_processor.py | 122 | # Create injector state for dependency injection | COMMENT |
| MEDIUM⚡ | …rise/integrations/slack/slack_v1_callback_processor.py | 212 | # Final response orchestration | COMMENT |
| MEDIUM | …rise/integrations/slack/slack_v1_callback_processor.py | 229 | # Create injector state for dependency injection | COMMENT |
| MEDIUM | enterprise/integrations/slack/slack_view.py | 377 | # Create injector state for dependency injection | COMMENT |
| MEDIUM⚡ | openhands/app_server/user_auth/user_auth.py | 3 | # OpenHands V1 uses the Software Agent SDK for the agentic core and runs a new application server. Please refer to: | COMMENT |
| MEDIUM⚡ | openhands/app_server/user_auth/user_auth.py | 4 | # - V1 agentic core (SDK): https://github.com/OpenHands/software-agent-sdk | COMMENT |
| MEDIUM⚡ | openhands/app_server/user_auth/default_user_auth.py | 3 | # OpenHands V1 uses the Software Agent SDK for the agentic core and runs a new application server. Please refer to: | COMMENT |
| MEDIUM⚡ | openhands/app_server/user_auth/default_user_auth.py | 4 | # - V1 agentic core (SDK): https://github.com/OpenHands/software-agent-sdk | COMMENT |
| MEDIUM⚡ | openhands/app_server/status/system_stats.py | 3 | # OpenHands V1 uses the Software Agent SDK for the agentic core and runs a new application server. Please refer to: | COMMENT |
| MEDIUM⚡ | openhands/app_server/status/system_stats.py | 4 | # - V1 agentic core (SDK): https://github.com/OpenHands/software-agent-sdk | COMMENT |
| MEDIUM | …p_conversation/live_status_app_conversation_service.py | 2553 | # The session is already managed by the dependency injection system | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …server/sharing/sql_shared_conversation_info_service.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/server/sharing/aws_shared_event_service.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | …se/server/sharing/google_cloud_shared_event_service.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | …rise/server/sharing/filesystem_shared_event_service.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/server/auth/saas_user_auth.py | 106 | def set_effective_org_id_override(self, org_id: UUID | None) -> None: | CODE |
| LOW | enterprise/server/auth/user/user_authorizer.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/server/auth/user/default_user_authorizer.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/server/routes/analytics_events.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/server/routes/user_provisioning.py | 226 | async def _set_user_provisioned_flags(user_id: str) -> None: | CODE |
| LOW | enterprise/server/routes/org_models.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/storage/user_settings.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | enterprise/storage/org_member_store.py | 104 | async def update_org_member(org_member: OrgMember) -> None: | CODE |
| LOW | enterprise/storage/stored_conversation_cost_event.py | 7 | __all__ = ['StoredConversationCostEvent'] | CODE |
| LOW | enterprise/storage/maintenance_task.py | 98 | def set_processor(self, processor: MaintenanceTaskProcessor) -> None: | CODE |
| LOW | enterprise/storage/stored_conversation_metadata_saas.py | 48 | __all__ = ['StoredConversationMetadataSaas'] | CODE |
| LOW | enterprise/storage/__init__.py | 46 | __all__ = [ | CODE |
| LOW | enterprise/storage/gitlab_webhook_store.py | 78 | async def update_webhook(self, webhook: GitlabWebhook, update_fields: dict) -> None: | CODE |
| LOW | enterprise/storage/gitlab_webhook_store.py | 159 | async def update_last_synced(self, webhook: GitlabWebhook) -> None: | CODE |
| LOW | enterprise/storage/redis.py | 16 | __all__ = [ | CODE |
| LOW | enterprise/storage/device_code.py | 121 | def update_poll_time(self, increase_interval: bool = False) -> None: | CODE |
| LOW | enterprise/storage/stored_conversation_metadata.py | 7 | __all__ = ['StoredConversationMetadata'] | CODE |
| LOW | enterprise/storage/base.py | 15 | __all__ = ['Base'] | CODE |
| LOW | enterprise/integrations/slack/slack_errors.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | openhands/version.py | 8 | __all__ = ['__package_name__', '__version__', 'get_version'] | CODE |
| LOW | openhands/__init__.py | 9 | __all__ = ['__version__', 'get_version'] | CODE |
| LOW | openhands/app_server/types.py | 37 | __all__ = [ | CODE |
| LOW | openhands/app_server/pending_messages/__init__.py | 14 | __all__ = [ | CODE |
| LOW | …/app_server/pending_messages/pending_message_router.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …enhands/app_server/settings/marketplace_composition.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | openhands/app_server/settings/agent_profiles.py | 208 | def set_llm_profile_ref(self, name: str, new_ref: str) -> None: | CODE |
| LOW | openhands/app_server/settings/settings_models.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | openhands/app_server/event_callback/__init__.py | 16 | __all__ = [ | CODE |
| LOW | openhands/app_server/utils/redis_lock.py | 12 | __all__ = [ | CODE |
| LOW | openhands/app_server/utils/redis.py | 69 | __all__ = [ | CODE |
| LOW | …nds/app_server/integrations/gitlab/service/__init__.py | 10 | __all__ = [ | CODE |
| LOW | …integrations/bitbucket_data_center/service/__init__.py | 8 | __all__ = [ | CODE |
| LOW | …nds/app_server/integrations/github/service/__init__.py | 10 | __all__ = [ | CODE |
| LOW | …/app_server/integrations/bitbucket/service/__init__.py | 7 | __all__ = [ | CODE |
| LOW | …ds/app_server/integrations/forgejo/service/__init__.py | 8 | __all__ = [ | CODE |
| LOW | openhands/app_server/recaptcha/sql_recaptcha_service.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | …app_server/app_conversation/app_conversation_models.py | 28 | __all__ = ['SandboxGroupingStrategy'] | CODE |
| LOW | …/app_conversation/sql_app_conversation_info_service.py | 88 | logger = logging.getLogger(__name__) | CODE |
| LOW | …onversation/sql_app_conversation_start_task_service.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | …app_server/app_conversation/app_conversation_router.py | 110 | logger = logging.getLogger(__name__) | CODE |
| LOW | openhands/app_server/services/jwt_service.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | openhands/server/types.py | 14 | __all__ = [ | CODE |
| LOW | openhands/server/shared.py | 13 | __all__ = [ | CODE |
| LOW | openhands/server/static.py | 8 | __all__ = ['SPAStaticFiles'] | CODE |
| LOW | openhands/server/app.py | 15 | __all__ = ['app', 'mcp_app', 'combine_lifespans', 'authentication_error_handler'] | CODE |
| LOW | openhands/server/listen.py | 8 | __all__ = ['app'] | CODE |
| LOW | openhands/server/middleware.py | 13 | __all__ = [ | CODE |
| LOW | openhands/server/config/server_config.py | 11 | __all__ = ['ServerConfig', 'load_server_config'] | CODE |
| LOW | openhands/analytics/__init__.py | 57 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | config.template.toml | 1 | ###################### OpenHands Configuration Example ###################### | COMMENT |
| LOW | config.template.toml | 21 | # Debugging enabled | COMMENT |
| LOW | config.template.toml | 41 | #file_store_path = "/tmp/file_store" | COMMENT |
| LOW | config.template.toml | 61 | # Path to mount the workspace | COMMENT |
| LOW | config.template.toml | 81 | COMMENT | |
| LOW | config.template.toml | 141 | [agent.CustomAgent] | COMMENT |
| LOW | config.template.toml | 161 | COMMENT | |
| LOW | config.template.toml | 181 | #platform = "" | COMMENT |
| LOW | config.template.toml | 201 | # Enable GPU support in the runtime | COMMENT |
| LOW | config.template.toml | 221 | # volumes = "/my/host/dir:/workspace:rw,/path2:/workspace/path2:ro" | COMMENT |
| LOW | config.template.toml | 241 | ############################################################################## | COMMENT |
| LOW | config.template.toml | 261 | COMMENT | |
| LOW | config.template.toml | 281 | #keep_first = 1 | COMMENT |
| LOW | config.template.toml | 301 | ########################### Kubernetes ####################################### | COMMENT |
| LOW | config.template.toml | 321 | #resource_memory_request = "1Gi" | COMMENT |
| LOW | config.template.toml | 341 | # Run the runtime sandbox container in privileged mode for use with docker-in-docker | COMMENT |
| LOW | config.template.toml | 361 | # "https://api.example.com/mcp/shttp", | COMMENT |
| LOW | config.template.toml | 381 | # env = {DEBUG = "true"} | COMMENT |
| LOW | frontend/playwright.config.ts | 61 | // name: 'Mobile Safari', | COMMENT |
| LOW | frontend/__tests__/routes/llm-settings.test.tsx | 281 | meData?: OrganizationMember; | COMMENT |
| LOW | …ontend/src/contexts/conversation-websocket-context.tsx | 461 | } | COMMENT |
| LOW | frontend/src/routes/settings.tsx | 81 | const fallbackPath = getFirstAvailablePath(isSaas, featureFlags); | COMMENT |
| LOW | enterprise/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | enterprise/alembic.ini | 21 | COMMENT | |
| LOW | enterprise/tests/unit/__init__.py | 1 | # Do not delete this! There are dependencies with top level packages named `tests` that collide with ours, | COMMENT |
| LOW | enterprise/tests/unit/test_user_store.py | 1701 | # Verify the user_id and org_id values | COMMENT |
| LOW | enterprise/tests/unit/server/routes/test_org_models.py | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); | COMMENT |
| LOW | enterprise/server/middleware.py | 141 | logger.warning(f'JWT decode error: {str(e)}') | COMMENT |
| LOW | enterprise/server/middleware.py | 201 | async def _logout(self, request: Request): | COMMENT |
| LOW | enterprise/server/routes/auth.py | 1121 | COMMENT | |
| LOW | enterprise/server/routes/user_provisioning.py | 101 | # path live under ``/api/organizations`` so they sit alongside the rest | COMMENT |
| LOW | enterprise/server/routes/user_provisioning.py | 281 | # explicit fetch produces a clean 404 instead of a confusing 500 | COMMENT |
| LOW | enterprise/server/routes/user_provisioning.py | 381 | new_user = await UserStore.create_user(kc_user_id, user_info_dict) | COMMENT |
| LOW | enterprise/storage/org_store.py | 561 | async with a_session_maker() as session: | COMMENT |
| LOW | enterprise/storage/org_store.py | 581 | # another session cannot create a new orphan between | COMMENT |
| LOW | enterprise/storage/org_store.py | 681 | COMMENT | |
| LOW | openhands/app_server/constants.py | 21 | # Override with: OH_MAX_API_SECRET_NAME_LENGTH | COMMENT |
| LOW | openhands/app_server/constants.py | 61 | ) | COMMENT |
| LOW | openhands/app_server/settings/settings_router.py | 381 | # Profile name constraints: alphanumerics + . _ - only, 1-64 chars. This | COMMENT |
| LOW | openhands/app_server/settings/settings_models.py | 321 | return base_working_dir | COMMENT |
| LOW | openhands/app_server/web_client/web_client_models.py | 21 | hide_billing_page: bool = False | COMMENT |
| LOW | openhands/app_server/sandbox/workspace_archive.py | 401 | # siblings, and the 1s ts is not unique — without the conversation segment two | COMMENT |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 21 | COMMENT | |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 41 | COMMENT | |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 61 | # behavior of splitting on spaces and/or commas. | COMMENT |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 81 | # are written from script.py.mako | COMMENT |
| LOW | openhands/app_server/app_lifespan/alembic.ini | 101 | # black.options = -l 79 REVISION_SCRIPT_FILENAME | COMMENT |
| LOW | …/app_conversation/sql_app_conversation_info_service.py | 401 | # | COMMENT |
| LOW | …app_server/app_conversation/app_conversation_router.py | 661 | # Resolve the saved profile for the agent server: provider-default base_url, | COMMENT |
| LOW | …p_conversation/live_status_app_conversation_service.py | 461 | task.agent_server_url = agent_server_url | COMMENT |
| LOW | .github/workflows/tag-image.yml | 1 | # Adds a git-tag name to existing Docker images. | COMMENT |
| LOW | openhands-ui/vitest.shims.d.ts | 1 | /// <reference types="@vitest/browser/providers/playwright" /> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …terprise/tests/unit/test_billing_stripe_integration.py | 173 | # For testing, just return True directly | COMMENT |
| LOW⚡ | enterprise/tests/unit/test_lite_llm_manager.py | 1196 | # Should not raise an exception, just return early | COMMENT |
| LOW | …unit/test_sharing/test_sharing_shared_event_service.py | 71 | # For testing purposes, we'll just use a mock that the EventPage can accept | COMMENT |
| LOW | …sts/unit/test_sharing/test_aws_shared_event_service.py | 72 | # For testing purposes, we'll just use a mock that the EventPage can accept | COMMENT |
| MEDIUM | …/unit/server/routes/test_jira_dc_integration_routes.py | 692 | # Additional comprehensive tests for better coverage | COMMENT |
| MEDIUM | …sts/unit/server/routes/test_jira_integration_routes.py | 341 | # Additional comprehensive tests for better coverage | COMMENT |
| LOW | enterprise/server/utils/url_utils.py | 23 | # for now just use the full hostname except for staging stacks. | COMMENT |
| LOW | enterprise/server/services/org_app_settings_service.py | 116 | # No fields to update, just return current settings | COMMENT |
| LOW | enterprise/server/services/user_app_settings_service.py | 93 | # No fields to update, just return current settings | COMMENT |
| LOW | enterprise/integrations/github/data_collector.py | 459 | # In this case, we will simply return when the exception occurs | COMMENT |
| MEDIUM | …/app_server/test_webhook_router_parent_conversation.py | 293 | # Create existing conversation with comprehensive metadata | COMMENT |
| MEDIUM | …nds/app_server/integrations/bitbucket/service/repos.py | 28 | # Extract workspace and repo from URL using robust URL parsing | COMMENT |
| LOW | …nds/app_server/integrations/bitbucket/service/repos.py | 182 | # If we can't extract the page, just use the next URL as is | COMMENT |
| MEDIUM | openhands/app_server/services/injector.py | 13 | """Object designed to facilitate dependency injection""" | STRING |
| MEDIUM | .github/scripts/update_pr_description.sh | 24 | # For existing PR descriptions, use a more robust approach | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …se/server/utils/saas_app_conversation_info_injector.py | 131 | CODE | |
| LOW | …rprise/server/verified_models/verified_model_router.py | 58 | CODE | |
| LOW | enterprise/server/routes/orgs.py | 1699 | CODE | |
| LOW | enterprise/server/routes/orgs.py | 2087 | CODE | |
| LOW | enterprise/server/services/org_conversation_service.py | 241 | CODE | |
| LOW | enterprise/integrations/utils.py | 259 | CODE | |
| LOW | enterprise/scripts/standalone_server.py | 153 | CODE | |
| LOW | openhands/app_server/utils/async_utils.py | 18 | CODE | |
| LOW | openhands/app_server/utils/async_utils.py | 52 | CODE | |
| LOW | openhands/app_server/utils/async_utils.py | 112 | CODE | |
| LOW | openhands/app_server/utils/async_utils.py | 118 | CODE | |
| LOW | openhands/app_server/utils/async_utils.py | 35 | CODE | |
| LOW | openhands/app_server/utils/import_utils.py | 31 | CODE | |
| LOW | openhands/app_server/user/skills_router.py | 452 | CODE | |
| LOW | …erver/web_client/default_web_client_config_injector.py | 300 | CODE | |
| LOW | openhands/app_server/web_client/web_client_router.py | 19 | CODE | |
| LOW | …/app_conversation/sql_app_conversation_info_service.py | 177 | CODE | |
| LOW | …rver/app_conversation/app_conversation_info_service.py | 20 | CODE | |
| LOW | …pp_server/app_conversation/app_conversation_service.py | 37 | CODE | |
| LOW | …app_server/app_conversation/app_conversation_router.py | 224 | CODE | |
| LOW | …app_server/app_conversation/app_conversation_router.py | 1033 | CODE | |
| LOW | …p_conversation/live_status_app_conversation_service.py | 285 | CODE | |
| LOW | …p_conversation/live_status_app_conversation_service.py | 671 | CODE | |
| LOW | …p_conversation/live_status_app_conversation_service.py | 1630 | CODE | |
| LOW | …p_conversation/live_status_app_conversation_service.py | 2001 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | config.template.toml | 355 | # {url = "https://api.example.com/mcp/sse", api_key = "your-api-key"} | COMMENT |
| HIGH | config.template.toml | 366 | # api_key = "your-api-key", | COMMENT |
| HIGH | openhands/app_server/sandbox/sandbox_spec_service.py | 180 | export LMNR_PROJECT_API_KEY=your-api-key | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …onversation/sql_app_conversation_start_task_service.py | 207 | # Return tasks in the same order as requested, with None for missing ones | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …e/tests/unit/integrations/jira_dc/test_jira_dc_view.py | 147 | CODE | |
| MEDIUM | …e/tests/unit/integrations/jira_dc/test_jira_dc_view.py | 170 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/public/mockServiceWorker.js | 124 | async function handleRequest(event, requestId, requestInterceptedAt) { | CODE |
| LOW⚡ | tests/unit/utils/test_chunk_localizer.py | 394 | 'def helper():', | CODE |