A catgirl who lives with you in real time — reaching out first, sharing your media, and actually getting things done, powered by an embodied emotional engine.🐱❤️一只会主动找你玩的 AI 猫娘。
This report presents the forensic synthetic code analysis of Project-N-E-K-O/N.E.K.O, a Python project with 2,416 GitHub stars. SynthScan v2.0 examined 2,105,309 lines of code across 4342 source files, recording 48861 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 28.4 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 48861 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/monitor.py | 264 | async def translate_japanese_to_chinese(text): | CODE |
| LOW | app/monitor.py | 284 | async def subtitle_websocket_endpoint(websocket: WebSocket): | CODE |
| LOW⚡ | app/monitor.py | 490 | async def cleanup_disconnected_clients(): | CODE |
| LOW | app/main_server/web_app.py | 38 | def _has_generated_asset_version(query_string: bytes) -> bool: | CODE |
| LOW⚡ | app/main_server/web_app.py | 235 | async def _fallback_active_character_identity() -> tuple[str, str]: | CODE |
| LOW⚡ | app/main_server/web_app.py | 244 | def _active_character_cors_headers(request: Request) -> dict[str, str] | None: | CODE |
| LOW⚡ | app/main_server/web_app.py | 252 | async def set_card_drop_active_character(request: Request, payload: dict): | CODE |
| LOW | app/main_server/web_app.py | 284 | async def get_card_drop_active_character( | CODE |
| LOW | app/main_server/web_app.py | 328 | def _runtime_shutdown_has_target() -> bool: | CODE |
| LOW | app/main_server/web_app.py | 404 | async def proxy_user_plugin_market_bridge(request: Request, path: str = ""): | CODE |
| LOW⚡ | app/main_server/__init__.py | 556 | def _enable_main_storage_limited_mode(reason: str) -> None: | CODE |
| LOW⚡ | app/main_server/__init__.py | 564 | def _disable_main_storage_limited_mode() -> None: | CODE |
| LOW⚡ | app/main_server/__init__.py | 570 | def _is_main_limited_mode_allowed_path(path: str, method: str) -> bool: | CODE |
| LOW⚡ | app/main_server/__init__.py | 724 | async def _stop_neko_servers_integration_workers() -> None: | CODE |
| LOW⚡ | app/main_server/__init__.py | 780 | async def _cancel_workshop_background_tasks(*, timeout: float) -> None: | CODE |
| LOW⚡ | app/main_server/__init__.py | 849 | async def _ensure_main_server_runtime_initialized(*, reason: str) -> bool: | CODE |
| LOW⚡ | app/main_server/__init__.py | 1044 | async def release_storage_startup_barrier( | CODE |
| LOW | app/main_server/__init__.py | 143 | def _resolve_user_plugin_base() -> str: | CODE |
| LOW | app/main_server/__init__.py | 264 | def ensure_steamworks_initialized(): | CODE |
| LOW | app/main_server/__init__.py | 321 | def _cloudsave_action_supports_deadline(action) -> bool: | CODE |
| LOW | app/main_server/__init__.py | 334 | def _cloudsave_action_supports_steamworks(action) -> bool: | CODE |
| LOW | app/main_server/__init__.py | 347 | async def _run_cloudsave_manager_action( | CODE |
| LOW | app/main_server/__init__.py | 367 | async def _request_memory_server_shutdown() -> None: | CODE |
| LOW | app/main_server/__init__.py | 392 | async def _request_memory_server_continue_startup(reason: str = "") -> None: | CODE |
| LOW | app/main_server/__init__.py | 431 | async def _request_memory_server_block_startup(reason: str = "") -> None: | CODE |
| LOW | app/main_server/__init__.py | 582 | async def main_storage_limited_mode_guard(request: Request, call_next): | CODE |
| LOW | app/main_server/__init__.py | 619 | async def handle_maintenance_mode_error(_request, exc: MaintenanceModeError): | CODE |
| LOW | app/main_server/__init__.py | 677 | async def _sync_memory_server_after_startup_import(import_result): | CODE |
| LOW | app/main_server/__init__.py | 698 | def _start_neko_servers_integration_workers() -> None: | CODE |
| LOW | app/main_server/__init__.py | 804 | async def _cancel_workshop_background_tasks_for_startup_rollback() -> None: | CODE |
| LOW | app/main_server/__init__.py | 808 | async def _rollback_partial_main_runtime_startup() -> None: | CODE |
| LOW | app/main_server/__init__.py | 1431 | async def request_application_shutdown_async(*, reason: str = "application_request"): | CODE |
| LOW | app/main_server/__init__.py | 1459 | def _request_launcher_shutdown() -> None: | CODE |
| LOW | app/main_server/process_utils.py | 49 | def find_preview_image_in_folder(folder_path): | CODE |
| LOW⚡ | app/main_server/character_runtime.py | 112 | def _iter_sync_connector_tasks(): | CODE |
| LOW⚡ | app/main_server/character_runtime.py | 121 | def _signal_sync_connectors_shutdown(*, log: bool = True) -> None: | CODE |
| LOW⚡ | app/main_server/character_runtime.py | 135 | async def join_sync_connector_tasks(timeout: float = 3.0) -> list[str]: | CODE |
| LOW⚡ | app/main_server/character_runtime.py | 263 | def _select_fallback_session_manager(): | CODE |
| LOW⚡ | app/main_server/character_runtime.py | 1317 | async def switch_current_catgirl_fast(): | CODE |
| LOW | app/main_server/character_runtime.py | 184 | def _reset_sync_connector_shutdown_events() -> None: | CODE |
| LOW | app/main_server/character_runtime.py | 240 | def _get_explicit_session_user_language(name): | CODE |
| LOW | app/main_server/character_runtime.py | 275 | async def _broadcast_to_all_connected(event_payload: dict) -> int: | CODE |
| LOW | app/main_server/character_runtime.py | 966 | async def _refresh_character_globals(): | CODE |
| LOW | app/main_server/character_runtime.py | 1025 | async def _init_character_resources(k: str, is_new_character: bool): | CODE |
| LOW | app/main_server/character_runtime.py | 1261 | async def initialize_character_data(): | CODE |
| LOW⚡ | app/agent_server/registry.py | 114 | def _collect_existing_task_descriptions(lanlan_name: Optional[str] = None) -> list[tuple[str, str]]: | CODE |
| LOW⚡ | app/agent_server/registry.py | 169 | def _set_internal_correction_context(task_info: Dict[str, Any], result: Any) -> None: | CODE |
| LOW⚡ | app/agent_server/registry.py | 179 | def _get_internal_correction_context(task_info: Dict[str, Any]) -> Optional[Dict[str, Any]]: | CODE |
| LOW | app/agent_server/registry.py | 202 | def _tracker_desc_for_task_info(task_info: Dict[str, Any]) -> str: | CODE |
| LOW⚡ | app/agent_server/api_runtime.py | 614 | async def _init_openfang_background(): | CODE |
| LOW⚡ | app/agent_server/api_runtime.py | 802 | def _notify_agent_quota_exceeded(used: int, limit: int) -> None: | CODE |
| LOW | app/agent_server/api_runtime.py | 179 | def _voice_transcript_plugin_gate_reason() -> str: | CODE |
| LOW | app/agent_server/api_runtime.py | 187 | async def _handle_voice_transcript_request(event: Dict[str, Any]) -> None: | CODE |
| LOW | app/agent_server/api_runtime.py | 267 | def _handle_proactive_analyze(messages, lanlan_name, lanlan_key, conversation_id, session_language=None) -> None: | CODE |
| LOW | app/agent_server/api_runtime.py | 390 | async def _background_analyze_and_plan(messages: list[dict[str, Any]], lanlan_name: Optional[str], conversation_id: Opti | CODE |
| LOW | app/agent_server/api_runtime.py | 1283 | async def _openfang_cancel_then_unregister( | CODE |
| LOW⚡ | app/agent_server/api_routes.py | 1149 | def _reset_intent_restore_for_testing() -> None: | CODE |
| LOW⚡ | app/agent_server/api_routes.py | 1157 | async def computer_use_availability(): | CODE |
| LOW | app/agent_server/api_routes.py | 935 | async def _maybe_restore_agent_intent() -> None: | CODE |
| LOW | app/agent_server/api_routes.py | 1045 | async def _restore_llm_dependent_flags(intent: dict) -> None: | CODE |
| 24021 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/agent_server/channels/openfang.py | 300 | # ``{"prompt_tokens": null}`` reached the addition below and raised | COMMENT |
| HIGH | memory/hybrid_recall.py | 846 | "entity": "master" | "neko" | "relationship" | null, | STRING |
| HIGH | config/prompts/prompts_card_assist.py | 239 | - Every field value must be a STRING (no arrays, no objects, no null). | CODE |
| HIGH | config/prompts/prompts_agent.py | 388 | "plugin_args": {{...}} 或 null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 432 | "plugin_args": {{...}} 或 null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 476 | "plugin_args": {{...}} or null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 520 | "plugin_args": {{...}} または null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 564 | "plugin_args": {{...}} 또는 null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 608 | "plugin_args": {{...}} или null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 652 | "plugin_args": {{...}} o null, | CODE |
| HIGH | config/prompts/prompts_agent.py | 696 | "plugin_args": {{...}} ou null, | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 1664 | - Ex. 1: "não dormi bem ontem à noite" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 1673 | {"text": "descrição do fato", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 2276 | {"text": "descrição do fato", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 2277 | {"text": "descrição do fato", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 2654 | - start = event start; end = event end (pattern usually omits end, write null) | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 2658 | - Example 2: "got a cold today" → {"start": {"offset": 0, "unit": "day"}, "end": null} | CODE |
| HIGH⚡ | config/prompts/prompts_memory.py | 2662 | {"entity": "master/neko/relationship", "relation_type": "preference", "reflection": "your reflective insight", "temporal | CODE |
| HIGH | config/prompts/prompts_memory.py | 1422 | - 例 1:用户说"昨天晚上没睡好" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1431 | {"text": "事实描述", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1460 | - 例 1:使用者說「昨天晚上沒睡好」→ event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1469 | {"text": "事實描述", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1494 | - Example 1: "didn't sleep well last night" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1503 | {"text": "fact description", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1528 | - 例 1:「昨夜よく眠れなかった」→ event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1537 | {"text": "事実の説明", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1562 | - 예 1: "어젯밤 잠을 못 잤다" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1571 | {"text": "사실 설명", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1596 | - Пример 1: "плохо спал прошлой ночью" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1605 | {"text": "описание факта", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1630 | - Ej. 1: "no dormí bien anoche" → event_when = {"start": {"offset": -1, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 1639 | {"text": "descripción del hecho", "importance": 7, "entity": "master", "event_when": null}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1728 | {"segment": 1, "facts": [{"text": "事实描述", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1764 | {"segment": 1, "facts": [{"text": "事實描述", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1800 | {"segment": 1, "facts": [{"text": "fact description", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1836 | {"segment": 1, "facts": [{"text": "事実の説明", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1872 | {"segment": 1, "facts": [{"text": "사실 설명", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1908 | {"segment": 1, "facts": [{"text": "описание факта", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1944 | {"segment": 1, "facts": [{"text": "descripción del hecho", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 1980 | {"segment": 1, "facts": [{"text": "descrição do fato", "importance": 7, "event_when": null}]}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2056 | {"text": "事实描述", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2057 | {"text": "事实描述", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2090 | {"text": "事實描述", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2091 | {"text": "事實描述", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2121 | {"text": "fact description", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2122 | {"text": "fact description", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2152 | {"text": "事実の説明", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2153 | {"text": "事実の説明", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2183 | {"text": "사실 설명", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2184 | {"text": "사실 설명", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2214 | {"text": "описание факта", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2215 | {"text": "описание факта", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2245 | {"text": "descripción del hecho", "importance": 7, "entity": "master", "event_when": null, "source": "user_observation | CODE |
| HIGH | config/prompts/prompts_memory.py | 2246 | {"text": "descripción del hecho", "importance": 7, "entity": "neko", "event_when": null, "source": "ai_disclosure"}, | CODE |
| HIGH | config/prompts/prompts_memory.py | 2574 | - 例 2:事实中"今天感冒了" → {"start": {"offset": 0, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 2578 | {"entity": "master/neko/relationship", "relation_type": "preference", "reflection": "你的反思洞察", "temporal_scope": "pattern | CODE |
| HIGH | config/prompts/prompts_memory.py | 2616 | - 例 2:事實中「今天感冒了」→ {"start": {"offset": 0, "unit": "day"}, "end": null} | CODE |
| HIGH | config/prompts/prompts_memory.py | 2620 | {"entity": "master/neko/relationship", "relation_type": "preference", "reflection": "你的反思洞察", "temporal_scope": "pattern | CODE |
| HIGH | config/prompts/prompts_memory.py | 2702 | {"entity": "master/neko/relationship", "relation_type": "preference", "reflection": "あなたの反省的洞察", "temporal_scope": "patt | CODE |
| HIGH | config/prompts/prompts_memory.py | 2736 | - start = 시작점, end = 종료점 (pattern은 보통 end=null) | CODE |
| 3537 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 196 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | pyproject.toml | 202 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 3 | # ============================================================================ | COMMENT |
| MEDIUM | docker/docker-compose.yml | 5 | # ============================================================================ | COMMENT |
| MEDIUM | docker/docker-compose.yml | 24 | # ============================================================================ | COMMENT |
| MEDIUM | docker/docker-compose.yml | 77 | # ============================================================================ | COMMENT |
| MEDIUM | docker/docker-compose.yml | 85 | # ============================================================================ | COMMENT |
| MEDIUM | docker/entrypoint.sh | 1042 | # ── OpenFang (Rust A2A agent daemon) ────────────────────────── | COMMENT |
| MEDIUM | docker/entrypoint.sh | 1233 | # ── 旧版挂载布局检测 ────────────────────────────────────────── | COMMENT |
| MEDIUM | app/main_server/web_app.py | 218 | # ── 健康检查 / 指纹端点 ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | app/main_server/web_app.py | 229 | # ── Card-drop cross-process active-character snapshot ────────────────────── | COMMENT |
| MEDIUM⚡ | app/main_server/character_runtime.py | 1312 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | app/main_server/character_runtime.py | 1314 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/main_server/__main__.py | 60 | # ── 前端构建产物检测 ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | app/agent_server/api_routes.py | 297 | # ── OpenFang endpoints ────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent_server/api_routes.py | 176 | # ── OpenFang LLM Proxy ────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent_server/api_routes.py | 900 | # ─── Agent runtime intent restore ─────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent_server/tracker.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/agent_server/tracker.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/memory_server/outbox_infra.py | 36 | # ── Outbox handler registry + replay (P1.c) ──────────────────────── | COMMENT |
| MEDIUM | app/memory_server/gates.py | 59 | # ── 空闲维护相关 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/memory_server/gates.py | 85 | # ── 持久化维护状态(跨重启保留 review_clean 标记) ────────────────── | COMMENT |
| MEDIUM | app/memory_server/gates.py | 88 | # ── 维护状态的唯一加锁写入口 ──────────────────────────────────────── | COMMENT |
| MEDIUM | app/memory_server/review.py | 636 | # ── best-effort 后台压缩(主路径 compress 失败时兜底)───────────────────── | COMMENT |
| MEDIUM | app/memory_server/runtime.py | 142 | # ── 健康检查 / 指纹端点 ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | app/memory_server/evidence_loops.py | 607 | # ── memory-evidence-rfc §5: one-shot migration ────────────────────── | COMMENT |
| MEDIUM⚡ | app/memory_server/evidence_loops.py | 756 | # ── memory-evidence-rfc §3.5.5: one-shot archive migration ────────── | COMMENT |
| MEDIUM⚡ | app/memory_server/evidence_loops.py | 776 | # ── memory-evidence-rfc §3.5: periodic archive sweep ──────────────── | COMMENT |
| MEDIUM⚡ | app/memory_server/refine_loops.py | 51 | # ── Phase A-4 / A-5: MemoryRefineEngine 接 cron ───────────────────── | COMMENT |
| MEDIUM | app/memory_server/signal_extraction.py | 821 | # ── memory-evidence-rfc §3.4.5: negative-keyword hook helpers ─────── | COMMENT |
| MEDIUM | app/memory_server/routes.py | 2728 | # ── trust pool / identity endpoints ───────────────────────────────────────── | COMMENT |
| MEDIUM | memory/embeddings_fallback.py | 44 | # ── service stub ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/embeddings_fallback.py | 106 | # ── cache-helper stubs ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/embeddings_fallback.py | 130 | # ── decode helpers ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/subject_archive.py | 372 | # ── restore(归档不是删除:可回滚的另一半) ───────────────────────────── | COMMENT |
| MEDIUM⚡ | memory/facts.py | 4825 | # ── external import state (sidecar) ────────────────────────────── | COMMENT |
| MEDIUM | memory/facts.py | 474 | # ── persistence ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/facts.py | 2017 | # ── scoped subject archival (time-driven, 群记忆系列 5/7) ──────── | COMMENT |
| MEDIUM | memory/facts.py | 2301 | # ── extraction ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/facts.py | 5403 | # ── query helpers ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/temporal.py | 113 | # ── offset spec 解析 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/temporal.py | 192 | # ── past 派生判定 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/temporal.py | 302 | # ── 距今多久 label(per Q-α: 0-6d 天 / 7-29d 周 / 30d+ 月) ────────── | COMMENT |
| MEDIUM | memory/temporal.py | 366 | # ── 时间窗口解析(recall_memory 的 time 参数 / 按时间回溯反思) ──────── | COMMENT |
| MEDIUM | memory/temporal.py | 447 | # ── weighted followup sampling (Q1) ─────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 121 | # ── Compaction thresholds (RFC §3.6) ───────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 127 | # ── Type aliases for _record_and_save callbacks (RFC §3.4) ─────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 208 | # ── paths / locks ─────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 232 | # ── low-level append (no lock — caller must hold it) ──────── | COMMENT |
| MEDIUM | memory/event_log.py | 272 | # ── public API: standalone append (no view coupling) ──────── | COMMENT |
| MEDIUM | memory/event_log.py | 281 | # ── read_since / sentinel ─────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 478 | # ── compaction (RFC §3.6) ─────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 604 | # ── _record_and_save (RFC §3.4) ───────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 675 | # ── async duals ───────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/event_log.py | 731 | # ── Reconciler scaffolding (RFC §3.5) ───────────────────────────────────── | COMMENT |
| MEDIUM | memory/anti_repeat.py | 131 | # ── ngram extraction ──────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | memory/anti_repeat.py | 162 | # ── 持久化 schema ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/anti_repeat.py | 193 | # ── BM25 scoring ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/anti_repeat.py | 277 | # ── manager ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | memory/anti_repeat.py | 304 | # ── path / lock ──────────────────────────────────────── | COMMENT |
| 3206 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | launcher.py | 18 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 20 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| LOW | launcher.py | 42 | CODE | |
| 8100 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/runtime_bindings.py | 83 | except Exception as exc: | CODE |
| LOW | app/runtime_bindings.py | 120 | except Exception: | CODE |
| LOW | app/runtime_bindings.py | 139 | except Exception as exc: | CODE |
| LOW | app/runtime_bindings.py | 162 | except Exception: | CODE |
| LOW | app/runtime_bindings.py | 184 | except Exception as exc: | CODE |
| LOW | app/runtime_bindings.py | 203 | except Exception: | CODE |
| LOW | app/monitor.py | 167 | except Exception as e: | CODE |
| LOW | app/monitor.py | 214 | except Exception: | CODE |
| LOW | app/monitor.py | 239 | except Exception as e: | CODE |
| LOW | app/monitor.py | 376 | except Exception as e: | CODE |
| LOW | app/monitor.py | 400 | except Exception as e: | CODE |
| LOW | app/monitor.py | 420 | except Exception as e: | CODE |
| LOW | app/monitor.py | 434 | except Exception as e: | CODE |
| LOW⚡ | app/monitor.py | 497 | except Exception as e: | CODE |
| LOW⚡ | app/monitor.py | 503 | except Exception as e: | CODE |
| MEDIUM | app/monitor.py | 430 | def _send_to_client(client, sender, label): | CODE |
| LOW | app/agent_runtime_intent.py | 96 | except Exception as exc: | CODE |
| LOW | app/agent_runtime_intent.py | 112 | except Exception as exc: | CODE |
| MEDIUM | app/agent_runtime_intent.py | 88 | def _load_from_disk() -> dict[str, bool]: | CODE |
| LOW | app/__init__.py | 46 | except Exception as _e: # pragma: no cover - import-time defensive | CODE |
| LOW⚡ | app/main_server/web_app.py | 239 | except Exception: | CODE |
| LOW | app/main_server/web_app.py | 323 | except Exception as e: | CODE |
| LOW | app/main_server/workshop_runtime.py | 56 | except Exception as e: | CODE |
| LOW | app/main_server/workshop_runtime.py | 78 | except Exception as retry_exc: | CODE |
| LOW⚡ | app/main_server/workshop_runtime.py | 90 | except Exception as e: | CODE |
| LOW⚡ | app/main_server/workshop_runtime.py | 100 | except Exception as e: | CODE |
| LOW⚡ | app/main_server/workshop_runtime.py | 105 | except Exception as e: | CODE |
| LOW | app/main_server/workshop_runtime.py | 143 | except Exception as e: | CODE |
| LOW | app/main_server/workshop_runtime.py | 149 | except Exception as e: | CODE |
| LOW | app/main_server/workshop_runtime.py | 164 | except Exception as mount_err: | CODE |
| MEDIUM | app/main_server/workshop_runtime.py | 53 | def _warmup_only(): | CODE |
| MEDIUM | app/main_server/workshop_runtime.py | 74 | def _retry_sync_after_delay(): | CODE |
| LOW | app/main_server/preload.py | 40 | except Exception as e: | CODE |
| LOW | app/main_server/preload.py | 72 | except Exception as e: | CODE |
| LOW | app/main_server/preload.py | 86 | except Exception as e: | CODE |
| LOW | app/main_server/preload.py | 94 | except Exception as e: | CODE |
| LOW | app/main_server/preload.py | 129 | except Exception as e: | CODE |
| MEDIUM | app/main_server/__init__.py | 304 | print(f"Error accessing Steamworks API: {e}") | CODE |
| MEDIUM | app/main_server/__init__.py | 321 | def _cloudsave_action_supports_deadline(action) -> bool: | CODE |
| MEDIUM | app/main_server/__init__.py | 1459 | def _request_launcher_shutdown() -> None: | CODE |
| LOW⚡ | app/main_server/__init__.py | 713 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 721 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 771 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 786 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 823 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 827 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 836 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 843 | except Exception as exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 1032 | except Exception as _warmup_exc: | CODE |
| LOW⚡ | app/main_server/__init__.py | 1036 | except Exception: | CODE |
| LOW | app/main_server/__init__.py | 186 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 247 | except Exception as overlay_error: | CODE |
| LOW | app/main_server/__init__.py | 251 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 276 | except Exception as exc: | CODE |
| LOW | app/main_server/__init__.py | 303 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 381 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 407 | except Exception: | CODE |
| LOW | app/main_server/__init__.py | 425 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 449 | except Exception as e: | CODE |
| LOW | app/main_server/__init__.py | 692 | except Exception as e: | CODE |
| 5611 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pytest.ini | 1 | [pytest] | COMMENT |
| LOW | requirements.txt | 1 | # This file was autogenerated by uv via the following command: | COMMENT |
| LOW | requirements.txt | 21 | # via jinxed | COMMENT |
| LOW | requirements.txt | 41 | attrs==25.3.0 | COMMENT |
| LOW | requirements.txt | 61 | # translatepy | COMMENT |
| LOW | requirements.txt | 81 | # via | COMMENT |
| LOW | requirements.txt | 101 | # pyrnnoise | COMMENT |
| LOW | requirements.txt | 121 | # dashscope | COMMENT |
| LOW | requirements.txt | 141 | editor==1.6.6 | COMMENT |
| LOW | requirements.txt | 161 | # browser-use | COMMENT |
| LOW | requirements.txt | 181 | googleapis-common-protos==1.72.0 | COMMENT |
| LOW | requirements.txt | 201 | httpcore==1.0.9 | COMMENT |
| LOW | requirements.txt | 221 | # pyncm-async | COMMENT |
| LOW | requirements.txt | 241 | # via browser-use | COMMENT |
| LOW | requirements.txt | 261 | # via | COMMENT |
| LOW | requirements.txt | 281 | # via | COMMENT |
| LOW | requirements.txt | 301 | onnxruntime==1.25.0 | COMMENT |
| LOW | requirements.txt | 321 | # bilibili-api-dev | COMMENT |
| LOW | requirements.txt | 341 | propcache==0.3.2 | COMMENT |
| LOW | requirements.txt | 361 | pyasn1-modules==0.4.2 | COMMENT |
| LOW | requirements.txt | 381 | # pydantic-settings | COMMENT |
| LOW | requirements.txt | 401 | # via pyautogui | COMMENT |
| LOW | requirements.txt | 421 | # pyobjc-framework-automaticassessmentconfiguration | COMMENT |
| LOW | requirements.txt | 441 | # pyobjc-framework-coreaudio | COMMENT |
| LOW | requirements.txt | 461 | # pyobjc-framework-discrecording | COMMENT |
| LOW | requirements.txt | 481 | # pyobjc-framework-inputmethodkit | COMMENT |
| LOW | requirements.txt | 501 | # pyobjc-framework-mediaextension | COMMENT |
| LOW | requirements.txt | 521 | # pyobjc-framework-oslog | COMMENT |
| LOW | requirements.txt | 541 | # pyobjc-framework-securityfoundation | COMMENT |
| LOW | requirements.txt | 561 | # pyobjc-framework-usernotificationsui | COMMENT |
| LOW | requirements.txt | 581 | pyobjc-framework-applescriptobjc==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin') or (platform_relea | COMMENT |
| LOW | requirements.txt | 621 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 641 | # pyobjc-framework-automator | COMMENT |
| LOW | requirements.txt | 661 | # pyobjc-framework-corebluetooth | COMMENT |
| LOW | requirements.txt | 681 | # pyobjc-framework-dvdplayback | COMMENT |
| LOW | requirements.txt | 701 | # pyobjc-framework-iobluetooth | COMMENT |
| LOW | requirements.txt | 721 | # pyobjc-framework-modelio | COMMENT |
| LOW | requirements.txt | 741 | # pyobjc-framework-safetykit | COMMENT |
| LOW | requirements.txt | 761 | # pyobjc-framework-syncservices | COMMENT |
| LOW | requirements.txt | 781 | # pyobjc-framework-contactsui | COMMENT |
| LOW | requirements.txt | 801 | pyobjc-framework-corelocation==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin') or (platform_release | COMMENT |
| LOW | requirements.txt | 821 | # via | COMMENT |
| LOW | requirements.txt | 841 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 861 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 901 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 921 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 941 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 961 | pyobjc-framework-metalperformanceshaders==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin') or (platfo | COMMENT |
| LOW | requirements.txt | 1001 | pyobjc-framework-preferencepanes==11.1 ; platform_system == 'darwin' or sys_platform == 'darwin' | COMMENT |
| LOW | requirements.txt | 1021 | # pyobjc-framework-oslog | COMMENT |
| LOW | requirements.txt | 1041 | pyobjc-framework-screensaver==11.1 ; platform_system == 'darwin' or sys_platform == 'darwin' | COMMENT |
| LOW | requirements.txt | 1061 | # via pyobjc | COMMENT |
| LOW | requirements.txt | 1081 | # via | COMMENT |
| LOW | requirements.txt | 1101 | # pyobjc-framework-usernotificationsui | COMMENT |
| LOW | requirements.txt | 1121 | # via browser-use | COMMENT |
| LOW | requirements.txt | 1141 | # n-e-k-o | COMMENT |
| LOW | requirements.txt | 1161 | pywin32==311 ; sys_platform == 'win32' | COMMENT |
| LOW | requirements.txt | 1181 | qrcode-terminal==0.8 | COMMENT |
| LOW | requirements.txt | 1201 | # google-genai | COMMENT |
| LOW | requirements.txt | 1221 | runs==1.2.2 | COMMENT |
| 1541 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/runtime_bindings.py | 56 | CODE | |
| LOW | app/monitor.py | 178 | CODE | |
| LOW | app/monitor.py | 329 | CODE | |
| LOW | app/monitor.py | 382 | CODE | |
| LOW | app/monitor.py | 490 | CODE | |
| LOW | app/main_server/web_app.py | 252 | CODE | |
| LOW | app/main_server/preload.py | 44 | CODE | |
| LOW | app/main_server/__init__.py | 849 | CODE | |
| LOW | app/main_server/__init__.py | 1044 | CODE | |
| LOW | app/main_server/__init__.py | 1114 | CODE | |
| LOW | app/main_server/__init__.py | 1196 | CODE | |
| LOW | app/main_server/process_utils.py | 72 | CODE | |
| LOW | app/main_server/character_runtime.py | 304 | CODE | |
| LOW | app/main_server/character_runtime.py | 1025 | CODE | |
| LOW | app/agent_server/registry.py | 51 | CODE | |
| LOW | app/agent_server/registry.py | 114 | CODE | |
| LOW | app/agent_server/api_runtime.py | 187 | CODE | |
| LOW | app/agent_server/api_runtime.py | 419 | CODE | |
| LOW | app/agent_server/api_runtime.py | 568 | CODE | |
| LOW | app/agent_server/api_runtime.py | 938 | CODE | |
| LOW | app/agent_server/api_runtime.py | 1219 | CODE | |
| LOW | app/agent_server/api_runtime.py | 996 | CODE | |
| LOW | app/agent_server/api_runtime.py | 705 | CODE | |
| LOW | app/agent_server/api_routes.py | 185 | CODE | |
| LOW | app/agent_server/api_routes.py | 536 | CODE | |
| LOW | app/agent_server/api_routes.py | 810 | CODE | |
| LOW | app/agent_server/api_routes.py | 1350 | CODE | |
| LOW | app/agent_server/api_routes.py | 657 | CODE | |
| LOW | app/agent_server/plugin_host.py | 54 | CODE | |
| LOW | app/agent_server/plugin_host.py | 87 | CODE | |
| LOW | app/agent_server/capabilities.py | 183 | CODE | |
| LOW | app/agent_server/tracker.py | 298 | CODE | |
| LOW | app/agent_server/tracker.py | 432 | CODE | |
| LOW | app/agent_server/tracker.py | 148 | CODE | |
| LOW | app/agent_server/channels/user_plugin.py | 114 | CODE | |
| LOW | app/agent_server/channels/user_plugin.py | 142 | CODE | |
| LOW | app/agent_server/channels/user_plugin.py | 225 | CODE | |
| LOW | app/agent_server/channels/computer_use.py | 41 | CODE | |
| LOW | app/agent_server/channels/computer_use.py | 195 | CODE | |
| LOW | app/agent_server/channels/mcp.py | 24 | CODE | |
| LOW | app/agent_server/channels/openfang.py | 39 | CODE | |
| LOW | app/agent_server/channels/openclaw.py | 318 | CODE | |
| LOW | app/agent_server/channels/openclaw.py | 526 | CODE | |
| LOW | app/agent_server/channels/browser_use.py | 41 | CODE | |
| LOW | app/memory_server/outbox_infra.py | 51 | CODE | |
| LOW | app/memory_server/outbox_infra.py | 165 | CODE | |
| LOW | app/memory_server/review.py | 279 | CODE | |
| LOW | app/memory_server/review.py | 975 | CODE | |
| LOW | app/memory_server/runtime.py | 247 | CODE | |
| LOW | app/memory_server/runtime.py | 617 | CODE | |
| LOW | app/memory_server/locale_state.py | 114 | CODE | |
| LOW | app/memory_server/locale_state.py | 264 | CODE | |
| LOW | app/memory_server/locale_state.py | 314 | CODE | |
| LOW | app/memory_server/locale_state.py | 374 | CODE | |
| LOW | app/memory_server/locale_state.py | 460 | CODE | |
| LOW | app/memory_server/evidence_loops.py | 218 | CODE | |
| LOW | app/memory_server/evidence_loops.py | 480 | CODE | |
| LOW | app/memory_server/evidence_loops.py | 623 | CODE | |
| LOW | app/memory_server/evidence_loops.py | 785 | CODE | |
| LOW | app/memory_server/evidence_loops.py | 902 | CODE | |
| 1423 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/agent_runtime_intent.py | 136 | def set_intent(key: str, value: bool) -> None: | CODE |
| LOW⚡ | app/agent_server/registry.py | 169 | def _set_internal_correction_context(task_info: Dict[str, Any], result: Any) -> None: | CODE |
| LOW | app/agent_server/_shared.py | 160 | def _set_capability(name: str, ready: bool, reason: str = "") -> None: | CODE |
| LOW⚡ | app/agent_server/capabilities.py | 93 | def _set_unloaded_browser_use_capability(capability_reason: Optional[str]) -> None: | CODE |
| LOW | memory/embeddings_fallback.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | memory/recall.py | 86 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | memory/cursors.py | 122 | def set_cursor(self, name: str, key: str, value: datetime) -> None: | CODE |
| LOW | memory/trust_store.py | 615 | def _set_load_failed(value: bool) -> None: | CODE |
| LOW | memory/evidence_analytics.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | memory/evidence_analytics.py | 54 | __all__ = ["funnel_counts", "to_naive_local"] | CODE |
| LOW | memory/recent.py | 383 | def _set_pending_batches(self, lanlan_name: str, messages: list, file_path=None) -> None: | CODE |
| LOW | memory/evidence.py | 47 | __all__ = [ | CODE |
| LOW | memory/fact_dedup.py | 236 | logger = logging.getLogger(__name__) | CODE |
| LOW | memory/persona/mentions.py | 140 | def update_suppressions(self, name: str) -> None: | CODE |
| LOW | config/activity_keywords.py | 89 | __all__ = [ | CODE |
| LOW | config/__init__.py | 451 | __all__ = [ | CODE |
| LOW | config/prompts/prompts_focus.py | 484 | __all__ = [ | CODE |
| LOW | steamworks/_native_ugc.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/conftest.py | 124 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/conftest.py | 256 | def _set_runtime_test_port(port_name: str, port_value: int) -> None: | CODE |
| LOW | tests/debug_connect.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/test_text_chat.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/test_realtime_arbiter_native_path.py | 105 | async def _settle(times: int = 50) -> None: | CODE |
| LOW | tests/unit/test_providers.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/test_realtime_arbiter_fail_open.py | 68 | async def _settle(times: int = 50) -> None: | CODE |
| LOW⚡ | tests/unit/test_core_independent_asr.py | 7076 | def _set_route_then_supersede(mode: str) -> None: | CODE |
| LOW⚡ | tests/unit/test_websocket_binary_audio.py | 70 | def set_goodbye_silent(self, active: bool, reason: str) -> None: | CODE |
| LOW⚡ | tests/unit/test_websocket_binary_audio.py | 76 | def set_independent_asr_handshake(self, value) -> None: | CODE |
| LOW⚡ | tests/unit/test_websocket_binary_audio.py | 79 | def set_voice_input_resource_optimization_handshake(self, value) -> None: | CODE |
| LOW⚡ | tests/unit/test_websocket_binary_audio.py | 142 | def set_independent_asr_handshake(self, value) -> None: | CODE |
| LOW⚡ | tests/unit/test_websocket_binary_audio.py | 146 | def set_voice_input_resource_optimization_handshake(self, value) -> None: | CODE |
| LOW | tests/unit/test_vmc_sender.py | 401 | def set_publisher_generation(self, generation: int) -> None: | CODE |
| LOW | tests/unit/test_realtime_host_turn_identity.py | 95 | async def _settle(times: int = 50) -> None: | CODE |
| LOW | tests/unit/test_audio_processor_lifecycle.py | 279 | def set_enabled(self, enabled: bool) -> None: | CODE |
| LOW | tests/unit/test_audio_processor_lifecycle.py | 304 | def set_enabled(self, enabled: bool) -> None: | CODE |
| LOW | tests/unit/test_cfa_resilience.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/test_realtime_arbiter_escalation_scope.py | 51 | async def _settle(times: int = 50) -> None: | CODE |
| LOW | tests/frontend/test_storage_location_startup.py | 40 | def _set_home_tutorial_startup_released(page: Page, released: bool) -> None: | CODE |
| LOW | tests/utils/prompt_test_judger.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/utils/llm_judger.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/utils/llm_judger.py | 30 | def set_run_tag(self, run_tag: str = "") -> None: | CODE |
| LOW | tests/utils/human_like_judger.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/utils/audio_streamer.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/testbench/model_config.py | 150 | __all__ = [ | CODE |
| LOW | tests/testbench/chat_messages.py | 230 | __all__ = [ | CODE |
| LOW | tests/testbench/api_keys_registry.py | 240 | __all__ = [ | CODE |
| LOW⚡ | tests/testbench/virtual_clock.py | 144 | def set_per_turn_default(self, seconds: int | None) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_prompt_preview_truth_smoke.py | 100 | def set_reply(self, text: str) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_r5_polish_smoke.py | 113 | def set_reply(self, text: str) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_external_events_smoke.py | 105 | def set_reply(self, text: str) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_external_events_smoke.py | 109 | def set_raise(self, exc: BaseException) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_external_events_smoke.py | 136 | def _set_default_persona(client) -> None: | CODE |
| LOW | tests/testbench/smoke/p25_external_events_smoke.py | 149 | def _set_model_config() -> None: | CODE |
| LOW | tests/testbench/smoke/p25_external_events_smoke.py | 1291 | def _set_persona_language(client, language: str) -> None: | CODE |
| LOW | tests/testbench/routers/external_event_router.py | 338 | __all__ = ["router"] | CODE |
| LOW | tests/testbench/routers/chat_router.py | 1537 | __all__ = ["router", "ROLE_SYSTEM", "ROLE_USER", "SOURCE_INJECT", "SOURCE_MANUAL"] | CODE |
| LOW | tests/testbench/routers/judge_router.py | 1652 | __all__ = ["router"] | CODE |
| LOW | tests/testbench/pipeline/avatar_dedupe.py | 198 | __all__ = [ | CODE |
| LOW | tests/testbench/pipeline/refine_sim.py | 78 | __all__ = [ | CODE |
| LOW | tests/testbench/pipeline/topic_sim.py | 97 | __all__ = [ | CODE |
| 420 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | plugin/core/host.py | 183 | return config_path.parent.parent.parent.parent.resolve() | CODE |
| CRITICAL | static/mmd/mmd-core.js | 780 | ? `rgb(${mat.uniforms.diffuse.value.r.toFixed(3)}, ${mat.uniforms.diffuse.value.g.toFixed(3)}, ${mat | CODE |
| CRITICAL | static/mmd/mmd-core.js | 783 | ? `rgb(${mat.uniforms.emissive.value.r.toFixed(3)}, ${mat.uniforms.emissive.value.g.toFixed(3)}, ${m | CODE |
| CRITICAL | static/mmd/mmd-core.js | 1222 | this.manager.currentModel.mesh.scale.setScalar(scale); | CODE |
| CRITICAL | static/live2d/live2d-emotion.js | 190 | this.currentModel.internalModel.motionManager.expressionManager.stopAllExpressions(); | CODE |
| CRITICAL | static/live2d/live2d-emotion.js | 1691 | this.currentModel.internalModel.motionManager.expressionManager.stopAllExpressions(); | CODE |
| CRITICAL | static/vrm/vrm-core.js | 369 | this.manager.currentModel.vrm.scene.traverse((object) => { | CODE |
| CRITICAL | static/vrm/vrm-core.js | 1546 | this.manager.currentModel.vrm.scene.traverse((object) => { | CODE |
| CRITICAL | static/vrm/vrm-manager.js | 1506 | const currentPos = this.currentModel.vrm.scene.position.clone(); | CODE |
| CRITICAL | static/vrm/vrm-manager.js | 1509 | this.currentModel.vrm.scene.position.copy(correctedPos); | CODE |
| CRITICAL | static/vrm/vrm-manager.js | 1663 | if (this.currentModel?.vrm?.scene) this.currentModel.vrm.scene.position.set(x, y, z); | CODE |
| CRITICAL | static/vrm/vrm-manager.js | 1679 | this.currentModel.vrm.scene.scale.set(x, y, z); | CODE |
| CRITICAL | static/vrm/vrm-interaction.js | 471 | const modelCenter = this.manager.currentModel.scene.position.clone(); | CODE |
| CRITICAL | static/vrm/vrm-interaction.js | 492 | const newPosition = this.manager.currentModel.scene.position.clone(); | CODE |
| CRITICAL | static/vrm/vrm-interaction.js | 500 | this.manager.currentModel.scene.position.copy(finalPosition); | CODE |
| CRITICAL | static/app/app-chat-export.js | 3402 | modal.panel.ownerDocument.body.classList.add('chat-export-modal-open'); | CODE |
| CRITICAL | static/libs/three.module.js | 1437 | boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) ); | CODE |
| CRITICAL | static/libs/three.module.js | 1503 | planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); | CODE |
| CRITICAL | static/libs/APlayer.min.js | 1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.am | CODE |
| CRITICAL | brain/cua/core/engine.py | 77 | self.llm_client._client.chat.completions.create( | CODE |
| CRITICAL | brain/cua/core/engine.py | 216 | self.llm_client._client.chat.completions.create( | CODE |
| CRITICAL | brain/cua/core/engine.py | 273 | self.llm_client._client.chat.completions.create( | CODE |
| CRITICAL | brain/cua/core/engine.py | 402 | completion = self.llm_client._client.chat.completions.create( | CODE |
| CRITICAL | brain/cua/core/engine.py | 444 | self.llm_client._client.chat.completions.create( | CODE |
| CRITICAL | brain/cua/core/engine.py | 492 | self.llm_client._client.chat.completions.create( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/testbench/pipeline/snapshot_store.py | 560 | Update the hot cap / debounce window on a live store. Validation: * ``max_hot`` must be ≥ 1 (0 would | STRING |
| HIGH | plugin/core/host.py | 1818 | 触发自定义事件执行 Args: event_type: 自定义事件类型(例如 "file_change", "user_action") e | STRING |
| HIGH | plugin/config/schema.py | 214 | 验证插件配置 Args: config: 从 TOML 文件加载的配置字典 strict: 是否启用严格模式(默认 True) Returns: | STRING |
| HIGH | plugin/config/schema.py | 243 | 验证用户 Profile 配置 Args: config: 从 Profile TOML 文件加载的配置字典 Returns: 验证通过的 ProfileConf | STRING |
| HIGH | plugin/config/schema.py | 274 | 部分验证插件配置(用于配置更新场景) 只验证提供的字段,不要求所有必填字段都存在。 Args: config: 配置字典 require_plugin_secti | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/factory.py | 368 | 从文件加载凭据并创建API客户端 Args: credential_path: 凭据文件路径(可选,默认从配置文件读取) config_path: 配置文件路径(可选) redis_ | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 88 | 获取设备列表 Args: home_id: 家庭ID Returns: 设备列表 Raises: TokenExp | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 103 | 获取单个设备 Args: device_id: 设备ID Returns: 设备对象,不存在返回None Raises: | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 120 | 控制设备属性 控制设备后默认会刷新缓存,确保下次获取的是最新状态。 Args: device_id: 设备ID siid: 服务ID | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 177 | 调用设备操作 调用设备操作后默认会刷新缓存,确保下次获取的是最新状态。 Args: device_id: 设备ID siid: 服务ID | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 227 | 批量控制设备 批量控制设备后默认会刷新缓存,确保下次获取的是最新状态。 Args: requests: 批量请求列表,每个请求包含device_id、siid、piid、value | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 277 | 获取智能列表 Args: home_id: 家庭ID Returns: 智能列表 Raises: TokenExp | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 292 | 执行智能 Args: scene_id: 智能ID home_id: 家庭ID Returns: 是否成功 Rai | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 311 | 获取设备统计信息 Args: home_id: 家庭ID Returns: 统计信息字典,包含总数、在线数、离线数、按型号统计等 Rais | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/api_client.py | 329 | 获取设备规格 Args: model: 设备型号 Returns: 设备规格对象,不存在返回None Raises: | STRING |
| HIGH | …ijia/mijia_api/repositories/async_device_repository.py | 97 | 获取家庭所有者的 UID Args: home_id: 家庭ID credential: 用户凭据 Returns: 家庭所有者的 | STRING |
| HIGH | …/mijia/mijia_api/repositories/property_translations.py | 59 | 从文件加载翻译 Args: file_path: JSON文件路径 Returns: 翻译字典 | STRING |
| HIGH | …gins/mijia/mijia_api/repositories/device_repository.py | 104 | 获取家庭所有者的UID Args: home_id: 家庭ID credential: 用户凭据 Returns: | STRING |
| HIGH | …mijia/mijia_api/repositories/device_spec_repository.py | 47 | 获取设备规格 首先从缓存查找,如果不存在则从网络获取并缓存。 Args: model: 设备型号(如 "xiaomi.light.ceiling1") Retur | STRING |
| HIGH | …mijia/mijia_api/repositories/device_spec_repository.py | 149 | 从网络获取设备规格 Args: model: 设备型号 Returns: 设备规格对象,获取失败返回None Raises: | STRING |
| HIGH | …mijia/mijia_api/repositories/device_spec_repository.py | 190 | 解析设备规格数据(标准miot-spec格式) Args: model: 设备型号 spec_data: 从miot-spec.org获取的标准格式规格数据 | STRING |
| HIGH | …mijia/mijia_api/repositories/device_spec_repository.py | 239 | 解析设备规格数据 Args: model: 设备型号 spec_data: 从API获取的原始规格数据(home.miot-spec.com格式) Retu | STRING |
| HIGH | …/plugins/mijia/mijia_api/infrastructure/http_client.py | 171 | 发送POST请求 仅对白名单内的只读端点启用自动重试(最多3次,指数退避), 写接口默认不重试,防止超时导致重复操作。 Args: path: API路径(相对路径 | STRING |
| HIGH | …/plugins/mijia/mijia_api/infrastructure/http_client.py | 419 | 发送异步POST请求 仅对白名单内的只读端点启用自动重试(最多3次,指数退避), 写接口默认不重试,防止超时导致重复操作。 Args: path: API路径(相对 | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 112 | 刷新凭据 Args: credential: 需要刷新的旧凭据对象 Returns: Credential: 刷新后的新凭据对象 Rais | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 232 | 获取二维码数据 Args: location_data: location参数 Returns: Dict[str, Any]: 包含二维码URL和轮询UR | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 279 | 长轮询等待扫码 Args: poll_url: 轮询URL Returns: Dict[str, Any]: 登录结果数据 Raises: | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 359 | 轮询等待扫码 Args: qr_url: 二维码URL timeout: 超时时间(秒),默认5分钟 Returns: Dict[s | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 406 | 获取service token Args: login_result: 登录结果数据 Returns: Dict[str, Any]: 包含serviceT | STRING |
| HIGH | …/mijia/mijia_api/infrastructure/credential_provider.py | 460 | 刷新service token 通过重新访问serviceLogin接口并携带现有的passToken来刷新凭据。 这是小米账号系统支持的正确刷新方式。 Args: | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/services/auth_service.py | 60 | 刷新凭据 当凭据即将过期或已过期时,使用此方法获取新的凭据。 委托给CredentialProvider执行刷新操作。 Args: credential: 需要刷新 | STRING |
| HIGH | plugin/plugins/mijia/mijia_api/services/auth_service.py | 125 | 撤销凭据 主动撤销凭据,使其在服务器端失效。 委托给CredentialProvider执行撤销操作。 Args: credential: 要撤销的凭据对象 | STRING |
| HIGH | …gin/plugins/mijia/mijia_api/services/device_service.py | 83 | 设置设备属性 包含完整的验证流程: 1. 检查设备是否存在 2. 获取设备规格 3. 验证属性是否可写 4. 验证属性值是否有效 Args: | STRING |
| HIGH | plugin/_types/errors.py | 82 | 从字符串名称获取错误码 Args: name: 错误码名称(如 "VALIDATION_ERROR") Returns: 对 | STRING |
| HIGH | plugin/server/logs.py | 116 | 获取插件的日志目录。 落盘分层(与 writer 侧 ``plugin/core/host.py`` / ``plugin/logging_config.py`` 保持对偶): - 服务器日志:`` | STRING |
| HIGH | main_routers/live2d_router.py | 740 | Get parameter info of the specified Live2D model (from the .cdi3.json file). args: - model_name: model name | STRING |
| HIGH | main_routers/live2d_router.py | 836 | Load parameters from parameters.json in the model directory. args: - model_name: model name (without path o | STRING |
| HIGH | main_routers/workshop_router/meta.py | 219 | Get the path of a character card's .workshop_meta.json file Args: character_card_name: character c | STRING |
| HIGH | …gent/skills/mcp-builder/reference/python_mcp_server.md | 282 | Search for users in the Example system by name, email, or team. This tool searches across all user profiles in | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | memory/evidence_handlers.py | 375 | # Step 3: remove from the active view (the original handler | COMMENT |
| LOW | memory/evidence_handlers.py | 457 | # Step 3: persona main-view removal. | COMMENT |
| LOW⚡ | tests/test_activity_tracker_followup.py | 177 | # Step 1: User in VS Code (work) for 100s | COMMENT |
| LOW⚡ | tests/test_activity_tracker_followup.py | 185 | # Step 2: User opens N.E.K.O | COMMENT |
| LOW | tests/test_activity_tracker_followup.py | 210 | # Step 1: unknown high-GPU app (an indie game not in keyword DB). | COMMENT |
| LOW | tests/test_activity_tracker_followup.py | 222 | # Step 2: brief glance at N.E.K.O. Prev observation must NOT be | COMMENT |
| LOW⚡ | tests/testbench/routers/session_router.py | 536 | # Step 5: dispose SQLAlchemy caches so the impending rmtree inside | COMMENT |
| LOW⚡ | tests/testbench/routers/session_router.py | 542 | # Step 6: create the new session. The SessionStore internally holds | COMMENT |
| LOW | tests/testbench/routers/session_router.py | 563 | # Step 7: extract tarball into the freshly created sandbox. We | COMMENT |
| LOW | tests/testbench/routers/session_router.py | 574 | # Step 8: wire archive data into the new session object. | COMMENT |
| LOW⚡ | tests/testbench/pipeline/chat_runner.py | 171 | # Step 2: preset-bundled key (free tier). | COMMENT |
| LOW⚡ | tests/testbench/pipeline/chat_runner.py | 177 | # Step 3: tests/api_keys.json fallback. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 888 | # Step 1: 跳过落在 cursor 处的孤儿 assistant turn (= 没有前置 user 就出现 | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 913 | # Step 2: 当前 cursor 指向一条 user turn. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 942 | # Step 3: 转发 stream_send 事件, 并在 'assistant' 出来时回填 reference. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 992 | # Step 4: 根据 stream 成败决定游标走向. | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 178 | # Step 1: always capture a pre_reset_backup first so the user can | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 203 | # Step 2: clear messages + eval_results for every level. | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 255 | # Step 3: re-anchor with a fresh init snapshot so the timeline starts | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 980 | # Step 1: safety net. If the user immediately rewinds again, we | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 999 | # Step 4: replace live fields with deep copies (never alias the | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 1025 | # Step 5: truncate forward entries. Find the target's position | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 54 | # Step 1: 首页加载 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 62 | # Step 2: 开启语音通话 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 71 | # Step 3: 语音 10 轮 — 验证会话保持 + 消息增长 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 88 | # Step 4: 结束语音 -> 文本模式恢复 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 98 | # Step 5: VRM 模型切换 (Hot Reload) | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 124 | # Step 6: 文本对话 + LLM 评估 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 157 | # Step 7: 插入截图后对话 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 190 | # Step 8: 角色弹窗切换 -> UI 完整性 | STRING |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 205 | # Step 9: 语音<->文本切换验证 | STRING |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 233 | # Step 10: 记忆文件检查 | STRING |
| LOW | plugin/plugins/qq_auto_reply/qq_open_plat.py | 771 | # Step 1: 申请上传 | COMMENT |
| LOW | plugin/plugins/qq_auto_reply/qq_open_plat.py | 784 | # Step 2: 上传文件 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 63 | # Step 1: 从 serviceLogin 获取登录链接参数 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 73 | # Step 2: 获取二维码URL和轮询URL | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 78 | # Step 3: 长轮询等待扫码 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 81 | # Step 4: 访问callback获取cookies | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 90 | # Step 5: 构建凭据对象 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 717 | # Step 1: 获取 location 参数(同步版本复用) | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 723 | # Step 2: 获取二维码数据(同步方法包装) | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 233 | # Step 2: import + grab a module-level logger BEFORE service_name is set. | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 240 | # Step 3: host belatedly sets env + boots its logger sink. | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 250 | # Step 4: emit through the loggers grabbed BEFORE step 3. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1378 | # Step 1: classify. PATH_OUTSIDE_ROOTS bubbles up to the caller. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1385 | # Step 2: read plugin_id eagerly (Fix 1). Imported lazily here | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1395 | # Step 3: builtin guard (Fix 12 / Req 5.2). | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1517 | # Step 1: classify. PATH_OUTSIDE_ROOTS bubbles up to the caller. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1524 | # Step 2: read plugin_id eagerly (Fix 1). Imported lazily here | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1532 | # Step 3: builtin guard (Fix 12 / Req 5.2). | COMMENT |
| LOW | plugin/server/application/install_source/manager.py | 1553 | # Step 4: build the market source_detail. ``previous_version`` is | COMMENT |
| LOW | plugin/server/application/install_source/manager.py | 2119 | # Step 3: Req 4.3 placeholder — directory_name stands in | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2777 | # Step 1: probe active lock entry. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2794 | # Step 2: version-ordering guard (skipped for reinstall). | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2829 | # Step 3: lifecycle stop. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2840 | # Step 4: rename old dir → backup. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2870 | # Step 5: download + verify sha256. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2931 | # Step 6: unpack + record_market_upgrade (single atomic call). | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2976 | # Step 7: lifecycle start. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2987 | # Step 8: async cleanup of backup. | COMMENT |
| 41 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | memory/evidence_handlers.py | 375 | # Step 3: remove from the active view (the original handler | COMMENT |
| LOW | memory/evidence_handlers.py | 457 | # Step 3: persona main-view removal. | COMMENT |
| LOW⚡ | tests/test_activity_tracker_followup.py | 177 | # Step 1: User in VS Code (work) for 100s | COMMENT |
| LOW⚡ | tests/test_activity_tracker_followup.py | 185 | # Step 2: User opens N.E.K.O | COMMENT |
| LOW | tests/test_activity_tracker_followup.py | 210 | # Step 1: unknown high-GPU app (an indie game not in keyword DB). | COMMENT |
| LOW | tests/test_activity_tracker_followup.py | 222 | # Step 2: brief glance at N.E.K.O. Prev observation must NOT be | COMMENT |
| LOW⚡ | tests/testbench/routers/session_router.py | 536 | # Step 5: dispose SQLAlchemy caches so the impending rmtree inside | COMMENT |
| LOW⚡ | tests/testbench/routers/session_router.py | 542 | # Step 6: create the new session. The SessionStore internally holds | COMMENT |
| LOW | tests/testbench/routers/session_router.py | 563 | # Step 7: extract tarball into the freshly created sandbox. We | COMMENT |
| LOW | tests/testbench/routers/session_router.py | 574 | # Step 8: wire archive data into the new session object. | COMMENT |
| LOW⚡ | tests/testbench/pipeline/chat_runner.py | 171 | # Step 2: preset-bundled key (free tier). | COMMENT |
| LOW⚡ | tests/testbench/pipeline/chat_runner.py | 177 | # Step 3: tests/api_keys.json fallback. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 888 | # Step 1: 跳过落在 cursor 处的孤儿 assistant turn (= 没有前置 user 就出现 | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 913 | # Step 2: 当前 cursor 指向一条 user turn. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 942 | # Step 3: 转发 stream_send 事件, 并在 'assistant' 出来时回填 reference. | COMMENT |
| LOW | tests/testbench/pipeline/script_runner.py | 992 | # Step 4: 根据 stream 成败决定游标走向. | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 178 | # Step 1: always capture a pre_reset_backup first so the user can | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 203 | # Step 2: clear messages + eval_results for every level. | COMMENT |
| LOW | tests/testbench/pipeline/reset_runner.py | 255 | # Step 3: re-anchor with a fresh init snapshot so the timeline starts | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 980 | # Step 1: safety net. If the user immediately rewinds again, we | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 999 | # Step 4: replace live fields with deep copies (never alias the | COMMENT |
| LOW | tests/testbench/pipeline/snapshot_store.py | 1025 | # Step 5: truncate forward entries. Find the target's position | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 54 | # Step 1: 首页加载 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 62 | # Step 2: 开启语音通话 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 71 | # Step 3: 语音 10 轮 — 验证会话保持 + 消息增长 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 88 | # Step 4: 结束语音 -> 文本模式恢复 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 98 | # Step 5: VRM 模型切换 (Hot Reload) | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 124 | # Step 6: 文本对话 + LLM 评估 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 157 | # Step 7: 插入截图后对话 | COMMENT |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 190 | # Step 8: 角色弹窗切换 -> UI 完整性 | STRING |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 205 | # Step 9: 语音<->文本切换验证 | STRING |
| LOW⚡ | tests/e2e/test_e2e_full_flow.py | 233 | # Step 10: 记忆文件检查 | STRING |
| LOW | plugin/plugins/qq_auto_reply/qq_open_plat.py | 771 | # Step 1: 申请上传 | COMMENT |
| LOW | plugin/plugins/qq_auto_reply/qq_open_plat.py | 784 | # Step 2: 上传文件 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 63 | # Step 1: 从 serviceLogin 获取登录链接参数 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 73 | # Step 2: 获取二维码URL和轮询URL | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 78 | # Step 3: 长轮询等待扫码 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 81 | # Step 4: 访问callback获取cookies | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 90 | # Step 5: 构建凭据对象 | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 717 | # Step 1: 获取 location 参数(同步版本复用) | COMMENT |
| LOW⚡ | …/mijia/mijia_api/infrastructure/credential_provider.py | 723 | # Step 2: 获取二维码数据(同步方法包装) | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 233 | # Step 2: import + grab a module-level logger BEFORE service_name is set. | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 240 | # Step 3: host belatedly sets env + boots its logger sink. | COMMENT |
| LOW⚡ | plugin/tests/unit/test_plugin_logging_landing.py | 250 | # Step 4: emit through the loggers grabbed BEFORE step 3. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1378 | # Step 1: classify. PATH_OUTSIDE_ROOTS bubbles up to the caller. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1385 | # Step 2: read plugin_id eagerly (Fix 1). Imported lazily here | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1395 | # Step 3: builtin guard (Fix 12 / Req 5.2). | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1517 | # Step 1: classify. PATH_OUTSIDE_ROOTS bubbles up to the caller. | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1524 | # Step 2: read plugin_id eagerly (Fix 1). Imported lazily here | COMMENT |
| LOW⚡ | plugin/server/application/install_source/manager.py | 1532 | # Step 3: builtin guard (Fix 12 / Req 5.2). | COMMENT |
| LOW | plugin/server/application/install_source/manager.py | 1553 | # Step 4: build the market source_detail. ``previous_version`` is | COMMENT |
| LOW | plugin/server/application/install_source/manager.py | 2119 | # Step 3: Req 4.3 placeholder — directory_name stands in | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2777 | # Step 1: probe active lock entry. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2794 | # Step 2: version-ordering guard (skipped for reinstall). | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2829 | # Step 3: lifecycle stop. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2840 | # Step 4: rename old dir → backup. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2870 | # Step 5: download + verify sha256. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2931 | # Step 6: unpack + record_market_upgrade (single atomic call). | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2976 | # Step 7: lifecycle start. | COMMENT |
| LOW | plugin/server/routes/market_bridge.py | 2987 | # Step 8: async cleanup of backup. | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/agent_server/api_routes.py | 1355 | # event-driven (no HTTP polling), so without these emits the cards of | COMMENT |
| MEDIUM | memory/facts.py | 4454 | # observation 砍掉后,valid_ids 还来自全集,LLM 可能 hallucinate | COMMENT |
| MEDIUM | memory/facts.py | 4528 | # 否则 LLM hallucinate 一个不在本次 prompt 里的 fact id 仍会被作为合法 | COMMENT |
| MEDIUM | memory/facts.py | 4571 | # ttype 来自 LLM JSON,理论上是 str/None;hallucinate 成 | COMMENT |
| MEDIUM | memory/event_log.py | 731 | # ── Reconciler scaffolding (RFC §3.5) ───────────────────────────────────── | COMMENT |
| MEDIUM | memory/hybrid_recall.py | 929 | # can proceed while embedding model warms (if first call). | COMMENT |
| MEDIUM | memory/persona/corrections.py | 543 | # 没在这一批 prompt 里的合法全局 index(比如 hallucinate 出未来批 | COMMENT |
| MEDIUM | config/prompts/prompts_activity.py | 1368 | # likely to be natural reply openers than safe-to-drop scaffolding. Known | COMMENT |
| MEDIUM | tests/unit/test_fact_dedup.py | 1158 | # LLM hallucinates two decisions for the same (c1,e1) pair: a | COMMENT |
| MEDIUM | tests/unit/test_evidence_extraction.py | 132 | # ── S7: Stage-2 target_id validation rejects hallucinations ───────── | COMMENT |
| MEDIUM | tests/unit/test_evidence_archive.py | 1511 | # event-driven evidence values DID land on disk. The second save | COMMENT |
| MEDIUM⚡ | tests/unit/test_event_log.py | 798 | # ── Reconciler scaffolding ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/test_game_router_concurrency.py | 1605 | # builder (peer-waiter orchestration). The RuntimeError | COMMENT |
| MEDIUM | tests/unit/test_game_router_concurrency.py | 1636 | # to actually be exercised; if the test scaffold never produced | COMMENT |
| MEDIUM | tests/testbench/docs/P32_BLUEPRINT.md | 221 | > 方法: 对照 3 锚点逐条思想实验 —— (1) 冻结横切原则 + LESSONS §7; (2) 实证的主程序/testbench 真实代码; (3) 用户原始意图. 产出矫正 SR#/RV#/LR# 已回写正文; 末轮 L31 语义 | CODE |
| MEDIUM | tests/testbench/docs/P32_BLUEPRINT.md | 253 | ### RAG 覆盖表 (§1.4 停机判据) | COMMENT |
| MEDIUM | tests/testbench/docs/AGENT_NOTES.md | 1263 | **2026-04-22 P24 Day 8 第二轮验收 hotfix #107 Part 3+4**: 用户 Part 2 修复后继续报 4 项, 均已落地: (1) **Session Load modal 残留"导入 JSON"按钮* | CODE |
| MEDIUM | tests/testbench/docs/LESSONS_LEARNED.md | 117 | ### 1.4 覆盖度 RAG 灯作为阶段方案自检工具 | COMMENT |
| MEDIUM | tests/testbench/docs/LESSONS_LEARNED.md | 520 | ### 6.2 每阶段完工前 RAG 灯自检 | COMMENT |
| MEDIUM | tests/testbench/docs/UPSTREAM_SYNC_2026-06.md | 495 | #### 3. RAG 覆盖度总表 (绿=已覆盖 / 黄=部分 / 红=零覆盖; 红项分 M必做 / O可选 / B待办) | COMMENT |
| MEDIUM | plugin/plugins/game_agent_minecraft/service.py | 48 | # LLM — we don't want VT100 noise in the model's context window. | COMMENT |
| MEDIUM⚡ | plugin/tests/unit/plugins/test_character_profile.py | 84 | # Preset JSON sanity (kept from scaffold) | COMMENT |
| MEDIUM | scripts/custom_channels/neko_channel.py | 237 | # Root config is only a fallback in multi-agent mode, so keep it disabled | COMMENT |
| MEDIUM | .github/workflows/build-desktop-linux.yml | 180 | # --- Prepare local embedding model assets --- | COMMENT |
| MEDIUM | .github/workflows/build-desktop.yml | 284 | # --- Prepare local embedding model assets (cross-platform) --- | COMMENT |
| MEDIUM⚡ | .github/workflows/docker-multi-arch.yml | 49 | # the "Prepare embedding model" steps below and Dockerfile step 6b. | COMMENT |
| MEDIUM | main_routers/game_router/runtime.py | 1944 | # unit-test scaffolding): key on text alone and gate by the time | COMMENT |
| MEDIUM | main_logic/proactive_chat/break_reminders.py | 283 | # Model configuration is an explicit orchestration dependency. Returns None | COMMENT |
| MEDIUM | main_logic/core/streaming.py | 481 | # read a hidden scaffold prompt (e.g. avatar-drop file | COMMENT |
| MEDIUM | main_logic/omni_offline_client/_streaming.py | 825 | # stream their chain-of-thought into ``content`` ending in | COMMENT |
| MEDIUM | brain/computer_use.py | 163 | # The model is NOT fine-tuned for this format, so we provide full scaffolding: | COMMENT |
| MEDIUM | brain/task_executor.py | 841 | # recent-context window). Group with `agent_server.py` callback summary — | COMMENT |
| MEDIUM | brain/task_executor.py | 849 | # Total budget across the assembled recent-context window — fits ~2-3 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | memory/embeddings.py | 960 | CODE | |
| LOW | tests/unit/test_focus_mode.py | 42 | CODE | |
| LOW | tests/unit/test_memory_recall.py | 68 | CODE | |
| LOW | tests/testbench/routers/judge_router.py | 1355 | CODE | |
| LOW | tests/testbench/routers/judge_router.py | 1424 | CODE | |
| LOW | tests/testbench/routers/diagnostics_router.py | 94 | CODE | |
| LOW | tests/testbench/pipeline/external_events.py | 1185 | CODE | |
| LOW | tests/testbench/pipeline/scoring_schema.py | 938 | CODE | |
| LOW | tests/testbench/pipeline/diagnostics_store.py | 192 | CODE | |
| LOW | tests/testbench/pipeline/diagnostics_store.py | 262 | CODE | |
| LOW | plugin/core/context.py | 516 | CODE | |
| LOW | plugin/core/context.py | 572 | CODE | |
| LOW | plugin/core/context.py | 598 | CODE | |
| LOW | plugin/core/context.py | 675 | CODE | |
| LOW | plugin/core/context.py | 715 | CODE | |
| LOW | plugin/core/context.py | 744 | CODE | |
| LOW | plugin/core/context.py | 769 | CODE | |
| LOW | plugin/core/context.py | 856 | CODE | |
| LOW | plugin/core/bus/messages.py | 116 | CODE | |
| LOW | plugin/core/bus/messages.py | 234 | CODE | |
| LOW | plugin/core/bus/messages.py | 267 | CODE | |
| LOW | …lugins/neko_live/modules/developer_sandbox/__init__.py | 23 | CODE | |
| LOW | …gins/neko_live/modules/live_events/recent_chat_tool.py | 118 | CODE | |
| LOW | …n/plugins/qq_auto_reply/session_instruction_service.py | 310 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/message_dispatcher.py | 762 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/message_dispatcher.py | 831 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/qq_client.py | 1590 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/reply_context_node.py | 216 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/prompting.py | 261 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/prompting.py | 305 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/prompting.py | 346 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/memory_bridge.py | 303 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/__init__.py | 1052 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/dashboard_service.py | 177 | CODE | |
| LOW | plugin/plugins/qq_auto_reply/reply_buffer_service.py | 342 | CODE | |
| LOW | …ugin/plugins/qq_auto_reply/reply_generation_service.py | 1116 | CODE | |
| LOW | plugin/plugins/game_agent_minecraft/client.py | 57 | CODE | |
| LOW | plugin/plugins/music_pusher/__init__.py | 1938 | CODE | |
| LOW | …s/neko_warthunder/data_layer/data process/wt_server.py | 145 | CODE | |
| LOW | plugin/plugins/galgame_plugin/ocr_manager_runtime.py | 335 | CODE | |
| LOW | plugin/plugins/galgame_plugin/agent_actuation.py | 122 | CODE | |
| LOW | plugin/plugins/galgame_plugin/agent_actuation.py | 357 | CODE | |
| LOW | plugin/plugins/galgame_plugin/ocr_manager_text.py | 938 | CODE | |
| LOW | plugin/plugins/galgame_plugin/ocr_runtime_types.py | 1593 | CODE | |
| LOW | plugin/plugins/galgame_plugin/models/config.py | 384 | CODE | |
| LOW | …galgame_plugin/plugin_entries/galgame_agent_command.py | 39 | CODE | |
| LOW | …ugin/plugin_entries/galgame_set_ocr_capture_profile.py | 32 | CODE | |
| LOW | plugin/plugins/bilibili_danmaku/danmaku_storage.py | 175 | CODE | |
| LOW | plugin/plugins/bilibili_danmaku/danmaku_storage.py | 199 | CODE | |
| LOW | plugin/plugins/bilibili_danmaku/danmaku_storage.py | 229 | CODE | |
| LOW | plugin/plugins/bilibili_danmaku/background_llm_agent.py | 104 | CODE | |
| LOW | plugin/plugins/bilibili_dm/__init__.py | 377 | CODE | |
| LOW | plugin/plugins/sts2_autoplay/instructions.py | 8 | CODE | |
| LOW | plugin/plugins/study_companion/store.py | 617 | CODE | |
| LOW | plugin/plugins/study_companion/store_notebook.py | 265 | CODE | |
| LOW | plugin/plugins/study_companion/store_notebook.py | 343 | CODE | |
| LOW | plugin/plugins/study_companion/tesseract_support.py | 326 | CODE | |
| LOW | plugin/plugins/study_companion/doc_exporter.py | 92 | CODE | |
| LOW | …n/plugins/study_companion/entry_memory_card_entries.py | 39 | CODE | |
| LOW | plugin/plugins/study_companion/entry_notebook.py | 178 | CODE | |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_audio_stream_queue.py | 1130 | # below would measure the harness instead of the product. | COMMENT |
| MEDIUM | tests/unit/test_text_chat.py | 219 | # Full conversation log for holistic evaluation | COMMENT |
| MEDIUM | tests/unit/test_text_chat.py | 255 | # The holistic evaluation at the end is the definitive pass/fail gate | COMMENT |
| MEDIUM | tests/unit/test_text_chat.py | 298 | # Final assertion — we require the holistic evaluation to pass | COMMENT |
| MEDIUM⚡ | tests/unit/test_app_websocket_static.py | 1258 | # whole harness on the command line, which Windows refuses past 32767 | STRING |
| MEDIUM | tests/unit/test_app_websocket_static.py | 3358 | # Structural half of the #2540 pin. The behavioural harness above can only | STRING |
| MEDIUM⚡ | tests/unit/test_daily_external_import.py | 504 | # 父 harness 已走真实 _arecord_unpersisted_day_fp(best-effort 包裹);这里 | COMMENT |
| MEDIUM | tests/unit/test_tool_calling.py | 62 | # summary budget)。真实 client 恒有 self.llm;harness 里若测试自己设了 fake llm | COMMENT |
| MEDIUM | tests/unit/test_evidence_extraction.py | 113 | # daily 导入的 harness 复刻了这段分支逻辑,只能钉住调用点传 flag 那一半; | COMMENT |
| MEDIUM | tests/unit/test_node_harness_contract.py | 60 | # harness 留了一条绕过这条契约、退回 node -e 的合法路径(Codex P2)。 | COMMENT |
| MEDIUM | tests/unit/test_realtime_arbiter_fail_open.py | 2458 | # is still in flight, which is what the stalling harness arranges. | COMMENT |
| MEDIUM | tests/unit/test_realtime_arbiter_fail_open.py | 2655 | # harness artifact. The caller bounds this with wait_for. | COMMENT |
| MEDIUM⚡ | tests/unit/test_asr_preview_keying.py | 76 | # whole harness on the command line, which Windows refuses past 32767 | COMMENT |
| MEDIUM | tests/unit/test_group_memory_recall_tool.py | 2079 | # 无 backlog_store(轻量 harness):形状退化回 [群, 当前发言人]。 | COMMENT |
| MEDIUM | tests/unit/test_evidence_token_cache.py | 44 | # ── helpers (minimal harness, keeps tests focused) ────────────────── | COMMENT |
| MEDIUM | tests/unit/test_mic_start_race.py | 1156 | # run_node_script writes to a temp file rather than passing the harness on | STRING |
| MEDIUM⚡ | tests/unit/test_speaker_trust.py | 2504 | # A harness without the event at all reads as NOT ready. | COMMENT |
| MEDIUM | tests/unit/test_game_router_concurrency.py | 256 | # sync — robust against future reordering of ``state["archive"]`` | COMMENT |
| MEDIUM | tests/unit/test_external_import_concurrency.py | 26 | # ── routes 层 harness ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/frontend/test_subtitle_incremental.py | 9711 | # near. Use generous bounds to stay robust against headless timer jitter. | COMMENT |
| MEDIUM | tests/testbench/pipeline/recall_fusion.py | 119 | # ── BM25-only fusion harness (cosine OOS) ────────────────────────────── | COMMENT |
| LOW | tests/testbench/pipeline/scoring_schema.py | 1093 | # we just return whatever we did manage to parse. | COMMENT |
| MEDIUM | tests/testbench/pipeline/reset_runner.py | 129 | # robust path to survive Windows file locks on SQLite | COMMENT |
| MEDIUM | .github/workflows/unit-tests.yml | 38 | # broke the cat-mind harness lives, so the guard against it stays honest. | COMMENT |
| MEDIUM | .github/workflows/unit-tests.yml | 58 | # comes preinstalled on the runner image; the frontend harness suites | COMMENT |
| MEDIUM | main_logic/activity/llm_enrichment.py | 538 | # Fallback to project-local robust parser (handles trailing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugin/PLUGIN_DEVELOPMENT_GUIDE.md | 0 | create table if not exists records ( id integer primary key autoincrement, key text unique, value text, created_at times | STRING |
| HIGH | docs/plugins/advanced.md | 0 | create table if not exists records ( id integer primary key autoincrement, key text unique, value text, created_at times | STRING |
| HIGH | docs/ja/plugins/advanced.md | 0 | create table if not exists records ( id integer primary key autoincrement, key text unique, value text, created_at times | STRING |
| HIGH | docs/zh-CN/plugins/advanced.md | 0 | create table if not exists records ( id integer primary key autoincrement, key text unique, value text, created_at times | STRING |
| HIGH | plugin/plugins/study_companion/store.py | 0 | select * from qa_records where session_id = ? order by id desc limit ? | STRING |
| HIGH | plugin/plugins/study_companion/store_qa.py | 0 | select * from qa_records where session_id = ? order by id desc limit ? | STRING |
| HIGH | plugin/plugins/study_companion/store_notebook.py | 0 | select * from qa_records where session_id = ? order by id desc limit ? | STRING |
| HIGH | plugin/plugins/study_companion/store.py | 0 | insert into {self._table_name} (key, value, created_at, updated_at) values (?, ?, ?, ?) on conflict(key) do update set v | STRING |
| HIGH | plugin/sdk/shared/storage/store.py | 0 | insert into {self._table_name} (key, value, created_at, updated_at) values (?, ?, ?, ?) on conflict(key) do update set v | STRING |
| HIGH | plugin/sdk/shared/storage/database.py | 0 | insert into {self._table_name} (key, value, created_at, updated_at) values (?, ?, ?, ?) on conflict(key) do update set v | STRING |
| HIGH | docs/plugins/plugin-base.md | 0 | create table if not exists notes ( id integer primary key autoincrement, title text not null, content text, created_at t | STRING |
| HIGH | docs/ja/plugins/plugin-base.md | 0 | create table if not exists notes ( id integer primary key autoincrement, title text not null, content text, created_at t | STRING |
| HIGH | docs/zh-CN/plugins/plugin-base.md | 0 | create table if not exists notes ( id integer primary key autoincrement, title text not null, content text, created_at t | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …n-manager/src/components/common/WorkbenchFilterBar.vue | 76 | :placeholder="placeholder" | CODE |
| LOW | config/surveys/0.8.3.json | 34 | "placeholder": "比如最近哪里让你想关掉、或者最希望优化的功能,或者只是想对开发猫猫说句话……(选填)", | CODE |
| LOW | config/surveys/README.md | 79 | "placeholder": "选填", // 未联动 / 来源题未选时的提示 | CODE |
| LOW | config/surveys/ja/0.8.3.json | 34 | "placeholder": "たとえば最近そっと閉じたくなった瞬間、いちばん改善してほしい機能、あるいは開発ねこへの一言でも……(任意)", | CODE |
| LOW | config/surveys/ru/0.8.3.json | 34 | "placeholder": "например, что в последнее время хотелось закрыть, какую функцию хотелось бы улучшить, или просто п | CODE |
| LOW | config/surveys/pt/0.8.3.json | 34 | "placeholder": "ex.: o que te deu vontade de fechar ultimamente, a função que mais gostaria de ver melhorada, ou s | CODE |
| LOW | config/surveys/zh-TW/0.8.3.json | 34 | "placeholder": "比如最近哪裡讓你想關掉、或者最希望優化的功能,或者只是想對開發貓貓說句話……(選填)", | CODE |
| LOW | config/surveys/ko/0.8.3.json | 34 | "placeholder": "예를 들면 요즘 끄고 싶었던 순간, 가장 개선됐으면 하는 기능, 아니면 그냥 개발냥이에게 한마디라도……(선택)", | CODE |
| LOW | config/surveys/es/0.8.3.json | 34 | "placeholder": "p. ej., qué te ha dado ganas de cerrarlo últimamente, la función que más te gustaría mejorar, o si | CODE |
| LOW | config/surveys/en/0.8.3.json | 34 | "placeholder": "e.g. what's made you want to close it lately, a feature you'd most like improved, or just somethin | CODE |
| LOW | tests/unit/test_galgame_dependency_slimming.py | 426 | image_path.write_bytes(b"placeholder") | CODE |
| LOW | tests/unit/test_galgame_dependency_slimming.py | 527 | image_path.write_bytes(b"placeholder") | CODE |
| LOW | tests/unit/test_icebreaker_router.py | 94 | "api_key": "fake-key", | CODE |
| LOW | tests/unit/test_community_oauth.py | 149 | {"user": {"display_name": "User", "email": "user@example.com"}}, | CODE |
| LOW | tests/unit/test_document_parser.py | 639 | _docx_bytes("placeholder", {"word/document.xml": document_xml}), | CODE |
| LOW | tests/unit/test_document_parser.py | 664 | _docx_bytes("placeholder", {"word/document.xml": document_xml}), | CODE |
| LOW | tests/unit/test_topic_llm_enrichment.py | 325 | "api_key": "fake-key", | STRING |
| LOW | tests/unit/test_proactive_unanswered_repeat.py | 397 | "api_key": "fake-key", | CODE |
| LOW | tests/unit/test_proactive_unanswered_repeat.py | 532 | "api_key": "fake-key", | CODE |
| LOW | tests/unit/test_card_drop_session_facts.py | 2257 | json={"email": "user@example.com", "password": "password123"}, | CODE |
| LOW | tests/unit/test_proactive_phase2_generation.py | 234 | conversation_api_key="fake-key", | CODE |
| LOW | tests/frontend/test_subtitle_incremental.py | 5673 | assert result["placeholder"] == "[markdown]" | CODE |
| LOW | tests/testbench/static/ui/workspace_placeholder.js | 19 | box.className = 'placeholder'; | CODE |
| LOW | plugin/plugins/qq_auto_reply/static/i18n.js | 128 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/app_launcher/static/index.html | 1120 | el.setAttribute('placeholder', t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/wechat_integration/static/i18n.js | 122 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/claude_companion/static/index.html | 611 | <span class="path">C:\Users\<span class="placeholder">你的用户名</span>\.claude</span> | CODE |
| LOW | plugin/plugins/claude_companion/static/index.html | 796 | if (key.indexOf('.placeholder') >= 0 || el.getAttribute('placeholder')) { | CODE |
| LOW | plugin/plugins/mijia/static/i18n.js | 151 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/galgame_plugin/static/i18n.js | 142 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/bilibili_danmaku/static/i18n.js | 143 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/plugins/study_companion/static/i18n.js | 143 | el.setAttribute('placeholder', this.t(key, el.getAttribute('placeholder') || '')); | CODE |
| LOW | plugin/tests/unit/plugins/test_study_companion.py | 5640 | assertLocalizedAttribute('[data-i18n-placeholder]', 'placeholder', locale, bundle); | CODE |
| LOW | utils/meme_fetcher.py | 375 | 'icon', 'banner', 'ad_', 'loading', 'placeholder', 'qrcode' | CODE |
| LOW | static/locales/ja.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/ru.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/zh-CN.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/pt.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/en.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/ko.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/zh-TW.json | 4575 | "placeholder": { | CODE |
| LOW | static/locales/es.json | 4575 | "placeholder": { | CODE |
| LOW | static/js/voice_clone.js | 813 | current.classList.toggle('placeholder', !selectedOption || !isVoiceCloneDropdownOptionVisible(selectedOption)); | CODE |
| LOW | static/js/api_key_settings.js | 820 | current.classList.toggle('placeholder', !selectedOption); | CODE |
| LOW | static/game/games/soccer/soccer-demo.js | 816 | const current = String(el.getAttribute('placeholder') || '').trim(); | CODE |
| LOW | static/game/games/soccer/soccer-demo.js | 817 | if (!current || current === key) el.setAttribute('placeholder', fallback); | CODE |
| LOW | static/libs/purify.js | 205 | const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'au | CODE |
| LOW | static/libs/purify.js | 507 | const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placehol | CODE |
| LOW⚡ | main_logic/proactive_chat/service.py | 1645 | has_music_task = bool(music_content and music_content.get("placeholder")) | CODE |
| LOW⚡ | main_logic/proactive_chat/service.py | 1646 | has_meme_task = bool(meme_content and meme_content.get("placeholder")) | CODE |
| LOW⚡ | main_logic/proactive_chat/sources.py | 398 | "placeholder": True, | CODE |
| LOW⚡ | main_logic/proactive_chat/sources.py | 404 | "placeholder": True, | CODE |
| LOW | …ills/webapp-testing/examples/static_html_automation.py | 21 | page.fill('#name', 'John Doe') | CODE |
| LOW | …gent/skills/mcp-builder/reference/python_mcp_server.md | 306 | "name": str, # Full name (e.g., "John Doe") | STRING |
| LOW | …gent/skills/mcp-builder/reference/python_mcp_server.md | 572 | return {"id": user_id, "name": "John Doe", "email": "john@example.com"} | CODE |
| LOW | .agent/skills/mcp-builder/reference/node_mcp_server.md | 173 | "name": string, // Full name (e.g., "John Doe") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit/test_cfa_resilience.py | 471 | # Create a workshop directory with a model | COMMENT |
| MEDIUM | tests/frontend/test_memory_browser.py | 184 | # Create a minimal recent memory file for a test catgirl | COMMENT |
| MEDIUM | tests/testbench/smoke/p24_integration_smoke.py | 151 | # Create the active session first so we can test the 409 branch. | COMMENT |
| MEDIUM | tests/testbench/smoke/p21_persistence_smoke.py | 59 | # Create a session and inject data. | COMMENT |
| MEDIUM | brain/cua/__init__.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/core/mllm.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/core/__init__.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/core/engine.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/core/module.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/memory/procedural_memory.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/memory/__init__.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/agents/worker.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/agents/__init__.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/agents/agent_s.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/agents/grounding.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/utils/__init__.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| MEDIUM | brain/cua/utils/common_utils.py | 3 | # This file is derived from simular-ai/Agent-S | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docker/README_Docker.md | 64 | "coreApiKey": "your-api-key-here", | CODE |
| HIGH | docker/README_Docker.md | 171 | -e NEKO_CORE_API_KEY="your-api-key" \ | CODE |
| HIGH | tests/testbench/api_keys_registry.py | 120 | if stripped.lower() in {"sk-...", "your-api-key"}: | CODE |
| HIGH | .agent/skills/mcp-builder/reference/evaluation.md | 557 | export ANTHROPIC_API_KEY=your_api_key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_providers.py | 41 | # Check if provider exists in configuration | COMMENT |
| LOW | tests/unit/test_voice_session.py | 201 | # Check if instructions were sent | COMMENT |
| LOW⚡ | plugin/core/bus/types.py | 605 | # Check if we have any regex filters | COMMENT |
| LOW | plugin/neko_plugin_cli/commands/init_cmd.py | 279 | # Check if directory already exists | COMMENT |
| LOW | utils/audio_processor.py | 350 | # Check if we need to reset (after long silence or on request) | COMMENT |
| LOW | main_routers/vrm_router.py | 663 | # Check if model_name is invalid (returns None from _get_emotion_config_path) | COMMENT |
| LOW | main_routers/system_router/files.py | 66 | # Check if the file exists | COMMENT |
| LOW | main_logic/omni_offline_client/_streaming.py | 555 | # Check if we need to switch to vision model. A staged proactive-vision | COMMENT |
| LOW | brain/cua/core/mllm.py | 190 | # Check if image_content is a list or a single image | COMMENT |
| LOW | brain/cua/core/mllm.py | 241 | # Check if image_content is a list or a single image | COMMENT |
| LOW | brain/cua/core/mllm.py | 288 | # Check if image_content is a list or a single image | COMMENT |
| LOW | .agent/skills/skill-creator/scripts/init_skill.py | 208 | # Check if directory already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_cloudsave_startup_flow.py | 626 | CODE | |
| MEDIUM | tests/unit/test_memory_zh_tw.py | 2068 | CODE | |
| MEDIUM | tests/unit/test_tool_calling.py | 1937 | CODE | |
| MEDIUM | tests/unit/test_tool_calling.py | 2068 | CODE | |
| MEDIUM | tests/unit/test_focus_mode.py | 567 | CODE | |
| MEDIUM | tests/unit/test_proactive_vision_screenshot_staging.py | 149 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/test_workshop_content_gate.py | 2980 | ' def helper(ignored=_claiming_worker()):\n' | CODE |
| LOW⚡ | tests/unit/test_workshop_content_gate.py | 2985 | ' def helper():\n' | CODE |
| LOW⚡ | tests/unit/test_workshop_content_gate.py | 2989 | ' def helper(arg: _claiming_worker()) -> _claiming_worker():\n' | CODE |
| LOW | tests/unit/test_workshop_content_gate.py | 2828 | ' async def helper():\n' | CODE |
| LOW | tests/unit/test_workshop_content_gate.py | 7631 | ' def helper():\n' | CODE |
| LOW | tests/unit/test_openai_compatible_tts.py | 1451 | async def handle_request(request): | CODE |
| LOW | tests/unit/test_openai_compatible_tts.py | 1488 | async def handle_request(request): | CODE |
| LOW | plugin/tests/unit/plugins/test_mcp_adapter_runtime.py | 297 | async def handle_request(self, incoming): | CODE |
| LOW⚡ | plugin/sdk/adapter/gateway_core.py | 63 | async def handle_request(self, incoming: ExternalRequest) -> Result[GatewayResponse, GatewayErrorLike]: | CODE |
| LOW⚡ | plugin/neko_plugin_cli/templates/generator.py | 481 | async def handle_request(self, raw_data: dict = None, **_): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/run_testbench.sh | 4 | # Usage: | COMMENT |