"OpenHarness: Open Agent Harness with a Built-in Personal Agent--Ohmo!"
2721 matches across 15 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 53 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 59 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 136 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 142 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 230 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 235 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 333 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 339 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 486 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 491 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 603 | # ==================================================================== |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 605 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 85 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 91 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 161 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 167 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 289 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 295 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 410 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 416 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 33 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 35 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 658 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 663 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 508 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 515 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 758 | # ==================================================================== |
| MEDIUM | tests/test_real_large_tasks.py | 760 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 101 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 103 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 562 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 564 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 646 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 648 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 718 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 720 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 39 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 41 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 146 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 148 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 179 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 181 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 239 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 241 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 390 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 392 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 443 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 445 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 492 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 494 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 540 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 542 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 598 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 600 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 620 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 622 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 806 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 808 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 294 | # ==================================================================== |
| MEDIUM | tests/test_untested_features.py | 296 | # ==================================================================== |
| 469 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | ohmo/session_storage.py | 95 | def load_latest_for_session_key(workspace: str | Path | None, session_key: str) -> dict[str, Any] | None: |
| LOW | ohmo/session_storage.py | 193 | def load_latest_for_session_key(self, session_key: str) -> dict[str, Any] | None: |
| LOW | ohmo/memory.py | 179 | def create_memory_command_backend(workspace: str | Path | None = None) -> MemoryCommandBackend: |
| LOW | ohmo/runtime.py | 69 | def build_ohmo_backend_command( |
| LOW | ohmo/cli.py | 140 | def _format_provider_profile_label(info: dict[str, object]) -> str: |
| LOW | ohmo/cli.py | 327 | def _run_gateway_config_wizard(workspace: str | Path) -> GatewayConfig: |
| LOW | ohmo/cli.py | 371 | def _print_gateway_config_summary(config: GatewayConfig) -> None: |
| LOW | ohmo/cli.py | 410 | def _configure_gateway_logging(workspace: str | Path | None = None) -> None: |
| LOW | ohmo/group_registry.py | 50 | def save_managed_group_record( |
| LOW | ohmo/group_registry.py | 80 | def load_managed_group_record( |
| LOW | ohmo/workspace.py | 234 | def get_gateway_restart_notice_path(workspace: str | Path | None = None) -> Path: |
| LOW | ohmo/gateway/service.py | 168 | async def _publish_pending_restart_notice(self) -> None: |
| LOW | ohmo/gateway/service.py | 321 | def _iter_workspace_gateway_pids(workspace: str | Path | None = None) -> list[int]: |
| LOW | ohmo/gateway/config.py | 29 | def build_channel_manager_config(config: GatewayConfig) -> Config: |
| LOW | ohmo/gateway/provider_commands.py | 13 | def handle_gateway_provider_command(args: str, *, workspace: str | Path | None) -> tuple[str, bool]: |
| LOW | ohmo/gateway/provider_commands.py | 55 | def handle_gateway_model_command(args: str, *, workspace: str | Path | None) -> tuple[str, bool]: |
| LOW | ohmo/gateway/bridge.py | 176 | async def _prepare_group_prompt_message( |
| LOW | ohmo/gateway/bridge.py | 372 | def _build_group_agent_prompt(raw_request: str) -> str: |
| LOW | ohmo/gateway/bridge.py | 386 | def _normalize_feishu_group_policy(value: str | None) -> str: |
| LOW | ohmo/gateway/runtime.py | 1047 | def _history_has_image_blocks(messages: list[ConversationMessage]) -> bool: |
| LOW | ohmo/gateway/runtime.py | 1051 | def _strip_image_blocks_from_engine_history(engine) -> None: |
| LOW | ohmo/gateway/runtime.py | 1059 | def _strip_image_blocks_from_messages(messages: list[ConversationMessage]) -> list[ConversationMessage]: |
| LOW | ohmo/gateway/runtime.py | 1063 | def _strip_image_blocks_from_message(message: ConversationMessage) -> ConversationMessage: |
| LOW | ohmo/gateway/runtime.py | 134 | def _handle_gateway_scoped_command(self, command_name: str, args: str) -> tuple[str, bool] | None: |
| LOW | ohmo/gateway/runtime.py | 740 | def _set_group_request_context( |
| LOW | ohmo/gateway/runtime.py | 768 | def _restore_group_request_context(bundle: RuntimeBundle, previous: object) -> None: |
| LOW | ohmo/gateway/runtime.py | 784 | def _sanitize_snapshot_messages(raw_messages: object) -> list[dict[str, object]] | None: |
| LOW | ohmo/gateway/runtime.py | 823 | def _format_tool_media_caption(event: ToolExecutionCompleted, media: list[str]) -> str: |
| LOW | ohmo/gateway/runtime.py | 836 | def _sanitize_group_command_prompts(messages: list[ConversationMessage]) -> list[ConversationMessage]: |
| LOW | ohmo/gateway/runtime.py | 841 | def _sanitize_group_command_prompt(message: ConversationMessage) -> ConversationMessage: |
| LOW | ohmo/gateway/runtime.py | 855 | def _format_group_command_history_note(prompt: str) -> str: |
| LOW | ohmo/gateway/runtime.py | 863 | def _sanitize_group_command_metadata(raw_metadata: object) -> object: |
| LOW | ohmo/gateway/runtime.py | 874 | def _sanitize_group_command_metadata_value(value: object) -> object: |
| LOW | ohmo/gateway/runtime.py | 992 | def _build_inbound_user_message(message: InboundMessage) -> ConversationMessage: |
| LOW | ohmo/gateway/runtime.py | 1018 | def _should_retry_without_image_input(error_message: str, messages: list[ConversationMessage]) -> bool: |
| LOW | ohmo/gateway/runtime.py | 1180 | def _prefers_chinese_progress(content: str) -> bool: |
| LOW | frontend/terminal/src/clipboardImage.ts | 90 | async function readWindowsClipboardImage(): Promise<ClipboardImageRead | null> { |
| LOW | tests/conftest.py | 11 | async def _reset_background_task_manager(): |
| LOW | tests/test_hooks_skills_plugins_real.py | 61 | async def task_hook_blocks_model_adapts(): |
| LOW | tests/test_hooks_skills_plugins_real.py | 144 | async def task_model_invokes_skill_tool(): |
| LOW | tests/test_hooks_skills_plugins_real.py | 237 | async def task_plugin_skill_in_agent_loop(): |
| LOW | tests/test_hooks_skills_plugins_real.py | 341 | async def task_hook_gates_writes_skill_guides(): |
| LOW | tests/test_hooks_skills_plugins_real.py | 493 | async def task_swarm_teammates_use_skills(): |
| LOW | tests/test_real_large_tasks.py | 93 | async def task_security_audit_with_hooks(): |
| LOW | tests/test_real_large_tasks.py | 169 | async def task_coordinator_code_review(): |
| LOW | tests/test_real_large_tasks.py | 297 | async def task_migration_plan_with_memory(): |
| LOW | tests/test_real_large_tasks.py | 665 | async def task_refactor_with_session(): |
| LOW | tests/test_untested_features.py | 650 | async def test_combined_hooks_skills_agent(): |
| LOW | tests/test_untested_features.py | 722 | async def test_full_swarm_autoagent(): |
| LOW | tests/test_platforms.py | 8 | def test_detect_platform_recognizes_wsl(): |
| LOW | tests/test_platforms.py | 17 | def test_detect_platform_recognizes_windows(): |
| LOW | tests/test_platforms.py | 25 | def test_windows_capabilities_disable_swarm_mailbox_and_sandbox(): |
| LOW | tests/test_merged_prs_on_autoagent.py | 153 | async def task_memory_research_autoagent(): |
| LOW | tests/test_merged_prs_on_autoagent.py | 327 | async def task_session_resume_autoagent(): |
| LOW | tests/test_merged_prs_on_autoagent.py | 412 | async def task_cron_autoagent_maintenance(): |
| LOW | tests/test_bridge/test_session_flow.py | 14 | async def test_bridge_session_writes_output_in_cwd(tmp_path: Path): |
| LOW | tests/test_bridge/test_session_flow.py | 25 | def test_bridge_secret_and_url_flow(): |
| LOW | tests/test_bridge/test_core.py | 13 | def test_work_secret_roundtrip(): |
| LOW | tests/test_bridge/test_core.py | 26 | async def test_spawn_session_and_kill(tmp_path: Path): |
| LOW | tests/test_bridge/test_core.py | 34 | async def test_spawn_session_merges_stderr_into_stdout(monkeypatch, tmp_path: Path): |
| 1260 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | ohmo/session_storage.py | 3 | |
| LOW | ohmo/memory.py | 3 | |
| LOW | ohmo/runtime.py | 3 | |
| LOW | ohmo/prompts.py | 3 | |
| LOW | ohmo/cli.py | 3 | |
| LOW | ohmo/group_registry.py | 3 | |
| LOW | ohmo/workspace.py | 3 | |
| LOW | ohmo/gateway/service.py | 3 | |
| LOW | ohmo/gateway/config.py | 3 | |
| LOW | ohmo/gateway/models.py | 3 | |
| LOW | ohmo/gateway/provider_commands.py | 3 | |
| LOW | ohmo/gateway/bridge.py | 3 | |
| LOW | ohmo/gateway/notify.py | 3 | |
| LOW | ohmo/gateway/runtime.py | 3 | |
| LOW | ohmo/gateway/router.py | 3 | |
| LOW | ohmo/gateway/group_tool.py | 3 | |
| LOW | tests/conftest.py | 3 | |
| LOW | tests/test_hooks_skills_plugins_real.py | 9 | |
| LOW | tests/test_real_large_tasks.py | 9 | |
| LOW | tests/test_untested_features.py | 10 | |
| LOW | tests/test_platforms.py | 3 | |
| LOW | tests/test_merged_prs_on_autoagent.py | 9 | |
| LOW | tests/test_bridge/test_session_flow.py | 3 | |
| LOW | tests/test_bridge/test_core.py | 3 | |
| LOW | tests/test_install/test_windows_alias.py | 3 | |
| LOW | tests/test_tasks/test_manager.py | 3 | |
| LOW | tests/test_tools/test_image_generation_tool.py | 3 | |
| LOW | tests/test_tools/test_web_fetch_tool.py | 3 | |
| LOW | tests/test_tools/test_mcp_auth_tool.py | 3 | |
| LOW | tests/test_tools/test_integration_flows.py | 3 | |
| LOW | tests/test_tools/test_core_tools.py | 3 | |
| LOW | tests/test_tools/test_image_to_text_tool.py | 3 | |
| LOW | tests/test_tools/test_task_tools.py | 3 | |
| LOW | tests/test_swarm/test_registry.py | 3 | |
| LOW | tests/test_swarm/test_permission_sync.py | 3 | |
| LOW | tests/test_swarm/test_imports.py | 3 | |
| LOW | tests/test_swarm/test_lockfile.py | 3 | |
| LOW | tests/test_swarm/test_mailbox.py | 3 | |
| LOW | tests/test_swarm/test_spawn_utils.py | 3 | |
| LOW | tests/test_swarm/test_subprocess_backend.py | 3 | |
| LOW | tests/test_swarm/test_in_process.py | 3 | |
| LOW | tests/test_swarm/test_team_lifecycle.py | 3 | |
| LOW | tests/test_swarm/test_worktree.py | 3 | |
| LOW | tests/test_swarm/test_types.py | 3 | |
| LOW | tests/test_utils/test_fs.py | 3 | |
| LOW | tests/test_utils/test_helpers.py | 3 | |
| LOW | tests/test_utils/test_shell.py | 3 | |
| LOW | tests/test_commands/test_registry.py | 3 | |
| LOW | tests/test_commands/test_command_flows.py | 3 | |
| LOW | tests/test_autopilot/test_verification.py | 3 | |
| LOW | tests/test_memory/test_memdir.py | 3 | |
| LOW | tests/test_memory/test_claude_runtime_memory.py | 3 | |
| LOW | tests/test_coordinator/test_coordinator_mode.py | 3 | |
| LOW | tests/test_coordinator/test_agent_definitions.py | 3 | |
| LOW | tests/test_channels/test_telegram_security.py | 1 | |
| LOW | tests/test_channels/test_base.py | 1 | |
| LOW | tests/test_channels/test_feishu_security.py | 3 | |
| LOW | tests/test_plugins/test_lifecycle_flow.py | 3 | |
| LOW | tests/test_plugins/test_loader.py | 3 | |
| LOW | tests/test_services/test_compact.py | 3 | |
| 428 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | ohmo/gateway/service.py | 228 | except Exception as exc: |
| LOW | ohmo/gateway/service.py | 331 | except Exception: |
| LOW | ohmo/gateway/service.py | 356 | except Exception: |
| LOW | ohmo/gateway/bridge.py | 292 | except Exception as exc: # pragma: no cover - gateway failure path |
| LOW | ohmo/gateway/bridge.py | 357 | except Exception: |
| LOW | ohmo/gateway/runtime.py | 473 | except Exception: |
| LOW | ohmo/gateway/runtime.py | 792 | except Exception: |
| LOW | ohmo/gateway/runtime.py | 1012 | except Exception: |
| LOW | ohmo/gateway/group_tool.py | 95 | except Exception as exc: |
| LOW | ohmo/gateway/group_tool.py | 121 | except Exception as exc: |
| LOW | tests/test_hooks_skills_plugins_real.py | 620 | except Exception as e: |
| LOW | tests/test_real_large_tasks.py | 781 | except Exception as e: |
| LOW | tests/test_untested_features.py | 94 | except Exception as e: |
| LOW | tests/test_merged_prs_on_autoagent.py | 649 | except Exception as e: |
| LOW | scripts/test_harness_features.py | 229 | except Exception as exc: |
| LOW | scripts/test_real_skills_plugins.py | 336 | except Exception as exc: |
| LOW | scripts/test_react_tui_redesign.py | 177 | except Exception as exc: |
| LOW | scripts/test_tui_interactions.py | 192 | except Exception as exc: |
| LOW | scripts/test_cli_flags.py | 147 | except Exception as exc: |
| LOW | scripts/test_docker_sandbox_e2e.py | 639 | except Exception as exc: |
| LOW | scripts/test_headless_rendering.py | 133 | except Exception as exc: |
| LOW | scripts/test_headless_rendering.py | 156 | except Exception as exc: |
| MEDIUM | src/openharness/cli.py | 1894 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 2104 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 1636 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 1690 | print(f"Error: {exc}", file=sys.stderr, flush=True) |
| MEDIUM | src/openharness/cli.py | 1736 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 1921 | print("Error: domain cannot be empty.", file=sys.stderr, flush=True) |
| MEDIUM | src/openharness/cli.py | 1931 | print(f"Error: {exc}", file=sys.stderr, flush=True) |
| MEDIUM | src/openharness/cli.py | 1998 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 2085 | print(f"Error: {exc}", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 2332 | print("Error: --dry-run does not support --continue/--resume yet.", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 2338 | print("Error: -p/--print requires a prompt value, e.g. -p 'your prompt'", file=sys.stderr) |
| MEDIUM | src/openharness/cli.py | 2433 | print("Error: -p/--print requires a prompt value, e.g. -p 'your prompt'", file=sys.stderr) |
| LOW | src/openharness/cli.py | 465 | except Exception as exc: # pragma: no cover - defensive diagnostic path |
| LOW | src/openharness/cli.py | 1741 | except Exception: |
| LOW | src/openharness/ui/runtime.py | 87 | except Exception: |
| LOW | src/openharness/ui/runtime.py | 201 | except Exception as exc: |
| LOW | src/openharness/ui/runtime.py | 246 | except Exception: |
| LOW | src/openharness/ui/runtime.py | 491 | except Exception: |
| MEDIUM | src/openharness/ui/runtime.py | 198 | def _safe_resolve_auth(): |
| LOW | src/openharness/ui/backend_host.py | 201 | except Exception as exc: # pragma: no cover - defensive protocol handling |
| LOW | src/openharness/ui/react_launcher.py | 18 | except Exception: |
| LOW | src/openharness/swarm/team_lifecycle.py | 665 | except Exception: |
| LOW | src/openharness/swarm/subprocess_backend.py | 99 | except Exception as exc: |
| LOW | src/openharness/swarm/in_process.py | 273 | except Exception: |
| LOW | src/openharness/swarm/in_process.py | 306 | except Exception: |
| LOW | src/openharness/swarm/in_process.py | 312 | except Exception: |
| LOW | src/openharness/tasks/manager.py | 372 | except Exception: |
| LOW | src/openharness/tools/agent_tool.py | 83 | except Exception as exc: |
| LOW | src/openharness/tools/mcp_auth_tool.py | 65 | except Exception as exc: # pragma: no cover - defensive |
| LOW | src/openharness/tools/image_to_text_tool.py | 119 | except Exception as exc: |
| LOW | src/openharness/tools/image_generation_tool.py | 114 | except Exception as exc: |
| LOW | src/openharness/tools/send_message_tool.py | 55 | except Exception as exc: |
| LOW | src/openharness/coordinator/agent_definitions.py | 888 | except Exception: |
| LOW | src/openharness/coordinator/agent_definitions.py | 942 | except Exception: |
| LOW | src/openharness/auth/storage.py | 107 | except Exception as exc: |
| LOW | src/openharness/auth/storage.py | 137 | except Exception as exc: |
| LOW | src/openharness/auth/storage.py | 159 | except Exception as exc: |
| LOW | src/openharness/auth/flows.py | 113 | except Exception: |
| 135 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | tests/test_utils/test_helpers.py | 5 | from openharness.utils.helpers import get_data_path, safe_filename, split_message |
| CRITICAL | src/openharness/channels/impl/matrix.py | 41 | from openharness.utils.helpers import safe_filename |
| CRITICAL | src/openharness/channels/impl/telegram.py | 17 | from openharness.utils.helpers import split_message |
| CRITICAL | src/openharness/channels/impl/discord.py | 15 | from openharness.utils.helpers import split_message |
| CRITICAL | src/openharness/channels/impl/mochat.py | 19 | from openharness.utils.helpers import get_data_path |
| CRITICAL | src/openharness/channels/impl/feishu.py | 18 | from openharness.utils.helpers import safe_filename |
| CRITICAL | src/openharness/channels/impl/feishu.py | 545 | response = self._client.im.v1.message_reaction.create(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 806 | response = self._client.im.v1.image.create(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 834 | response = self._client.im.v1.file.create(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 855 | response = self._client.im.v1.message_resource.get(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 888 | response = self._client.im.v1.message_resource.get(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 975 | response = self._client.im.v1.message.reply(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 986 | response = self._client.im.v1.message.create(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1027 | response = self._client.im.v1.chat.create(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1054 | response = self._client.im.v1.chat.update(request) |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1180 | lark.api.contact.v3.GetUserRequest.builder() |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1185 | response = self._client.contact.v3.user.get(request) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/test_hooks_skills_plugins_real.py | 413 | command='echo "$TOOL_INPUT" | grep -q "config.py" && exit 1 || exit 0', |
| HIGH | tests/test_hooks_skills_plugins_real.py | 420 | command='echo "$TOOL_INPUT" | grep -q "config.py" && exit 1 || exit 0', |
| HIGH | tests/test_real_large_tasks.py | 427 | os.system(f"cd {repo} && git init -q && git checkout -b main 2>/dev/null") |
| HIGH | tests/test_real_large_tasks.py | 461 | os.system(f"cd {repo} && git add -A && git commit -q -m 'initial commit'") |
| HIGH | tests/test_untested_features.py | 574 | os.system(f"cd {repo} && git init && git commit --allow-empty -m 'init' 2>/dev/null") |
| HIGH | tests/test_untested_features.py | 205 | command='echo "$TOOL_INPUT" | grep -q "rm " && exit 1 || exit 0', |
| HIGH | tests/test_merged_prs_on_autoagent.py | 433 | "command": "cd /home/tangjiabin/AutoAgent && ruff check autoagent/"}, |
| HIGH | tests/test_merged_prs_on_autoagent.py | 435 | "command": "cd /home/tangjiabin/AutoAgent && python -m pytest tests/ -q"}, |
| HIGH | tests/test_merged_prs_on_autoagent.py | 437 | "command": "cd /home/tangjiabin/AutoAgent && grep -r TODO autoagent/ | wc -l"}, |
| HIGH | tests/test_merged_prs_on_autoagent.py | 585 | "command": "cd /home/tangjiabin/AutoAgent && ruff check autoagent/", |
| HIGH | tests/test_permissions/test_checker.py | 32 | command="npm init -y && npm install next react react-dom", |
| HIGH | tests/test_autopilot/test_verification.py | 37 | "pytest && evil", |
| HIGH | tests/test_autopilot/test_verification.py | 38 | "pytest || evil", |
| HIGH | tests/test_autopilot/test_verification.py | 56 | {"command": "cd frontend && npm ci && tsc --noEmit", "shell": True}, |
| HIGH | tests/test_autopilot/test_verification.py | 60 | assert cmd.raw == "cd frontend && npm ci && tsc --noEmit" |
| HIGH | tests/test_autopilot/test_verification.py | 185 | "commands": [{"command": "cd x && y", "shell": True}], |
| HIGH | tests/test_autopilot/test_verification.py | 191 | assert seen["target"] == "cd x && y" |
| HIGH | tests/test_prompts/test_environment.py | 42 | # Create a git repo (cross-platform: use subprocess, not os.system with /dev/null) |
| HIGH | scripts/test_docker_sandbox_e2e.py | 417 | ["bash", "-c", "timeout 3 bash -c 'echo > /dev/tcp/8.8.8.8/53' 2>&1 || exit 1"], |
| HIGH | scripts/test_docker_sandbox_e2e.py | 439 | ["bash", "-c", "getent hosts github.com 2>/dev/null && echo DNS_OK || echo DNS_FAIL"], |
| HIGH | scripts/test_docker_sandbox_e2e.py | 439 | ["bash", "-c", "getent hosts github.com 2>/dev/null && echo DNS_OK || echo DNS_FAIL"], |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 419 | {_AGENT_TOOL_NAME}({{ prompt: "Fix the null pointer in src/auth/validate.ts:42. The user field on Session (src/auth/type |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 452 | {_SEND_MESSAGE_TOOL_NAME}({{ to: "xyz-456", message: "Fix the null pointer in src/auth/validate.ts:42. The user field is |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 512 | {_SEND_MESSAGE_TOOL_NAME}({{ to: "agent-a1b", message: "Fix the null pointer in src/auth/validate.ts:42. Add a null ch |
| HIGH | src/openharness/coordinator/agent_definitions.py | 425 | "current_usage": null, |
| HIGH | src/openharness/coordinator/agent_definitions.py | 426 | "used_percentage": null, |
| HIGH | src/openharness/sandbox/docker_image.py | 16 | RUN apt-get update && apt-get install -y --no-install-recommends \\ |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | ohmo/runtime.py | 147 | |
| LOW | ohmo/runtime.py | 188 | |
| LOW | ohmo/cli.py | 147 | |
| LOW | ohmo/cli.py | 194 | |
| LOW | ohmo/gateway/runtime.py | 901 | |
| LOW | tests/test_hooks_skills_plugins_real.py | 34 | |
| LOW | tests/test_real_large_tasks.py | 65 | |
| LOW | tests/test_untested_features.py | 68 | |
| LOW | tests/test_untested_features.py | 183 | |
| LOW | tests/test_merged_prs_on_autoagent.py | 82 | |
| LOW | scripts/local_system_scenarios.py | 222 | |
| LOW | scripts/e2e_smoke.py | 694 | |
| LOW | scripts/e2e_smoke.py | 759 | |
| LOW | scripts/test_docker_sandbox_e2e.py | 588 | |
| LOW | src/openharness/cli.py | 333 | |
| LOW | src/openharness/cli.py | 1402 | |
| LOW | src/openharness/cli.py | 2113 | |
| LOW | src/openharness/personalization/rules.py | 49 | |
| LOW | src/openharness/personalization/extractor.py | 78 | |
| LOW | src/openharness/ui/runtime.py | 621 | |
| LOW | src/openharness/ui/runtime.py | 777 | |
| LOW | src/openharness/ui/backend_host.py | 92 | |
| LOW | src/openharness/ui/backend_host.py | 250 | |
| LOW | src/openharness/ui/backend_host.py | 682 | |
| LOW | src/openharness/ui/backend_host.py | 274 | |
| LOW | src/openharness/ui/app.py | 92 | |
| LOW | src/openharness/ui/app.py | 177 | |
| LOW | src/openharness/ui/app.py | 121 | |
| LOW | src/openharness/ui/app.py | 240 | |
| LOW | src/openharness/ui/textual_app.py | 327 | |
| LOW | src/openharness/ui/textual_app.py | 436 | |
| LOW | src/openharness/ui/output.py | 56 | |
| LOW | src/openharness/swarm/in_process.py | 196 | |
| LOW | src/openharness/swarm/permission_sync.py | 1035 | |
| LOW | src/openharness/tools/grep_tool.py | 105 | |
| LOW | src/openharness/tools/config_tool.py | 28 | |
| LOW | src/openharness/tools/glob_tool.py | 98 | |
| LOW | src/openharness/tools/image_generation_tool.py | 318 | |
| LOW | src/openharness/coordinator/agent_definitions.py | 695 | |
| LOW | src/openharness/coordinator/agent_definitions.py | 905 | |
| LOW | src/openharness/auth/storage.py | 166 | |
| LOW | src/openharness/auth/manager.py | 116 | |
| LOW | src/openharness/auth/manager.py | 186 | |
| LOW | src/openharness/plugins/loader.py | 320 | |
| LOW | src/openharness/plugins/loader.py | 479 | |
| LOW | src/openharness/plugins/loader.py | 621 | |
| LOW | src/openharness/plugins/loader.py | 691 | |
| LOW | src/openharness/permissions/checker.py | 75 | |
| LOW | src/openharness/hooks/executor.py | 64 | |
| LOW | src/openharness/prompts/claudemd.py | 8 | |
| LOW | src/openharness/prompts/context.py | 102 | |
| LOW | src/openharness/api/provider.py | 97 | |
| LOW | src/openharness/api/client.py | 98 | |
| LOW | src/openharness/api/client.py | 165 | |
| LOW | src/openharness/api/codex_client.py | 77 | |
| LOW | src/openharness/api/codex_client.py | 253 | |
| LOW | src/openharness/api/codex_client.py | 358 | |
| LOW | src/openharness/api/openai_client.py | 81 | |
| LOW | src/openharness/api/openai_client.py | 315 | |
| LOW | src/openharness/commands/registry.py | 445 | |
| 41 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 163 | # Create a skill file that gives specific instructions |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 256 | # Create a plugin with a skill |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 384 | # Create a file to refactor |
| MEDIUM | tests/test_real_large_tasks.py | 424 | # Create a test repo with a "buggy" file |
| MEDIUM | tests/test_real_large_tasks.py | 673 | # Create a file to refactor |
| MEDIUM | tests/test_tools/test_image_to_text_tool.py | 174 | # Create a minimal valid PNG file |
| MEDIUM | tests/test_prompts/test_environment.py | 42 | # Create a git repo (cross-platform: use subprocess, not os.system with /dev/null) |
| MEDIUM | scripts/install.sh | 192 | # Create a virtual environment to avoid PEP 668 externally-managed errors |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/openharness/hooks/schemas.py | 0 | higher priority runs first within an event; ties keep registration order. |
| HIGH | src/openharness/hooks/schemas.py | 0 | higher priority runs first within an event; ties keep registration order. |
| HIGH | src/openharness/hooks/schemas.py | 0 | higher priority runs first within an event; ties keep registration order. |
| HIGH | src/openharness/hooks/schemas.py | 0 | higher priority runs first within an event; ties keep registration order. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_merged_prs_on_autoagent.py | 556 | # Step 3: Use diagnose skill on AutoAgent (PR #17) |
| LOW | tests/test_merged_prs_on_autoagent.py | 565 | # Step 4: Track costs (PR #16) |
| LOW | tests/test_merged_prs_on_autoagent.py | 570 | # Step 5: Save session (PR #16) |
| LOW | tests/test_merged_prs_on_autoagent.py | 579 | # Step 6: Create cron job for ongoing monitoring (PR #16) |
| LOW | tests/test_merged_prs_on_autoagent.py | 590 | # Step 7: Resume session in Anthropic client and continue (PR #16 + #14) |
| LOW | tests/test_merged_prs_on_autoagent.py | 529 | # Step 1: OpenAI client researches AutoAgent (PR #14) |
| LOW | tests/test_merged_prs_on_autoagent.py | 542 | # Step 2: Save research to memory with frontmatter (PR #12) |
| LOW | scripts/install.sh | 67 | # Step 1: Detect OS |
| LOW | scripts/install.sh | 88 | # Step 2: Check Python >= 3.10 |
| LOW | scripts/install.sh | 151 | # Step 3: Check Node.js >= 18 |
| LOW | scripts/install.sh | 182 | # Step 4: Install OpenHarness |
| LOW | scripts/install.sh | 241 | # Step 5: Channel dependencies |
| LOW | scripts/install.sh | 249 | # Step 6: Install frontend/terminal npm dependencies |
| LOW | scripts/install.sh | 270 | # Step 7: Create OpenHarness config directory |
| LOW | scripts/install.sh | 281 | # Step 8: Register global commands |
| LOW | scripts/install.sh | 292 | # Step 9: Verify installation |
| LOW | scripts/install.sh | 316 | # Step 10: Add command directory to shell profile |
| LOW | src/openharness/services/compact/__init__.py | 1163 | # Step 1: microcompact to reduce tokens cheaply |
| LOW | src/openharness/services/compact/__init__.py | 1169 | # Step 2: split into older (summarize) and newer (preserve) |
| LOW | src/openharness/services/compact/__init__.py | 1172 | # Step 3: build compact request — send older messages + compact prompt |
| LOW | src/openharness/services/compact/__init__.py | 1375 | # Step 4: build the new message list |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docs/autopilot/assets/index-gQnrxco6.js | 49 | `).replace(hm,"")}function Hd(l,t){return t=Cd(t),Cd(l)===t}function fl(l,t,a,u,e,n){switch(a){case"children":typeof u== |
| MEDIUM | src/openharness/swarm/in_process.py | 257 | # harness wires up the full engine for in-process teammates. |
| MEDIUM | src/openharness/coordinator/agent_definitions.py | 133 | subagent_type: str = "general-purpose" # routing key used by the harness |
| MEDIUM | src/openharness/channels/impl/dingtalk.py | 55 | # Parse using SDK's ChatbotMessage for robust handling |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/openharness/swarm/registry.py | 271 | Return a TeammateExecutor for the given backend type. Args: backend: Explicit backend type to use. |
| HIGH | src/openharness/swarm/permission_sync.py | 346 | Build a new :class:`SwarmPermissionRequest` with a generated ID. Missing worker/team fields are read from environme |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | scripts/install_dev.sh | 3 | # Usage: |
| LOW | scripts/sync_nanobot_channels.sh | 4 | # Usage: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/openharness/swarm/spawn_utils.py | 21 | |
| LOW | src/openharness/auth/flows.py | 81 | # Only http(s) URLs are valid here. ShellExecute / xdg-open / `open` |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/openharness/channels/impl/discord.py | 273 | # Check if bot was mentioned in the message |