Open-source, self-hosted alternative to OpenAI Dots, Grok Bot. Built to be undetectable by anti-bot systems.
This report summarizes scanner evidence for feder-cr/aihawk_mcp_server, a TypeScript project with 31,957 GitHub stars. SynthScan examined 159,316 lines of code across 893 source files, recording 2160 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 16.9 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1756 finding(s).
Are imports declared and package/API names verified? 196 finding(s).
Are wrappers, guards, and repeated structures necessary? 1877 finding(s).
Which changes need focused human review? 2160 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2160 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 63 | def _requires_max_completion_tokens(model_name: str) -> bool: | CODE |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 132 | def _uses_openrouter_attribution(api_base: str | None) -> bool: | CODE |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 471 | def _extract_thinking_content(cls, value: object) -> str | None: | CODE |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 652 | def _accum_legacy_function_call(function_call: Any) -> None: | CODE |
| LOW⚡ | invisible_engine_dots/nanobot/providers/base.py | 124 | def tool_arguments_json_for_replay(arguments: Any) -> str: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 96 | def tool_arguments_object_for_replay(arguments: Any) -> dict[str, Any]: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 548 | def _tool_cache_marker_indices(cls, tools: list[dict[str, Any]]) -> list[int]: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 567 | def _sanitize_request_messages( | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 607 | def _error_response_from_exception(self, exc: Exception) -> LLMResponse: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 780 | def _enforce_role_alternation(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 880 | def _strip_image_content_inplace(messages: list[dict[str, Any]]) -> bool: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 970 | def _extract_compound_try_again_in(cls, text: str) -> float | None: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 989 | def _extract_retry_after_from_headers(cls, headers: Any) -> float | None: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 1029 | def _extract_retry_after_from_response(cls, response: LLMResponse) -> float | None: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/runtime.py | 35 | def empty_tool_result_message(tool_name: str) -> str: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/runtime.py | 40 | def ensure_nonempty_tool_result(tool_name: str, content: Any) -> Any: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/runtime.py | 60 | def build_finalization_retry_message() -> dict[str, str]: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/runtime.py | 65 | def build_length_recovery_message(content: str) -> dict[str, str]: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 291 | def content_with_media_breadcrumbs( | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 360 | def recent_message_start_index( | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 441 | def _estimate_prompt_tokens_with_source( | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 548 | def estimate_prompt_tokens_chain( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 64 | def _restore_outer_whitespace(content: str, original: str | None) -> str: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 289 | def _initial_transcript_and_compaction( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 738 | def _drop_malformed_tool_calls( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 772 | def _malformed_tool_call_retry_messages( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 792 | async def _request_finalization_retry( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 807 | def _finalization_retry_messages(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 916 | async def _commit_model_error_placeholder( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/memory.py | 37 | def recent_user_message_tokens(prompt_budget: int) -> int: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/memory.py | 137 | def _with_recent_user_messages(summary: str, messages: list[dict[str, Any]], limit: int) -> str: | CODE |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 241 | def _merge_adjacent_user_messages_for_model( | CODE |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 268 | def prepare_messages_for_model( | CODE |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 543 | def strip_placeholder_assistant_messages( | CODE |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 581 | def strip_malformed_tool_calls( | CODE |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 674 | def backfill_missing_tool_results( | CODE |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 425 | async def _wait_for_buffered_output(self) -> None: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/registry.py | 159 | def _unwrap_arguments_payload(cls, tool: Tool, params: Any) -> Any: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 510 | def _collapse_internal_whitespace(text: str) -> str: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/context.py | 38 | def current_request_session_key() -> str | None: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 111 | def _is_malformed_mcp_progress_notification(message: Any) -> bool: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 132 | def _progress_params_have_token(params: Any) -> bool: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 186 | def _filter_malformed_mcp_progress_notifications( | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 223 | def _is_transient_connection_failure(exc: BaseException) -> bool: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 240 | def _log_mcp_connection_failure(name: str, exc: BaseException, hint: str = "") -> None: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 332 | def _resolve_local_schema_ref(root: dict[str, Any], ref: str) -> Any: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 355 | def _rewrite_local_schema_refs(schema: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 411 | def _normalize_nullable_schema(schema: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 462 | def _normalize_schema_for_openai(schema: Any) -> dict[str, Any]: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/base.py | 56 | def validate_json_schema_value( | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 437 | def mark_inbound_in_transcript(conn: sqlite3.Connection, inbound_id: str) -> bool: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 982 | def _whole_numbers_as_integers(value: object) -> object: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 1071 | def open_approval_for_session(conn: sqlite3.Connection, session_key: str) -> Approval | None: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 1277 | def commit_summary_checkpoint(conn: sqlite3.Connection, session_key: str, summary: str, boundary: int) -> None: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 1049 | def get_approval_by_tool_call(conn: sqlite3.Connection, session_key: str, tool_call_id: str) -> Approval | None: | STRING |
| LOW | invisible_engine_dots/nanobot/dots/targets.py | 150 | def browser_identity_only_target(params: Mapping[str, Any]) -> str | None: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/targets.py | 178 | def identity_create_arguments(params: Mapping[str, Any]) -> dict[str, Any]: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 180 | def _iso_datetime_with_offset(value: str) -> str: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 227 | def _note_is_absent_or_a_string(cls, value: str | None) -> str | None: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 349 | def _servers_are_named_and_of_one_kind(cls, value: Any) -> Any: | CODE |
| 1605 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 375 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 377 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 427 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 429 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 840 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …ngine_dots/nanobot/providers/openai_compat_provider.py | 842 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 245 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 247 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 289 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 291 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 811 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 813 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 324 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 373 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 475 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 614 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 616 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 667 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 669 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 741 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 743 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 825 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 827 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 909 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 911 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 1151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 1153 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 1198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/store.py | 1200 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 256 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 258 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 283 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 285 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 341 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 343 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 500 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/browser.py | 502 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 279 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 281 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 367 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 369 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 38 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …_engine_dots/tests/core/tools/test_filesystem_tools.py | 197 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …engine_dots/tests/core/tools/test_edit_enhancements.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | invisible_engine_dots/nanobot/providers/registry.py | 8 | CODE | |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 5 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/prompt_count.py | 23 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/dict_keys.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/cancellation.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/runtime.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/file_diff.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/llm_runtime.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/memory.py | 9 | CODE | |
| LOW | …sible_engine_dots/nanobot/agent/transcript_metadata.py | 7 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/hook.py | 3 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 8 | CODE | |
| LOW | …ble_engine_dots/nanobot/agent/tools/_search_content.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/execution.py | 10 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 3 | CODE | |
| LOW | …visible_engine_dots/nanobot/agent/tools/apply_patch.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/registry.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/cron.py | 5 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/shell.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/context.py | 2 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/gate_types.py | 9 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/file_state.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/base.py | 2 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/schema.py | 12 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 43 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/server.py | 14 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/targets.py | 13 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/provider.py | 9 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/skills.py | 11 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/memory_update.py | 22 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/checks.py | 7 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 11 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/identity_rules.py | 19 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/computer.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/mcp_servers.py | 25 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/browser.py | 35 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 33 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/spend.py | 38 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/turns.py | 18 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/secrets.py | 9 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/gate.py | 33 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/transcript_outbox.py | 38 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/images.py | 19 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/permissions.py | 23 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/main.py | 9 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/projection.py | 8 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/browser_tools.py | 19 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/conversations.py | 22 | CODE | |
| LOW | invisible_engine_dots/nanobot/cron/types.py | 3 | CODE | |
| LOW | …ible_engine_dots/nanobot/session/history_visibility.py | 3 | CODE | |
| LOW | invisible_engine_dots/nanobot/session/summary.py | 3 | CODE | |
| LOW | invisible_engine_dots/tests/conftest.py | 3 | CODE | |
| LOW | invisible_engine_dots/tests/test_dependencies.py | 9 | CODE | |
| LOW | invisible_engine_dots/tests/test_imports.py | 7 | CODE | |
| 98 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | invisible_engine_dots/nanobot/dots/engine.py | 353 | # What the host sent, as it sent it: a field it left out is not stored as null, which the parse refuses. | COMMENT |
| HIGH⚡ | invisible_engine_dots/tests/dots/test_browser_tools.py | 290 | for identity_id in (alone, null, blank): | CODE |
| HIGH | …ible_engine_dots/tests/dots/test_exec_through_relay.py | 200 | command=f"sleep 3 && touch {marker}", timeout=1 | CODE |
| HIGH | tests/bench/author.py | 136 | solve="cd data && find . -type f -size +1048576c -printf '%s %P\\n' | sort -rn > /app/large.txt", | STRING |
| HIGH⚡ | tests/bench/author.py | 485 | "mkdir -p project && cd project && git init -q -b main && git config user.email dev@example.com && git config us | STRING |
| HIGH⚡ | tests/bench/author.py | 486 | " && printf 'def add(a, b):\\n return a + b\\n\\nprint(add(2, 4))\\n' > calc.py && git add . && git commit -q | STRING |
| HIGH⚡ | tests/bench/author.py | 487 | " && printf 'notes\\n' > NOTES.md && git add . && git commit -qm 'notes'" | STRING |
| HIGH⚡ | tests/bench/author.py | 488 | " && printf 'def add(a, b):\\n return a + b - 1\\n\\nprint(add(2, 4))\\n' > calc.py && git commit -qam 'tidy | STRING |
| HIGH⚡ | tests/bench/author.py | 489 | " && printf 'more notes\\n' >> NOTES.md && git commit -qam 'more notes'" | STRING |
| HIGH⚡ | tests/bench/author.py | 490 | " && git rev-parse HEAD~1 > /app/.bad && git rev-parse HEAD > /app/.head" | STRING |
| HIGH | tests/bench/author.py | 641 | solve="""mkdir -p ~/.ssh && chmod 700 ~/.ssh | STRING |
| HIGH⚡ | tests/bench/author.py | 895 | " && echo 'int main(){return 0;}' > project/src/a.c && echo 'keep' > project/src/lib/b.c && echo 'print(1)' > pr | STRING |
| HIGH⚡ | tests/bench/author.py | 896 | " && echo 'notes' > project/docs/build.md && echo 'not an object' > project/docs/demo.o.txt && echo 'old' > proj | STRING |
| HIGH⚡ | tests/bench/author.py | 898 | solve="cd project && find . -name '*.o' -type f -delete && rm -rf build && find . -name __pycache__ -type d -prune - | STRING |
| HIGH | tests/bench/author_long.py | 186 | curl -s -o /dev/null http://127.0.0.1:7070/stats && exit 0 | STRING |
| HIGH | tests/bench/author_long.py | 405 | setup=["python3 gen.py && rm gen.py"], | STRING |
| HIGH | tests/bench/dots_harbor/environment.py | 167 | f"set -a; . {ENV_FILE} 2>/dev/null; set +a; {exports}" | CODE |
| HIGH | tests/bench/dots_harbor/environment.py | 199 | f"mkdir -p {shlex.quote(target)} && tar -xf {staged} -C {shlex.quote(target)} --no-same-owner && rm -f {stag | CODE |
| HIGH | tests/bench/dots_harbor/dockerfile.py | 117 | steps.append(Step("run", "echo 'COPY --from is not replayed' >&2 && false")) | CODE |
| HIGH | guest/image-builder/runtime/vmproxy.py | 75 | "resolvectl dns tun0 198.18.0.2 && resolvectl domain tun0 '~.' && resolvectl default-route tun0 yes\n" | CODE |
| HIGH | guest/image-builder/runtime/vmproxy.py | 76 | f"resolvectl default-route {device} no || true\n" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | invisible_engine_dots/nanobot/providers/prompt_count.py | 29 | from nanobot.utils.helpers import estimate_prompt_tokens | CODE |
| CRITICAL | invisible_engine_dots/nanobot/providers/base.py | 19 | from nanobot.utils.helpers import sanitize_surrogates_deep | CODE |
| CRITICAL | invisible_engine_dots/nanobot/utils/runtime.py | 7 | from nanobot.utils.helpers import stringify_text_blocks | CODE |
| CRITICAL | invisible_engine_dots/nanobot/dots/memory_update.py | 42 | from nanobot.utils.helpers import estimate_prompt_tokens_chain | CODE |
| CRITICAL | …_engine_dots/tests/core/providers/test_prompt_count.py | 12 | from nanobot.utils.helpers import estimate_prompt_tokens, estimate_prompt_tokens_chain | CODE |
| CRITICAL | …ne_dots/tests/core/providers/test_reasoning_content.py | 12 | from nanobot.utils.helpers import build_assistant_message | CODE |
| CRITICAL | …le_engine_dots/tests/core/utils/test_token_encoding.py | 146 | from nanobot.utils.helpers import estimate_message_tokens | CODE |
| CRITICAL | packages/channels/src/whatsapp-baileys/auth-state.ts | 67 | found[id] = type === "app-state-sync-key" ? this.lib.proto.Message.AppStateSyncKeyData.fromObject(value as { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 791 | except Exception: | CODE |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 915 | except Exception as e: | CODE |
| LOW⚡ | invisible_engine_dots/nanobot/providers/base.py | 116 | except Exception: | CODE |
| LOW⚡ | invisible_engine_dots/nanobot/providers/base.py | 119 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 91 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 726 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 925 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 1021 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/token_encoding.py | 21 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/token_encoding.py | 37 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 339 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 486 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 543 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 210 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 254 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 282 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/memory.py | 240 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/execution.py | 171 | except Exception as exc: | CODE |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 732 | except Exception as exc: | CODE |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 830 | except Exception as exc: | CODE |
| LOW | …visible_engine_dots/nanobot/agent/tools/apply_patch.py | 231 | except Exception: | CODE |
| LOW | …visible_engine_dots/nanobot/agent/tools/apply_patch.py | 246 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/registry.py | 148 | except Exception: | CODE |
| LOW⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 241 | except Exception as e: | CODE |
| LOW⚡ | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 285 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 766 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 920 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/shell.py | 248 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/shell.py | 282 | except Exception as exc: | CODE |
| MEDIUM | invisible_engine_dots/nanobot/agent/tools/mcp.py | 1014 | def own_connection() -> None: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 307 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 571 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 589 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 687 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 785 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 958 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 976 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 986 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 1055 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 382 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 681 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 277 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/server.py | 228 | except Exception as error: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/server.py | 448 | except Exception as error: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/mcp_servers.py | 392 | except Exception as error: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/browser.py | 806 | except Exception as error: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 582 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 758 | except Exception: | CODE |
| MEDIUM | invisible_engine_dots/nanobot/dots/engine.py | 616 | def _run_memory_pass(self) -> None: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/turns.py | 278 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/dots/turns.py | 495 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 66 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 90 | except Exception as exc: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 97 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 152 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 199 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 437 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 478 | except Exception: | CODE |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 519 | except Exception as e: | CODE |
| LOW | invisible_engine_dots/tests/test_imports.py | 40 | except Exception as exc: # noqa: BLE001 - the failure names the module | CODE |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 307 | CODE | |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 443 | CODE | |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 610 | CODE | |
| LOW | …ngine_dots/nanobot/providers/openai_compat_provider.py | 778 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 472 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 607 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 717 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 780 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 855 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 880 | CODE | |
| LOW | invisible_engine_dots/nanobot/providers/base.py | 1050 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 316 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 386 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 441 | CODE | |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 507 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/runner.py | 203 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/memory.py | 164 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 636 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/context_governance.py | 674 | CODE | |
| LOW | …ble_engine_dots/nanobot/agent/tools/_search_content.py | 64 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 50 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 91 | CODE | |
| LOW | …isible_engine_dots/nanobot/agent/tools/exec_session.py | 735 | CODE | |
| LOW | …visible_engine_dots/nanobot/agent/tools/apply_patch.py | 96 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/cron.py | 123 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 130 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 617 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/filesystem.py | 870 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 355 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 810 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 360 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 757 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/mcp.py | 843 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 78 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 316 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 542 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/base.py | 56 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/memory_update.py | 120 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 253 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 380 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 783 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 390 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/engine.py | 792 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/gate.py | 180 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/images.py | 51 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/conversations.py | 114 | CODE | |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 170 | CODE | |
| LOW | invisible_engine_dots/nanobot/cron/service.py | 316 | CODE | |
| LOW | invisible_engine_dots/tests/test_dependencies.py | 52 | CODE | |
| LOW | …engine_dots/tests/core/agent/test_runner_file_reads.py | 58 | CODE | |
| LOW | invisible_engine_dots/tests/fakes/fake_relay.py | 24 | CODE | |
| LOW | invisible_engine_dots/tests/dots/test_computer.py | 301 | CODE | |
| LOW | invisible_engine_dots/tests/dots/test_computer.py | 306 | CODE | |
| LOW | invisible_engine_dots/tests/dots/test_mcp_servers.py | 247 | CODE | |
| LOW | tests/bench/references/lisp.py | 29 | CODE | |
| LOW | tests/bench/references/lisp.py | 278 | CODE | |
| LOW | tests/bench/references/perft.py | 13 | CODE | |
| LOW | tests/bench/references/perft.py | 65 | CODE | |
| LOW | tests/bench/dots_harbor/environment.py | 109 | CODE | |
| LOW | tests/bench/dots_harbor/environment.py | 183 | CODE | |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/bench/bridge.ts | 62 | print({ ready: true, removed: leftovers.length }); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 68 | print({ id: dot.id }); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 74 | print({ deleted: target }); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 88 | print(ended); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 93 | print((await product.events(target)).filter((e) => !extra || e.data.task_id === extra)); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 97 | print(result); | CODE |
| HIGH⚡ | tests/bench/bridge.ts | 102 | print({ written: extra }); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | invisible_engine_dots/nanobot/utils/helpers.py | 339 | except Exception: | CODE |
| HIGH | invisible_engine_dots/nanobot/utils/helpers.py | 486 | except Exception: | CODE |
| HIGH | invisible_engine_dots/nanobot/utils/helpers.py | 543 | except Exception: | CODE |
| HIGH | invisible_engine_dots/nanobot/agent/tools/shell.py | 40 | except (ProcessLookupError, ChildProcessError): | CODE |
| HIGH | invisible_engine_dots/nanobot/agent/tools/mcp.py | 373 | except (UnicodeDecodeError, ValueError): | CODE |
| HIGH | invisible_engine_dots/nanobot/dots/server.py | 446 | except ConnectionError: | CODE |
| HIGH | invisible_engine_dots/nanobot/dots/checks.py | 103 | except OSError: | CODE |
| HIGH | invisible_engine_dots/nanobot/dots/conversations.py | 64 | except ValueError: | CODE |
| HIGH | guest/image-builder/test/smoke/browser/proxy.py | 31 | except (ConnectionError, asyncio.CancelledError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 1 | # Configuration only: nothing in this repository is a Python package. The | COMMENT |
| LOW | vitest.config.ts | 21 | exclude: ["**/node_modules/**", "**/.next/**", "invisible_engine_dots/**", ...(process.platform === "linux" ? [] : [ | COMMENT |
| LOW | invisible_engine_dots/nanobot/utils/helpers.py | 181 | # Every supported control tag contains '<'; ordinary text only needs trimming. | COMMENT |
| LOW | invisible_engine_dots/nanobot/dots/store.py | 901 | return cursor.rowcount == 1 | COMMENT |
| LOW | invisible_engine_dots/nanobot/dots/protocol.py | 121 | # `main` alone, no tool takes `browser`, and its instructions are the page rules. | COMMENT |
| LOW | invisible_engine_dots/nanobot/dots/browser.py | 61 | from nanobot.dots.protocol import BROWSER_ENV, BROWSERS_DIR, GUEST_DISPLAY, MCP_HOMES_DIR | COMMENT |
| LOW | tests/e2e/linux-host/prepare.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/test/smoke/smoke.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/test/smoke/run.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/test/smoke/prepare-engine.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/test/smoke/lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/test/smoke/browser/smoke.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/runtime/install.sh | 21 | [ -x /opt/invisible-dots-engine/bin/python ] || die "the golden image has no engine environment (a golden image from bef | COMMENT |
| LOW | guest/image-builder/runtime/dot-install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/builder/provision.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/builder/user-data.yaml | 1 | #cloud-config | COMMENT |
| LOW | guest/image-builder/builder/build-browser-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/image-builder/builder/build-engine-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | guest/dot-agentd/cmd/dot-agentd/main.go | 1 | // Command dot-agentd is the computer daemon of a Dot's VM. It serves the | COMMENT |
| LOW | guest/dot-agentd/internal/agentd/server.go | 21 | Token string | COMMENT |
| LOW | guest/dot-agentd/internal/agentd/account_linux.go | 121 | } | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | invisible_engine_dots/nanobot/utils/llm_runtime.py | 22 | # The model's context window, prompt and answer together; None when it is not known. | COMMENT |
| MEDIUM | invisible_engine_dots/nanobot/dots/turns.py | 308 | # Every request uses the whole of what its model can do: its own context window and longest answer. | COMMENT |
| MEDIUM⚡ | invisible_engine_dots/tests/dots/test_projection.py | 33 | # The context window is the model's own (OpenRouter's), read by the turn: the settings name none. | COMMENT |
| MEDIUM | invisible_engine_dots/tests/dots/test_main.py | 282 | # OpenRouter's list of models: each with the context window and the longest answer of the provider it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | invisible_engine_dots/nanobot/agent/tools/shell.py | 175 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 316 | CODE | |
| LOW | invisible_engine_dots/nanobot/agent/tools/search.py | 542 | CODE | |
| LOW | invisible_engine_dots/nanobot/dots/browser.py | 212 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/tests.yml | 263 | # apps/web/e2e/harness.ts. The JUnit report lands in apps/web/playwright-report.xml. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | invisible_engine_dots/tests/core/tools/test_mcp_tool.py | 748 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ible_engine_dots/tests/core/tools/test_search_tools.py | 715 | (tmp_path / "source.txt").write_text("placeholder", encoding="utf-8") | CODE |
| LOW | packages/shared/test/paths.test.ts | 7 | const userHome = resolve("fake-user-home"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | invisible_engine_dots/nanobot/dots/browser.py | 642 | async def _settled(task: asyncio.Task[None] | None) -> None: | CODE |