Repository Analysis

simonlin1212/Vibe-Research

Vibe-Research: Your Personal Trading Research Agent · A股/美股/港股 的个人投研 Agent:每日复盘、资讯雷达、个股数据、板块中心、我的持仓、研究记录。Vibe-Research 把数据和功能配齐,由你自己的 AI 驱动投资研究。

13.1 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of simonlin1212/Vibe-Research, a TypeScript project with 1,923 GitHub stars. SynthScan v2.0 examined 23,510 lines of code across 83 source files, recording 229 pattern matches distributed across 7 syntactic categories. The overall adjusted score of 13.1 places this repository in the Low 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).

13.1
Adjusted Score
13.1
Raw Score
100%
Time Factor
2026-08-09
Last Push
1.9K
Stars
TypeScript
Language
23.5K
Lines of Code
83
Files
229
Pattern Hits
2026-08-09
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 0MEDIUM 35LOW 194

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 229 distinct pattern matches across 7 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.

Decorative Section Separators29 hits · 96 pts
SeverityFileLineSnippetContext
MEDIUMa-stock-data/SKILL.md529# ── 东财防封:全局节流 + 会话复用 ────────────────────────────────────COMMENT
MEDIUMbackend/chat.py192# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/chat.py194# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py493# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py497# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py39# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py41# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py112# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py114# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py184# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py186# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py251# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py253# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py279# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py281# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/astock.py415# ===========================================================================COMMENT
MEDIUMbackend/astock.py424# ===========================================================================COMMENT
MEDIUMbackend/app.py552# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/app.py555# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/test_fixes.py18# ── VR_API_KEY 鉴权中间件 ───────────────────────────────────────────COMMENT
MEDIUMbackend/tests/test_fixes.py29# ── 持仓:本地 JSON CRUD(不联网,行情打桩) ────────────────────────COMMENT
MEDIUMbackend/tests/test_fixes.py120# ── full_valuation:一致预期缺「均值」/ '-' 占位不再 502 ─────────────COMMENT
MEDIUMbackend/tests/test_fixes.py149# ── 短线情绪:涨停池脏数值('-' 占位)不再让排序崩溃 ────────────────COMMENT
MEDIUMbackend/tests/test_fixes.py170# ── 缓存:数据源故障的空结果不缓存 5 分钟 ───────────────────────────COMMENT
MEDIUMbackend/tests/test_fixes.py187# ── akshare 未安装:market 降级返回空,不挡服务 ─────────────────────COMMENT
MEDIUMbackend/tests/test_fixes.py198# ── 流式工具调用:非标网关不带 index 时按 id 归位、不串参数 ──────────COMMENT
MEDIUMbackend/tests/test_fixes.py230# ── CLI 流式:子进程挂起时超时真正生效(不再无限期阻塞) ────────────COMMENT
MEDIUMbackend/tests/test_gstock_search.py77# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/test_gstock_search.py79# ---------------------------------------------------------------------------COMMENT
Excessive Try-Catch Wrapping95 hits · 95 pts
SeverityFileLineSnippetContext
LOWa-stock-data/SKILL.md327 except Exception:CODE
LOWa-stock-data/SKILL.md341 except Exception:CODE
LOWa-stock-data/SKILL.md360 except Exception:CODE
LOWa-stock-data/SKILL.md367 except Exception:CODE
LOWa-stock-data/SKILL.md546except Exception:CODE
LOWa-stock-data/SKILL.md1277 except Exception as e:CODE
LOWa-stock-data/SKILL.md1337 except Exception as e:CODE
LOWa-stock-data/SKILL.md1945 except Exception as e:CODE
LOWa-stock-data/SKILL.md2287 except Exception as e:CODE
LOWa-stock-data/SKILL.md2385 except Exception as e:CODE
LOWa-stock-data/SKILL.md2468 except Exception as e:CODE
LOWa-stock-data/SKILL.md2695 except Exception: return xCODE
LOWa-stock-data/SKILL.md2713 except Exception as e:CODE
LOWa-stock-data/SKILL.md2791 except Exception as e:CODE
LOWa-stock-data/SKILL.md2824 except Exception as e:CODE
LOWa-stock-data/SKILL.md2854 except Exception as e:CODE
LOWa-stock-data/SKILL.md2874 except Exception as e:CODE
LOWa-stock-data/SKILL.md3039 except Exception as e:CODE
LOWglobal-stock-data/SKILL.md1384except Exception: # Windows 上 zoneinfo 可能缺 tzdataCODE
LOWbackend/gstock.py48 except Exception:CODE
LOWbackend/gstock.py130 except Exception as e: # noqa: BLE001 — 网络/HTTP/JSON 解析都可能CODE
LOWbackend/market.py46 except Exception:CODE
LOWbackend/market.py77 except Exception:CODE
MEDIUMbackend/market.py33def _num(v) -> int:CODE
LOWbackend/reflection.py68 except Exception as e: # noqa: BLE001 — 运行时错误以流内事件上报CODE
LOWbackend/tools.py163 except Exception: # noqa: BLE001 — 网络问题转备用源CODE
LOWbackend/tools.py168 except Exception: # noqa: BLE001CODE
LOWbackend/tools.py230 except Exception: # noqa: BLE001CODE
LOWbackend/tools.py253 except Exception: # noqa: BLE001 — 热门概念是加分项,挂了不该拖垮板块归属CODE
LOWbackend/tools.py270 except Exception: # noqa: BLE001 — 上游接口不稳,转降级源CODE
LOWbackend/tools.py279 except Exception: # noqa: BLE001 — 行业是加分项,拿不到不影响主体CODE
LOWbackend/tools.py394 except Exception as e: # noqa: BLE001 — 工具错误回喂给模型,不中断循环CODE
LOWbackend/newsradar.py44 except Exception:CODE
LOWbackend/newsradar.py47 except Exception:CODE
LOWbackend/newsradar.py97 except Exception:CODE
LOWbackend/debate.py129 except Exception as e: # noqa: BLE001 — 单项失败只记缺口CODE
LOWbackend/debate.py138 except Exception as e: # noqa: BLE001CODE
LOWbackend/debate.py293 except Exception as e: # noqa: BLE001 — 单个角色失败不该毁掉整场辩论CODE
MEDIUMbackend/astock.py188def _akshare():CODE
LOWbackend/astock.py485 except Exception:CODE
LOWbackend/astock.py356 except Exception:CODE
LOWbackend/astock.py461 except Exception:CODE
LOWbackend/astock.py513 except Exception:CODE
LOWbackend/astock.py541 except Exception:CODE
LOWbackend/astock.py561 except Exception:CODE
LOWbackend/astock.py640 except Exception:CODE
LOWbackend/astock.py743 except Exception:CODE
LOWbackend/astock.py763 except Exception:CODE
LOWbackend/astock.py783 except Exception:CODE
LOWbackend/astock.py805 except Exception:CODE
MEDIUMbackend/app.py119def gen():CODE
MEDIUMbackend/app.py148def gen():CODE
LOWbackend/app.py297 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py306 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py315 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py324 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py337 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py346 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py355 except Exception as e: # noqa: BLE001CODE
LOWbackend/app.py548 except Exception as e: # noqa: BLE001CODE
35 more matches not shown…
Hyper-Verbose Identifiers69 hits · 82 pts
SeverityFileLineSnippetContext
LOWa-stock-data/SKILL.md893def eastmoney_industry_reports(industry_code: str = "*", max_pages: int = 5,CODE
LOWa-stock-data/SKILL.md1214def _save_northbound_snapshot(date: str, hgt: float, sgt: float):CODE
LOWa-stock-data/SKILL.md1315def eastmoney_fund_flow_minute(code: str) -> list[dict]:CODE
LOWglobal-stock-data/SKILL.md993def financial_statements_eastmoney(secucode: str, statement: str = "balance",CODE
LOWglobal-stock-data/SKILL.md1229def financial_statements_yahoo(symbol: str,CODE
LOWbackend/astock.py153def eastmoney_industry_reports(keywords: list[str] | None = None, days: int = 90, max_pages: int = 3) -> list[dict]:CODE
LOWbackend/tests/test_version_source.py8def test_reads_version_from_package_json():CODE
LOWbackend/tests/test_version_source.py12def test_missing_file_returns_unknown_not_a_stale_version(monkeypatch):CODE
LOWbackend/tests/test_version_source.py18def test_warning_never_goes_to_stdout(monkeypatch):CODE
LOWbackend/tests/test_version_source.py32def test_mcp_server_reports_the_same_version():CODE
LOWbackend/tests/test_version_source.py37def test_turnover_projection_keeps_every_documented_field():CODE
LOWbackend/tests/test_pure.py53def test_parse_gtimg_bad_line_ignored():CODE
LOWbackend/tests/test_mcp_stdio_encoding.py21def test_gbk_stdout_would_crash_without_the_fix(monkeypatch):CODE
LOWbackend/tests/test_live.py20def test_full_valuation_shape():CODE
LOWbackend/tests/test_live.py27def test_reports_and_announcements():CODE
LOWbackend/tests/test_live.py36def test_financials_and_percentile():CODE
LOWbackend/tests/test_live.py57def test_concept_blocks_and_industry():CODE
LOWbackend/tests/test_live.py65def test_short_term_emotion_shape():CODE
LOWbackend/tests/test_live.py94def test_global_indices_and_stock():CODE
LOWbackend/tests/test_fixes.py39def test_portfolio_crud_roundtrip(tmp_pf):CODE
LOWbackend/tests/test_fixes.py63def test_portfolio_add_validation(tmp_pf):CODE
LOWbackend/tests/test_fixes.py68def test_portfolio_corrupt_file_returns_empty(tmp_pf):CODE
LOWbackend/tests/test_fixes.py86def test_portfolio_legacy_migration(tmp_path, monkeypatch):CODE
LOWbackend/tests/test_fixes.py101def test_myreports_legacy_migration(tmp_path, monkeypatch):CODE
LOWbackend/tests/test_fixes.py125def test_full_valuation_dirty_forecast(monkeypatch):CODE
LOWbackend/tests/test_fixes.py137def test_full_valuation_string_numbers(monkeypatch):CODE
LOWbackend/tests/test_fixes.py151def test_emotion_dirty_amount(monkeypatch):CODE
LOWbackend/tests/test_fixes.py189def test_market_degrades_without_akshare(monkeypatch):CODE
LOWbackend/tests/test_fixes.py200def test_stream_tool_calls_without_index(monkeypatch):CODE
LOWbackend/tests/test_fixes.py232def test_run_cli_stream_timeout(monkeypatch):CODE
LOWbackend/tests/test_api.py63def test_gstock_quote_full_null_shape():CODE
LOWbackend/tests/test_reports_and_security.py24def test_classify_by_filename():CODE
LOWbackend/tests/test_reports_and_security.py30def test_report_roundtrip_and_delete():CODE
LOWbackend/tests/test_reports_and_security.py76def test_ssrf_public_mode_blocks_internal(monkeypatch):CODE
LOWbackend/tests/test_reports_and_security.py86def test_negative_cost_accepted():CODE
LOWbackend/tests/test_reports_and_security.py92def test_zero_shares_rejected():CODE
LOWbackend/tests/test_gstock_search.py25def test_falls_back_to_second_endpoint(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py42def test_all_endpoints_down_raises_instead_of_returning_none(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py56def test_unknown_symbol_still_returns_none(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py66def test_malformed_payload_is_not_treated_as_not_found(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py91def test_missing_table_falls_through_to_backup(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py111def test_all_endpoints_return_bad_shape_raises(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py122def test_http_error_with_json_body_is_not_a_match(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py133def test_empty_data_with_valid_shape_is_still_not_found(monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py145def test_malformed_payload_falls_through_instead_of_crashing(payload, monkeypatch):CODE
LOWbackend/tests/test_gstock_search.py160def test_malformed_primary_still_uses_backup(monkeypatch):CODE
LOWbackend/tests/test_agents.py42def test_chat_reexports_tools():CODE
LOWbackend/tests/test_agents.py48def test_pick_trims_and_tolerates():CODE
LOWbackend/tests/test_agents.py55def test_exec_tool_never_raises():CODE
LOWbackend/tests/test_agents.py61def test_exec_tool_wraps_handler_exception(monkeypatch):CODE
LOWbackend/tests/test_agents.py89def test_referee_sees_everyone():CODE
LOWbackend/tests/test_agents.py95def test_referee_prompt_forbids_recommendation():CODE
LOWbackend/tests/test_agents.py102def test_dossier_spec_marks_rate_limited_sources_serial():CODE
LOWbackend/tests/test_agents.py119def test_payload_empty_sees_through_wrappers(value, empty):CODE
LOWbackend/tests/test_agents.py123def test_structurally_empty_counts_as_gap(monkeypatch):CODE
LOWbackend/tests/test_agents.py133def test_legitimately_empty_section_is_not_a_gap(monkeypatch):CODE
LOWbackend/tests/test_agents.py191def test_debate_aborts_when_no_data(monkeypatch):CODE
LOWbackend/tests/test_agents.py199def test_no_record_wording_does_not_claim_certainty(monkeypatch):CODE
LOWbackend/tests/test_agents.py206def test_reflection_rejects_empty():CODE
LOWbackend/tests/test_agents.py211def test_reflection_truncates_long_source(monkeypatch):CODE
9 more matches not shown…
Unused Imports20 hits · 18 pts
SeverityFileLineSnippetContext
LOWbackend/version.py10CODE
LOWbackend/gstock.py16CODE
LOWbackend/market.py7CODE
LOWbackend/reflection.py11CODE
LOWbackend/tools.py14CODE
LOWbackend/newsradar.py10CODE
LOWbackend/debate.py17CODE
LOWbackend/myreports.py12CODE
LOWbackend/chat.py10CODE
LOWbackend/chat.py20CODE
LOWbackend/chat.py22CODE
LOWbackend/astock.py12CODE
LOWbackend/astock.py17CODE
LOWbackend/astock.py21CODE
LOWbackend/app.py10CODE
LOWbackend/portfolio.py12CODE
LOWbackend/cli_runtime.py10CODE
LOWbackend/mcp_server.py13CODE
LOWbackend/tests/test_pure.py2CODE
LOWbackend/tests/test_reports_and_security.py10CODE
Deep Nesting9 hits · 8 pts
SeverityFileLineSnippetContext
LOWbackend/market.py40CODE
LOWbackend/reflection.py37CODE
LOWbackend/newsradar.py56CODE
LOWbackend/debate.py65CODE
LOWbackend/debate.py253CODE
LOWbackend/chat.py247CODE
LOWbackend/astock.py658CODE
LOWbackend/cli_runtime.py93CODE
LOWbackend/cli_runtime.py149CODE
Structural Annotation Overuse4 hits · 6 pts
SeverityFileLineSnippetContext
LOWa-stock-data/SKILL.md3046# Step 1: iwencai 多 query 语义搜索COMMENT
LOWa-stock-data/SKILL.md3063# Step 2: 东财补充同标的研报 + PDFCOMMENT
LOWglobal-stock-data/SKILL.md231 # Step 1: 获取 cookieCOMMENT
LOWglobal-stock-data/SKILL.md234 # Step 2: 获取 crumbCOMMENT
Over-Commented Block3 hits · 2 pts
SeverityFileLineSnippetContext
LOWa-stock-data/SKILL.md601min5 = client.bars(symbol='688017', frequency=0, offset=48) # 5分钟COMMENT
LOWfrontend/src/hooks/useLiveQuotes.ts1// 自选股实时行情轮询。COMMENT
LOWbackend/debate.py21COMMENT