Your on-phone / mobile AI Agent / Claw, capable of operating terminals and performing a wide range of tasks in the Android world || 你的手机 AI 代理,她可以操作终端,也可以完成 Android 世界的广泛任务
This report summarizes scanner evidence for omnimind-ai/OmniBot, a Dart project with 2,077 GitHub stars. SynthScan examined 530,141 lines of code across 2067 source files, recording 291 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 2.0 (Low 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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 177 finding(s).
Are imports declared and package/API names verified? 94 finding(s).
Are wrappers, guards, and repeated structures necessary? 113 finding(s).
Which changes need focused human review? 291 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
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 291 distinct pattern matches across 19 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 |
|---|---|---|---|---|
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 77 | val call = cn.com.omnimind.baselib.llm.AssistantToolCall(id = "t1", type = "function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 78 | function = cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name = name, arguments = "{}")) | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 133 | cn.com.omnimind.baselib.llm.AssistantToolCall(id = id, type = "function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 134 | function = cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name = "file_read", arguments = "{} | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 160 | val call = cn.com.omnimind.baselib.llm.AssistantToolCall(id = "restored-$index", type = "function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 161 | function = cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name = "file_read", arguments = "{}")) | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 176 | val conversation = cn.com.omnimind.baselib.database.Conversation(id = 42, title = "test", promptTokenThreshold = | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 210 | val call = cn.com.omnimind.baselib.llm.AssistantToolCall(id = "r$i", type = "function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 211 | function = cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name = "file_read", arguments = "{}")) | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 239 | val call=cn.com.omnimind.baselib.llm.AssistantToolCall(id=id,type="function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 240 | function=cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name="custom_page",arguments="{}")) | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 268 | val call = cn.com.omnimind.baselib.llm.AssistantToolCall(id=id,type="function", | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 269 | function=cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name=name,arguments="{}")) | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 359 | val conversation = cn.com.omnimind.baselib.database.Conversation( | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 361 | val entry = cn.com.omnimind.baselib.database.AgentConversationEntry( | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 401 | val conversation = cn.com.omnimind.baselib.database.Conversation(id = 42, title = "test") | CODE |
| CRITICAL | …ind/bot/agent/AgentConversationContextCompactorTest.kt | 434 | val conversation = cn.com.omnimind.baselib.database.Conversation(id = 42, title = "test") | CODE |
| CRITICAL | …omnimind/bot/agent/XiaowanAcpPresentationBridgeTest.kt | 54 | val call = cn.com.omnimind.bot.agent.AssistantToolCall( | CODE |
| CRITICAL | …omnimind/bot/agent/XiaowanAcpPresentationBridgeTest.kt | 56 | function = cn.com.omnimind.bot.agent.AssistantToolCallFunction("file_write", "{\"content\":\"<html>"), | CODE |
| CRITICAL | …/com/omnimind/bot/agent/HttpControllerResponsesTest.kt | 302 | cn.com.omnimind.baselib.llm.AssistantToolCall( | CODE |
| CRITICAL | …/com/omnimind/bot/agent/HttpControllerResponsesTest.kt | 304 | function = cn.com.omnimind.baselib.llm.AssistantToolCallFunction( | CODE |
| CRITICAL | …/com/omnimind/bot/agent/HttpControllerResponsesTest.kt | 670 | cn.com.omnimind.baselib.llm.DeepSeekProvider.requestCapabilities( | CODE |
| CRITICAL⚡ | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 176 | thinking = cn.com.omnimind.baselib.llm.ChatCompletionThinking(type = "enabled"), | CODE |
| CRITICAL⚡ | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 179 | cn.com.omnimind.baselib.llm.ChatCompletionTool( | CODE |
| CRITICAL⚡ | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 180 | function = cn.com.omnimind.baselib.llm.ChatCompletionFunction( | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 727 | thinking = cn.com.omnimind.baselib.llm.ChatCompletionThinking(type = "enabled"), | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 1368 | private fun simpleRequest() = cn.com.omnimind.baselib.llm.ChatCompletionRequest( | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/agent/HttpAgentLlmClientTest.kt | 1370 | cn.com.omnimind.baselib.llm.ChatCompletionMessage( | CODE |
| CRITICAL⚡ | …mind/bot/agent/AgentHistoryToolOutputProjectionTest.kt | 73 | cn.com.omnimind.baselib.llm.ChatCompletionMessage(role = "assistant", toolCalls = listOf( | CODE |
| CRITICAL⚡ | …mind/bot/agent/AgentHistoryToolOutputProjectionTest.kt | 74 | cn.com.omnimind.baselib.llm.AssistantToolCall(id = "call-a", function = | CODE |
| CRITICAL⚡ | …mind/bot/agent/AgentHistoryToolOutputProjectionTest.kt | 75 | cn.com.omnimind.baselib.llm.AssistantToolCallFunction(name = "file_read", arguments = "{}")))), | CODE |
| CRITICAL⚡ | …mind/bot/agent/AgentHistoryToolOutputProjectionTest.kt | 76 | cn.com.omnimind.baselib.llm.ChatCompletionMessage(role = "tool", toolCallId = "call-a"), | CODE |
| CRITICAL | …mnimind/bot/agent/runtime/LocalAcpSessionDeleteTest.kt | 45 | cn.com.omnimind.baselib.database.AgentSessionBinding(7, "session-one", "/workspace", 1, 1) | CODE |
| CRITICAL | …mind/bot/agent/runtime/LocalAcpSessionListStateTest.kt | 57 | val archived = cn.com.omnimind.baselib.database.Conversation(id = 7, title = "Task", isArchived = true) | CODE |
| CRITICAL | …d/bot/agent/runtime/AgentRuntimeProtocolPayloadTest.kt | 428 | com.agentclientprotocol.model.SessionUpdate.ToolCallUpdate.serializer(), | STRING |
| CRITICAL | …d/bot/agent/runtime/AgentRuntimeProtocolPayloadTest.kt | 450 | com.agentclientprotocol.model.SessionUpdate.ToolCallUpdate.serializer(), | CODE |
| CRITICAL | …omnimind/bot/agent/runtime/AcpAgentProfileStoreTest.kt | 237 | val profile = cn.com.omnimind.baselib.llm.ModelProviderProfile( | CODE |
| CRITICAL | app/src/main/java/cn/com/omnimind/bot/App.kt | 95 | cn.com.omnimind.baselib.llm.chatgpt.ChatGptOAuthManager.initialize(this) | CODE |
| CRITICAL | app/src/main/java/cn/com/omnimind/bot/App.kt | 133 | cn.com.omnimind.baselib.llm.ModelSceneRegistry.init(this) | CODE |
| CRITICAL | …in/java/cn/com/omnimind/bot/ui/channel/CacheChannel.kt | 211 | val message = cn.com.omnimind.baselib.database.Message( | CODE |
| CRITICAL | …in/java/cn/com/omnimind/bot/ui/channel/CacheChannel.kt | 244 | val message = cn.com.omnimind.baselib.database.Message( | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/omniflow/OmniFlowAppPlatform.kt | 133 | cn.com.omnimind.bot.plugin.runtime.RuntimeSkillLocation( | CODE |
| CRITICAL | …in/java/cn/com/omnimind/bot/update/AppUpdateManager.kt | 623 | "sdkInt" to android.os.Build.VERSION.SDK_INT.toString(), | CODE |
| CRITICAL⚡ | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 810 | val outcome = cn.com.omnimind.bot.agent.AgentConversationContextCompactor( | CODE |
| CRITICAL⚡ | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 811 | historyRepository = cn.com.omnimind.bot.agent.AgentConversationHistoryRepository(context), | CODE |
| CRITICAL⚡ | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 815 | cn.com.omnimind.bot.agent.AgentWorkspaceManager(context).writeOffload(sessionId.value, "txt", output | CODE |
| CRITICAL | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 866 | is AgentResult.Error -> throw cn.com.omnimind.bot.agent.AgentRuntimeErrorSupport.acpPromptFailure(result.mes | CODE |
| CRITICAL | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 950 | val catalog = cn.com.omnimind.bot.agent.runtime.fetchAgentProviderModels( | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/agent/runtime/NaCloudRuntime.kt | 109 | cn.com.omnimind.bot.webchat.FlutterChatSyncBridge.dispatchNaHistoryOwnerChanged(appContext) | CODE |
| CRITICAL | …va/cn/com/omnimind/bot/agent/runtime/NaCloudRuntime.kt | 121 | cn.com.omnimind.bot.webchat.FlutterChatSyncBridge.dispatchNaHistoryOwnerChanged(appContext) | CODE |
| CRITICAL | …cn/com/omnimind/bot/agent/runtime/AgentOrchestrator.kt | 191 | cn.com.omnimind.baselib.llm.ChatCompletionThinking(type = "disabled") | CODE |
| CRITICAL | …cn/com/omnimind/bot/agent/runtime/OmniAgentExecutor.kt | 193 | val promptCacheKey = cn.com.omnimind.baselib.llm.PromptCacheKeyStore.forConversation( | STRING |
| CRITICAL | …cn/com/omnimind/bot/agent/runtime/OmniAgentExecutor.kt | 458 | return cn.com.omnimind.baselib.llm.ChatCompletionMessage( | STRING |
| CRITICAL | …cn/com/omnimind/bot/agent/runtime/OmniAgentExecutor.kt | 505 | return cn.com.omnimind.baselib.llm.ChatCompletionMessage( | STRING |
| CRITICAL | …mnimind/bot/agent/tool/handlers/TerminalToolHandler.kt | 806 | segments += "export $key=${cn.com.omnimind.bot.termux.TermuxCommandBuilder.quoteForShell(rawValue)}" | CODE |
| CRITICAL | …mnimind/bot/agent/tool/handlers/TerminalToolHandler.kt | 809 | segments += "cd ${cn.com.omnimind.bot.termux.TermuxCommandBuilder.quoteForShell(workingDirectory)}" | CODE |
| CRITICAL | …/bot/agent/tool/handlers/ImageGenerationToolHandler.kt | 216 | require(!cn.com.omnimind.baselib.llm.ChatGptOAuthProvider.isOAuth(profile.sourceType)) { | CODE |
| CRITICAL | …src/main/java/cn/com/omnimind/bot/mcp/WebChatRoutes.kt | 348 | io.ktor.http.ContentDisposition.Attachment.withParameter( | CODE |
| CRITICAL | …java/cn/com/omnimind/bot/manager/AssistsCoreManager.kt | 2146 | cn.com.omnimind.bot.agent.WorkspaceShortMemoryEntry( | STRING |
| CRITICAL | …java/cn/com/omnimind/bot/manager/AssistsCoreManager.kt | 3035 | val target = cn.com.omnimind.bot.agent.ChatConversationPreferences(context).lastTarget() | STRING |
| 10 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/omni-vlm-lite/tests/test_component_bundle.py | 19 | def test_component_contract_matches_current_runtime_layout(self) -> None: | CODE |
| LOW | plugins/omni-vlm-lite/tests/test_runtime_bundle.py | 59 | def test_release_asset_matches_catalog(self) -> None: | CODE |
| LOW | plugins/omni-vlm-lite/tests/test_runtime_bundle.py | 70 | def test_release_is_self_contained_mobile_component(self) -> None: | CODE |
| LOW | plugins/omni-vlm-lite/tests/test_runtime_bundle.py | 98 | def test_release_pins_canonical_omniflow(self) -> None: | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 27 | def test_codex_detail_requires_actual_persisted_exit_explanation(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 36 | def test_terminal_recovery_requires_real_successful_tool(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 46 | def test_terminal_completion_can_end_on_tool_without_assistant_prose(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 59 | def test_tool_only_turn_can_have_official_cancellation(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 63 | def test_tool_text_without_terminal_metadata_cannot_claim_cancellation(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 68 | def test_inband_text_error_must_preserve_partial_output(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 74 | def test_inband_tool_error_must_not_execute_buffered_tool(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 82 | def test_mcp_denial_requires_one_failed_tool_and_http_category(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 93 | def test_earlier_failure_cannot_satisfy_new_turn(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 96 | def test_later_failure_cannot_satisfy_earlier_turn(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 99 | def test_duplicate_user_admission_is_rejected(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 102 | def test_current_failure_is_accepted(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 105 | def test_wrong_error_category_is_rejected(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 108 | def test_unrelated_turn_identity_is_rejected(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 112 | def test_failure_cannot_be_reported_as_recovery(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 116 | def test_cancelled_requires_official_terminal_reason(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 120 | def test_cancelled_is_accepted_without_becoming_failure(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 124 | def test_failure_or_success_cannot_pass_as_cancelled(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 127 | def test_cancelled_but_loading_is_rejected(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 132 | def test_live_scenario_requires_canonical_completion_after_freeform_reply(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 137 | def test_live_reply_without_prompt_response_is_not_done(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 142 | def test_quoted_live_marker_does_not_match_user_admission(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 150 | def test_permission_failure_cannot_satisfy_missing_file(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 153 | def test_actual_missing_path_is_accepted(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 156 | def test_unknown_tool_must_identify_the_failed_capability(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 159 | def test_bad_arguments_must_reach_argument_parsing(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 166 | def test_current_pending_permission_is_required(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 169 | def test_historical_permission_cannot_satisfy_current_wait(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 172 | def test_resolved_or_unaddressable_permission_is_not_pending(self): | CODE |
| LOW⚡ | scripts/test_agent_turn_outcome.py | 178 | def test_cancelled_turn_cannot_keep_pending_permission(self): | CODE |
| LOW | scripts/test_agent_turn_outcome.py | 15 | def test_codex_command_rejects_startup_failure_and_missing_output(self): | CODE |
| LOW | scripts/test-chat-history-query.py | 45 | def test_index_preserves_all_pages_and_avoids_full_sort(self): | CODE |
| LOW | scripts/test-chat-history-query.py | 65 | def test_conversation_paging_filters_before_offset_and_orders_like_sidebar(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 10 | def test_remote_read_error_with_zero_adb_exit(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 15 | def test_unpublished_pid_waits(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 19 | def test_invalid_pid_rejected(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 22 | def test_natural_expiry_cannot_satisfy_cancellation(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 30 | def test_other_owner_is_rejected(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 32 | def test_other_command_is_rejected(self): | CODE |
| LOW⚡ | scripts/test-terminal-child-state.py | 37 | def test_invalid_observation_is_rejected(self): | CODE |
| LOW | scripts/test-history-item-removal.py | 38 | def test_removal_keeps_unloaded_history_other_conversations_and_full_payloads(self): | CODE |
| LOW | scripts/test-history-item-removal.py | 50 | def test_checkpoint_only_invalidates_when_removed_identity_touches_prefix(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 18 | def test_attachment_is_required_and_cancel_is_not_success(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 26 | def test_active_requires_output_identity_and_no_terminal(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 34 | def test_old_success_cannot_pass(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 36 | def test_duplicate_submission(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 39 | def test_error_cancel_and_pending_never_pass(self): | CODE |
| LOW⚡ | scripts/test-agent-init-assertions.py | 48 | def test_duplicate_tool_projection(self): | CODE |
| LOW⚡ | scripts/test-terminal-host-stop.py | 9 | def test_stop_reaches_runtime_cleanup_and_preserves_stdin(self): | CODE |
| LOW⚡ | scripts/test-terminal-host-stop.py | 12 | def test_nonzero_exit_and_stdin_are_preserved(self): | CODE |
| LOW⚡ | scripts/test-terminal-host-stop.py | 15 | def test_maintenance_launch_preserves_existing_runtime_stdio(self): | CODE |
| LOW⚡ | scripts/test-terminal-host-stop.py | 18 | def test_maintenance_never_initializes_missing_or_incomplete_rootfs(self): | CODE |
| LOW⚡ | scripts/test-agent-context-checkpoint.py | 18 | def test_same_task_checkpoint_is_stable_across_database_reopen(self): | CODE |
| LOW⚡ | scripts/test-agent-context-checkpoint.py | 23 | def test_old_summary_does_not_prove_new_compaction(self): | CODE |
| LOW⚡ | scripts/test-agent-context-checkpoint.py | 26 | def test_unfinished_tool_cannot_be_checkpoint(self): | CODE |
| LOW⚡ | scripts/test-agent-context-checkpoint.py | 29 | def test_later_task_checkpoint_is_not_accepted(self): | CODE |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/pubspec.yaml | 1 | name: ui | COMMENT |
| LOW | ui/pubspec.yaml | 121 | # For details regarding adding assets from package dependencies, see | COMMENT |
| LOW | ui/pubspec.yaml | 141 | # For details regarding fonts from package dependencies, | COMMENT |
| LOW | ui/lib/core/mixins/page_lifecycle_mixin.dart | 1 | import 'package:flutter/material.dart'; | COMMENT |
| LOW | ui/lib/features/home/pages/chat/chat_page.dart | 201 | // Presentation only: target resolution/history hydration is distinct from | COMMENT |
| LOW | …/features/home/pages/chat/chat_page_model_context.dart | 461 | return; | COMMENT |
| LOW | …/features/home/pages/chat/chat_page_model_context.dart | 901 | // DismissOverlayOnKeyboardHide 已提取到 lib/widgets/glass_popup.dart, | COMMENT |
| LOW | …tures/home/pages/chat/chat_page_conversation_flow.dart | 721 | // The preserved composer remains editable for the user to send later. | COMMENT |
| LOW | ui/lib/features/home/pages/chat/chat_page_ui.dart | 981 | _conversationModeForPageMode(mode) == ConversationMode.chatOnly; | COMMENT |
| LOW | …features/home/pages/chat/utils/agent_run_timeline.dart | 21 | /// Whether an agent turn is still producing output. | COMMENT |
| LOW | …features/home/pages/chat/utils/agent_run_timeline.dart | 741 | } | COMMENT |
| LOW | …ages/chat/utils/composer_keyboard_metrics_tracker.dart | 21 | /// - `viewPadding.bottom` can momentarily report 0 or a stale value while | COMMENT |
| LOW | …ome/pages/chat/utils/composer_lift_intent_tracker.dart | 1 | import 'dart:math' as math; | COMMENT |
| LOW | …tures/home/pages/chat/services/chat_runtime_state.dart | 61 | final String mode; | COMMENT |
| LOW | …tures/home/pages/chat/services/chat_runtime_state.dart | 121 | COMMENT | |
| LOW | …tures/home/pages/chat/services/chat_runtime_state.dart | 241 | .millisecondsSinceEpoch; | COMMENT |
| LOW | ui/lib/features/home/pages/webview/webview_page.dart | 41 | int _loadingProgress = 0; | COMMENT |
| LOW | …s/home/pages/authorize/widgets/permission_section.dart | 41 | iconClick: item.iconClick, | COMMENT |
| LOW | …s/home/pages/authorize/widgets/permission_section.dart | 61 | // padding: const EdgeInsets.symmetric( | COMMENT |
| LOW | …res/memory/pages/memory_center/memory_center_page.dart | 61 | // AppTag( | COMMENT |
| LOW | …res/memory/pages/memory_center/memory_center_page.dart | 81 | // ), | COMMENT |
| LOW | …res/memory/pages/memory_center/memory_center_page.dart | 101 | // tags: [ | COMMENT |
| LOW | …res/memory/pages/memory_center/memory_center_page.dart | 721 | // left: 0, | COMMENT |
| LOW | …es/memory/pages/memory_center/widgets/memory_card.dart | 141 | child: | COMMENT |
| LOW | …es/memory/pages/memory_center/widgets/memory_card.dart | 161 | // child: SvgPicture.asset( | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 41 | COMMENT | |
| LOW | ui/lib/theme/app_text_styles.dart | 61 | // fontFamily: fontFamily, | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 81 | // fontWeight: FontWeight.w400, | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 101 | // color: AppColors.text50, | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 121 | // height: 1.5, | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 141 | // // 特殊样式 | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 161 | // fontFamily: fontFamily, | COMMENT |
| LOW | ui/lib/theme/app_text_styles.dart | 181 | // fontSize: 12, | COMMENT |
| LOW | ui/lib/services/agent_event_reducer.dart | 461 | // One conversation has one active turn. A delayed update from an older | COMMENT |
| LOW | ui/lib/services/cache_service.dart | 121 | /// | COMMENT |
| LOW | ui/lib/widgets/streaming_text.dart | 61 | final isCurrentLowSurrogate = currentUnit >= 0xDC00 && currentUnit <= 0xDFFF; | COMMENT |
| LOW | ui/lib/widgets/glass_popup.dart | 21 | /// 但触发按钮只有 24 宽),按 anchor 对齐会让 popup 几乎横跨整个屏幕、 | COMMENT |
| LOW | ui/lib/widgets/glass_popup.dart | 621 | return Rect.fromLTWH(local.dx, local.dy, 0, 0); | COMMENT |
| LOW | ui/lib/widgets/glass_popup.dart | 901 | // 全部跌到 0 再触发收起 popup,popup 的反向动画(220ms)就要排在 IME 动画 | COMMENT |
| LOW | ui/lib/widgets/flclash/liquid_glass_capture.dart | 1 | // Adapted from chen08209/FlClash at | COMMENT |
| LOW | …java/cn/com/omnimind/bot/agent/XiaowanAcpConnection.kt | 1101 | // data-only images: AgentWorkspaceAttachmentSupport can | COMMENT |
| LOW | …/com/omnimind/bot/agent/runtime/AgentRuntimeManager.kt | 1121 | } | COMMENT |
| LOW | …a/cn/com/omnimind/bot/agent/runtime/LocalAcpRuntime.kt | 3801 | // Never let a timeline update through without a turn id. Updates that | COMMENT |
| LOW | …c/main/java/cn/com/omnimind/baselib/util/SchemeUtil.kt | 81 | val fallbackUri = "https://sj.qq.com/appdetail/$packageName" | COMMENT |
| LOW | …screens/terminal/virtualkeys/VirtualKeysConstants.java | 161 | new VirtualKeyDisplayMap() { | COMMENT |
| LOW | …/src/test/java/com/termux/terminal/KeyHandlerTest.java | 61 | // K3=Upper right of keypad (xterm sends "<ESC>[5~" = Page Up). | COMMENT |
| LOW | …src/test/java/com/termux/terminal/TerminalRowTest.java | 381 | for (int point : points) { | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 941 | // for terminfo colors), and TN for termcap name (or name for terminfo name). | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1301 | // mouse report. | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1321 | // (4) allows modification of function-keys, overrides use of Shift-modifier for UDK. | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1341 | // - Set it to 2 to force the modifier to be the second parameter if it would otherwise be the first. | COMMENT |
| LOW | ReTerminal/core/terminal-emulator/src/main/jni/termux.c | 1 | #include <dirent.h> | COMMENT |
| LOW | workers/app-update-worker/worker.js | 1061 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ui/test/agent_tool_summary_card_test.dart | 0 | diff --git a/lib/main.dart b/lib/main.dart --- a/lib/main.dart +++ b/lib/main.dart @@ -1,2 +1,2 @@ -old line +new line s | STRING |
| HIGH | ui/test/agent_tool_detail_sheet_test.dart | 0 | diff --git a/lib/main.dart b/lib/main.dart --- a/lib/main.dart +++ b/lib/main.dart @@ -1,2 +1,2 @@ -old line +new line s | STRING |
| HIGH | ui/test/agent_tool_detail_body_test.dart | 0 | diff --git a/lib/main.dart b/lib/main.dart --- a/lib/main.dart +++ b/lib/main.dart @@ -1,2 +1,2 @@ -old line +new line s | STRING |
| HIGH | ui/test/services/agent_event_reducer_test.dart | 0 | diff --git a/lib/main.dart b/lib/main.dart --- a/lib/main.dart +++ b/lib/main.dart @@ -1,2 +1,2 @@ -old line +new line s | STRING |
| HIGH | ui/test/services/agent_diff_parser_test.dart | 0 | diff --git a/lib/main.dart b/lib/main.dart --- a/lib/main.dart +++ b/lib/main.dart @@ -1,2 +1,2 @@ -old line +new line s | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …res/memory/pages/memory_center/memory_center_page.dart | 230 | print('Error loading data: $e'); | CODE |
| MEDIUM | …res/memory/pages/memory_center/memory_center_page.dart | 630 | print('Error loading short memories: $e'); | CODE |
| MEDIUM | ui/lib/features/my/pages/my/my_page.dart | 58 | print('Error loading vibration state: $e'); | CODE |
| MEDIUM | ui/lib/features/my/pages/my/my_page.dart | 72 | print('Error loading user data: $e'); | CODE |
| MEDIUM | …sk/pages/scheduled_tasks/scheduled_task_list_page.dart | 78 | print('Error loading scheduled page data: $e'); | CODE |
| MEDIUM | …sk/pages/scheduled_tasks/scheduled_task_list_page.dart | 104 | print('Error reloading scheduled tasks: $e'); | CODE |
| MEDIUM | …sk/pages/scheduled_tasks/scheduled_task_list_page.dart | 126 | print('Error reloading exact alarms: $e'); | CODE |
| LOW | scripts/upload_release_asset_to_worker.py | 201 | except Exception: | CODE |
| LOW | scripts/upload_release_asset_to_worker.py | 208 | except Exception as abort_error: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …est/features/my/pages/feedback/feedback_page_test.dart | 68 | (call) async => 'user@example.com', | CODE |
| LOW | …est/features/my/pages/feedback/feedback_page_test.dart | 115 | 'user@example.com', | CODE |
| LOW | …est/features/my/pages/feedback/feedback_page_test.dart | 120 | expect(service.submitted!['accountEmail'], 'user@example.com'); | CODE |
| LOW | …est/features/my/pages/feedback/feedback_page_test.dart | 161 | 'user@example.com', | CODE |
| LOW | ui/test/services/feedback_service_test.dart | 108 | 'accountEmail': 'user@example.com', | CODE |
| LOW | ui/test/services/feedback_service_test.dart | 233 | expect(await FeedbackService.loadAccountEmail(), 'user@example.com'); | CODE |
| LOW | …e/pages/chat/adapters/remote_codex_content_parser.dart | 98 | _remoteCodexFirstText([first['description'], first['placeholder']]) ?? | CODE |
| LOW | …e/pages/chat/adapters/remote_codex_content_parser.dart | 119 | item['placeholder'], | CODE |
| LOW | …e/pages/chat/adapters/remote_codex_content_parser.dart | 121 | params?['placeholder'], | CODE |
| LOW | …/command_overlay/widgets/cards/agent_request_card.dart | 241 | field['placeholder'], | CODE |
| LOW | ui/lib/services/agent_event_reducer.dart | 4844 | _string(first['placeholder']) ?? | CODE |
| LOW | ui/lib/services/agent_event_reducer.dart | 4890 | final detail = _firstString([field['description'], field['placeholder']]); | CODE |
| LOW | …n/release_artifact/ReleaseArtifactInstrumentation.java | 171 | Object legacy = decode("{\"a\":\"fixture\",\"b\":\"test\",\"c\":\"https://example.invalid\",\"d\":\"fake-key | CODE |
| LOW | …n/release_artifact/ReleaseArtifactInstrumentation.java | 172 | Object current = decode("{\"id\":\"fixture\",\"name\":\"test\",\"baseUrl\":\"https://example.invalid\",\"api | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …find-install-skills/scripts/install_with_skills_cli.sh | 2 | # ============================================================ | COMMENT |
| MEDIUM | …find-install-skills/scripts/install_with_skills_cli.sh | 5 | # ============================================================ | COMMENT |
| MEDIUM | scripts/install-dev.sh | 628 | # ── 1. Check device ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/install-dev.sh | 657 | # ── 2. Build ─────────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/welcome/pages/onboarding/pages/development_page.dart | 10 | /// Step 2: pick a starter development-environment preset. | COMMENT |
| LOW | …s/welcome/pages/onboarding/pages/permissions_page.dart | 12 | /// Step 4: grant the app permissions that power floating reminders, | COMMENT |
| LOW | …lcome/pages/onboarding/pages/model_inventory_page.dart | 12 | /// Step 6: review the fetched models and optionally add one manually. | COMMENT |
| LOW | …atures/welcome/pages/onboarding/pages/system_page.dart | 13 | /// Step 1: pick the local Linux distribution. Intentionally not scrollable — | COMMENT |
| LOW | …eatures/welcome/pages/onboarding/pages/tools_page.dart | 10 | /// Step 3: pick optional agents and connection tools, then review the setup. | COMMENT |
| LOW | …e/pages/onboarding/pages/provider_connection_page.dart | 12 | /// Step 5: enter the connection details for the chosen provider. | COMMENT |
| LOW | sources/research_models_dev_cloudflare_proxy.json | 67 | "# anomalyco/models.dev \u2014 providers/cloudflare-ai-gateway/README.md\n\n- Page: GitHub code file\n- URL: htt | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/welcome/pages/onboarding/pages/development_page.dart | 10 | /// Step 2: pick a starter development-environment preset. | COMMENT |
| LOW | …s/welcome/pages/onboarding/pages/permissions_page.dart | 12 | /// Step 4: grant the app permissions that power floating reminders, | COMMENT |
| LOW | …lcome/pages/onboarding/pages/model_inventory_page.dart | 12 | /// Step 6: review the fetched models and optionally add one manually. | COMMENT |
| LOW | …atures/welcome/pages/onboarding/pages/system_page.dart | 13 | /// Step 1: pick the local Linux distribution. Intentionally not scrollable — | COMMENT |
| LOW | …eatures/welcome/pages/onboarding/pages/tools_page.dart | 10 | /// Step 3: pick optional agents and connection tools, then review the setup. | COMMENT |
| LOW | …e/pages/onboarding/pages/provider_connection_page.dart | 12 | /// Step 5: enter the connection details for the chosen provider. | COMMENT |
| LOW | sources/research_models_dev_cloudflare_proxy.json | 67 | "# anomalyco/models.dev \u2014 providers/cloudflare-ai-gateway/README.md\n\n- Page: GitHub code file\n- URL: htt | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/debug-provider-proxy.py | 160 | except KeyboardInterrupt: | CODE |
| HIGH | scripts/test-terminal-host-stop.py | 93 | except ProcessLookupError: pass | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/verify-terminal-stdio.py | 14 | test -f local/alpine/.omnibot-rootfs-ready || exit 1 | CODE |
| HIGH | scripts/verify-terminal-stdio.py | 16 | trap 'rmdir "$probe_dir" 2>/dev/null || true' EXIT | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/debug-provider-proxy.py | 68 | CODE | |
| LOW | scripts/assert-agent-turn-outcome.py | 6 | CODE | |
| LOW | scripts/upload_release_asset_to_worker.py | 143 | CODE | |
| LOW | scripts/generate_splash_animation.py | 69 | CODE | |
| LOW | scripts/test-terminal-host-stop.py | 18 | CODE | |
| LOW | scripts/test-terminal-host-stop.py | 53 | CODE | |
| LOW | scripts/audit-flutter-reachability.py | 16 | CODE | |
| LOW | scripts/performance/dart-kotlin-boundary/seed.py | 17 | CODE | |
| LOW | scripts/performance/startup/prepare.py | 14 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 243 | ├── app/ # Android host app: entry point, agent orchestration, system abilities, MCP, services | CODE |
| MEDIUM | ui/lib/widgets/flclash/search_header.dart | 2 | // lib/ui/scaffold.dart, search_field.dart, button.dart, and motion.dart at | COMMENT |
| MEDIUM | …ponents/compose/preferences/base/PreferenceScaffold.kt | 51 | // retains its full viewport. One scaffold keeps its scroll and focus owners | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/omni-vlm-lite/tests/test_component_bundle.py | 1 | CODE | |
| LOW | plugins/omni-vlm-lite/tests/test_runtime_bundle.py | 1 | CODE | |
| LOW | scripts/mirror_github_release_to_cnb.py | 3 | CODE | |
| LOW | scripts/assert-agent-context-checkpoint.py | 5 | CODE | |
| LOW | scripts/debug-provider-proxy.py | 9 | CODE | |
| LOW | scripts/upload_release_asset_to_worker.py | 8 | CODE | |
| LOW | scripts/verification/release_artifact/build.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 235 | export LLMTHU_API_KEY='your-api-key' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/verification/release_artifact/build.py | 111 | # This harness deliberately never reads project/global release signing properties. | COMMENT |
| MEDIUM | sources/research_models_dev_cloudflare_proxy.json | 19 | "# anomalyco/models.dev\n\n- Page: GitHub repository\n- URL: https://github.com/anomalyco/models.dev\n- Descript | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ui/pubspec.yaml | 73 | # included with your application, so that you can use the icons in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | sources/research_models_dev_cloudflare_proxy.json | 27 | "---\ntitle: Workers API reference\ndescription: Complete reference for the R2 in-Worker API, including bucket a | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install-dev.sh | 3 | # Usage: | COMMENT |