Vibe-Research:A 股、美股、港股的投研工作台 · 自选与持仓、每日复盘、产业资讯、产业研究、个股深挖、回测、研报库,168 个数据端点。支持 Claude Code、Codex、WorkBuddy 订阅或任意模型 API。 | A research workbench for China A-shares, US and HK stocks.
This report summarizes scanner evidence for simonlin1212/Vibe-Research, a TypeScript project with 2,664 GitHub stars. SynthScan examined 151,922 lines of code across 685 source files, recording 1163 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 9.0 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 857 finding(s).
Are imports declared and package/API names verified? 188 finding(s).
Are wrappers, guards, and repeated structures necessary? 913 finding(s).
Which changes need focused human review? 1163 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1163 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 29 | def test_river_parse_timezone_and_filters(): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 76 | def test_no_keywords_is_unscored_not_irrelevant(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 94 | def test_rss_fallback_is_loud(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 120 | def test_both_entries_broken_raises(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 127 | def test_empty_window_is_partial_not_failure(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 139 | def test_parse_variants_and_acceptance_rate(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 157 | def test_future_items_dropped(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 170 | def test_keyword_precision_context_needs_anchor(): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 188 | def test_scored_requires_usable_combination(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 201 | def test_missing_cite_row_is_dropped_not_guessed(): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 210 | def test_low_accept_rate_forces_partial(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 224 | def test_rss_without_timezone_is_dropped(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 236 | def test_hits_survive_evidence_cap(monkeypatch, tmp_path): | CODE |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 253 | def test_context_only_candidates_survive_cap(monkeypatch, tmp_path): | CODE |
| LOW | …ta-access/scripts/tests/test_m36_probability_budget.py | 17 | def test_later_page_failure_keeps_valid_first_page(monkeypatch, venue, failure): | CODE |
| LOW | …ta-access/scripts/tests/test_m36_probability_budget.py | 47 | def test_failed_first_page_is_not_a_successful_empty_source(monkeypatch, venue): | CODE |
| LOW | …ta-access/scripts/tests/test_m36_probability_budget.py | 55 | def test_budget_closes_response_and_refuses_later_requests(monkeypatch): | CODE |
| LOW | …ta-access/scripts/tests/test_m36_probability_budget.py | 83 | def test_sources_get_separate_budgets_and_restore_context(monkeypatch): | CODE |
| LOW | …ta-access/scripts/tests/test_m36_probability_budget.py | 103 | def test_every_series_discovery_response_is_recorded(monkeypatch): | CODE |
| LOW⚡ | …ills/data-access/scripts/tests/test_m31_global_gaps.py | 6 | def test_report_currency_not_listing_currency(currency, expected): | CODE |
| LOW⚡ | …ills/data-access/scripts/tests/test_m31_global_gaps.py | 11 | def test_unknown_currency_does_not_invent_money(): | CODE |
| LOW⚡ | …ills/data-access/scripts/tests/test_m31_global_gaps.py | 18 | def test_kline_missing_extremes_preserves_close(): | CODE |
| LOW⚡ | …ills/data-access/scripts/tests/test_m31_global_gaps.py | 24 | def test_missing_flow_pct_is_not_null_numeric_evidence(): | CODE |
| LOW⚡ | …ills/data-access/scripts/tests/test_m31_global_gaps.py | 30 | def test_yahoo_outputs_no_target_price_or_single_firm_rating(monkeypatch): | CODE |
| LOW | …ills/data-access/scripts/tests/test_eastmoney_pools.py | 19 | def test_upstream_fallback_to_an_earlier_session_is_not_a_pool(monkeypatch): | CODE |
| LOW | …ills/data-access/scripts/tests/test_eastmoney_pools.py | 35 | def test_today_before_call_auction_match_is_refused_without_asking(monkeypatch, hm, blocked): | CODE |
| LOW | …ills/data-access/scripts/tests/test_eastmoney_pools.py | 51 | def test_business_error_is_a_failure_not_an_empty_pool(monkeypatch): | CODE |
| LOW | …ills/data-access/scripts/tests/test_eastmoney_pools.py | 68 | def test_legacy_pool_endpoints_never_write_zero_limit_ups(): | CODE |
| LOW | …skills/data-access/scripts/tests/test_results_dates.py | 52 | def test_hkex_only_exact_code_and_merges_across_categories(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 68 | def test_hkex_no_exact_match_is_not_available(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 74 | def test_hkex_bad_time_kept_without_date_and_offsite_link_dropped(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 84 | def test_hkex_changed_shape_raises(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 92 | def test_hkex_empty_category_shapes_mean_no_rows(monkeypatch, empty): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 100 | def test_hkex_unreadable_result_raises(monkeypatch, bad, msg): | CODE |
| LOW | …skills/data-access/scripts/tests/test_results_dates.py | 186 | def test_sec_paging_stops_on_total_short_page_or_cap(monkeypatch): | CODE |
| LOW | …skills/data-access/scripts/tests/test_results_dates.py | 202 | def test_sec_changed_shape_raises(monkeypatch, bad, msg): | CODE |
| LOW | …skills/data-access/scripts/tests/test_results_dates.py | 248 | def test_map_hk_counts_lists_and_keeps_full_rows_in_extracted(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 261 | def test_map_hk_truncated_is_partial(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 267 | def test_map_us_empty_mentions_adr_and_cut(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 274 | def test_map_us_truncated_is_partial_and_caps_listed_rows(monkeypatch): | CODE |
| LOW⚡ | …skills/data-access/scripts/tests/test_results_dates.py | 282 | def test_map_sec_wording_total_and_accession(monkeypatch): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 20 | def test_anchors_from_tag_table(tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 37 | def test_title_parsing_and_buckets(): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 58 | def test_isolation_and_mapper(monkeypatch, tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 89 | def test_no_anchors_is_not_zero_jobs(tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 109 | def test_raw_recorded_before_parse(monkeypatch, tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 121 | def test_zero_jobs_is_unverified(monkeypatch, tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 135 | def test_anchor_dedup_aggregates_tags(tmp_path, monkeypatch): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 151 | def test_raw_saved_even_when_json_is_broken(monkeypatch, tmp_path): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 163 | def test_record_key_length_guard(): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 171 | def test_record_key_reserves_room_for_bucket(): | CODE |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 183 | def test_no_tags_is_partial_not_failed(tmp_path): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 36 | def test_upgrades_never_echo_the_key_itself(): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 44 | def test_whitespace_only_key_is_not_a_key(): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 50 | def test_search_stamps_source_and_time(monkeypatch): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 57 | def test_unknown_provider_fails_loudly(): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 65 | def test_fetch_page_truncates_and_flags(monkeypatch): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 73 | def test_providers_are_registerable(): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 130 | def test_cdp_url_allowlist_blocks_local_and_nonweb(bad): | CODE |
| LOW⚡ | …kills/data-access/scripts/tests/test_core_retrieval.py | 136 | def test_cdp_url_allowlist_permits_normal_web(monkeypatch): | CODE |
| 733 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | datasources/port_astock.py | 12 | CODE | |
| LOW | datasources/gen_catalog.py | 3 | CODE | |
| LOW | datasources/health.py | 5 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_financials.py | 12 | CODE | |
| LOW | …ents/skills/data-access/scripts/fetch_announcements.py | 10 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_kline.py | 9 | CODE | |
| LOW | …nts/skills/data-access/scripts/fetch_trade_calendar.py | 16 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_endpoint.py | 9 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_endpoint.py | 21 | CODE | |
| LOW | .agents/skills/data-access/scripts/common.py | 11 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_profile.py | 11 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_pe_history.py | 9 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_estimates.py | 12 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_quote.py | 14 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/cdp.py | 46 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 12 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 18 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 18 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 18 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 24 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/stdio_utf8.py | 23 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/retrieval.py | 60 | CODE | |
| LOW | …nts/skills/data-access/scripts/tests/test_headlines.py | 2 | CODE | |
| LOW | …ills/data-access/scripts/tests/test_eastmoney_pools.py | 6 | CODE | |
| LOW | …data-access/scripts/tests/test_audit_round3_sources.py | 5 | CODE | |
| LOW | .agents/skills/data-access/scripts/tests/test_hiring.py | 2 | CODE | |
| LOW | …kills/data-access/scripts/tests/test_core_retrieval.py | 2 | CODE | |
| LOW | …gents/skills/data-access/scripts/tests/test_datacal.py | 2 | CODE | |
| LOW | …ills/data-access/scripts/tests/test_baostock_paging.py | 7 | CODE | |
| LOW | …nts/skills/data-access/scripts/tests/test_em_events.py | 5 | CODE | |
| LOW | …skills/data-access/scripts/tests/test_market_review.py | 5 | CODE | |
| LOW | …/skills/data-access/scripts/tests/test_market_voice.py | 3 | CODE | |
| LOW | …ta-access/scripts/tests/test_source_partial_results.py | 2 | CODE | |
| LOW | …skills/data-access/scripts/tests/test_raw_ref_posix.py | 2 | CODE | |
| LOW | …ents/skills/data-access/scripts/tests/test_rss_feed.py | 2 | CODE | |
| LOW | …lls/data-access/scripts/tests/test_registry_sources.py | 2 | CODE | |
| LOW | …lls/data-access/scripts/tests/test_registry_sources.py | 9 | CODE | |
| LOW | …ills/data-access/scripts/tests/test_global_industry.py | 2 | CODE | |
| LOW | …nts/skills/data-access/scripts/tests/test_commodity.py | 2 | CODE | |
| LOW | .agents/skills/data-access/scripts/tests/test_policy.py | 2 | CODE | |
| LOW | …nts/skills/data-access/scripts/tests/test_eastmoney.py | 2 | CODE | |
| LOW | …nts/skills/data-access/scripts/tests/test_eastmoney.py | 6 | CODE | |
| LOW | …ents/skills/data-access/scripts/tests/test_industry.py | 2 | CODE | |
| LOW | …skills/data-access/scripts/tests/test_astock_ported.py | 2 | CODE | |
| LOW | …skills/data-access/scripts/tests/test_astock_ported.py | 7 | CODE | |
| LOW | …skills/data-access/scripts/tests/test_astock_ported.py | 11 | CODE | |
| LOW | …s/skills/data-access/scripts/tests/test_probability.py | 6 | CODE | |
| LOW | …kills/data-access/scripts/tests/test_us_share_class.py | 3 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/macro_us.py | 3 | CODE | |
| LOW | …nts/skills/data-access/scripts/sources/baostock_src.py | 3 | CODE | |
| LOW | …nts/skills/data-access/scripts/sources/baostock_src.py | 5 | CODE | |
| LOW | …kills/data-access/scripts/sources/mappers_commodity.py | 9 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/rss.py | 3 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/datacal.py | 13 | CODE | |
| LOW | …s/skills/data-access/scripts/sources/mappers_global.py | 3 | CODE | |
| LOW | …s/skills/data-access/scripts/sources/mappers_global.py | 5 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/cninfo.py | 2 | CODE | |
| LOW | …s/skills/data-access/scripts/sources/mappers_policy.py | 2 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/cls.py | 2 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/yahoo.py | 3 | CODE | |
| 109 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/data-access/scripts/fetch_financials.py | 161 | except Exception as e: # noqa: BLE001 — 补齐失败只记录 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_financials.py | 175 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | …ents/skills/data-access/scripts/fetch_announcements.py | 77 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_kline.py | 104 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | …nts/skills/data-access/scripts/fetch_trade_calendar.py | 91 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_endpoint.py | 119 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_endpoint.py | 160 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/common.py | 205 | except Exception as e: # noqa: BLE001 — 轮询下一主机 | CODE |
| LOW | .agents/skills/data-access/scripts/common.py | 221 | except Exception: | CODE |
| LOW | .agents/skills/data-access/scripts/common.py | 309 | except Exception: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_profile.py | 130 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_pe_history.py | 83 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_estimates.py | 137 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/fetch_quote.py | 135 | except Exception as e: # noqa: BLE001 — 记录后尝试备源 | CODE |
| LOW | .agents/skills/data-access/scripts/core/cdp.py | 267 | except Exception as e: # noqa: BLE001 — 连不上是最常见情形,要给能懂的提示 | CODE |
| LOW | .agents/skills/data-access/scripts/core/exa_client.py | 111 | except Exception as e: # noqa: BLE001 — 超时 / 连接错误统一成 ExaError,信封层 fail-fast 出声 | CODE |
| LOW | .agents/skills/data-access/scripts/core/retrieval.py | 345 | except Exception as ex: # noqa: BLE001 — 边界统一收口 | CODE |
| LOW | .agents/skills/data-access/scripts/core/retrieval.py | 361 | except Exception: # noqa: BLE001 — 自定义对象的 __str__ 也可能抛 | CODE |
| LOW | …gents/skills/data-access/scripts/core/retrieval_cli.py | 47 | except Exception: | CODE |
| LOW | .agents/skills/data-access/scripts/sources/macro_us.py | 81 | except Exception as e: # noqa: BLE001 —— 单个系列失败只记原因 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/rss.py | 83 | except Exception as e: # noqa: BLE001 — 单源失败不拖垮整体,记入结果 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/datacal.py | 129 | except Exception as e: # noqa: BLE001 — 逐 ticker 隔离,汇总出声 | CODE |
| LOW | …gents/skills/data-access/scripts/sources/mootdx_src.py | 41 | except Exception: # noqa: BLE001 | CODE |
| LOW | …gents/skills/data-access/scripts/sources/mootdx_src.py | 60 | except Exception: # noqa: BLE001 | CODE |
| LOW | …gents/skills/data-access/scripts/sources/mootdx_src.py | 68 | except Exception: # noqa: BLE001 | CODE |
| LOW | …gents/skills/data-access/scripts/sources/mootdx_src.py | 109 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/exa.py | 45 | except Exception: # noqa: BLE001 — 拿不到简称就用代码搜,不让线索层拖垮运行 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 707 | except Exception: # noqa: BLE001 — 搜索失败则逐个试 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 844 | except Exception as e: # noqa: BLE001 分布没了,三所成交额照取 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 878 | except Exception as e: # noqa: BLE001 东财 push2 被风控时常断连;家数没了,成交额改用腾讯行情 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 892 | except Exception as e2: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 902 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 970 | except Exception as e: # noqa: BLE001 换东财再试 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 976 | except Exception as e: # noqa: BLE001 单条失败如实记下,其余照常 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 991 | except Exception as e: # noqa: BLE001 换 baostock | CODE |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 1009 | except Exception as e: # noqa: BLE001 两个源都没有就如实缺 | CODE |
| MEDIUM | .agents/skills/data-access/scripts/sources/eastmoney.py | 301 | def _num_or_none(v) -> Optional[float]: | CODE |
| LOW | .agents/skills/data-access/scripts/sources/policy.py | 105 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/policy.py | 194 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/policy.py | 239 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | .agents/skills/data-access/scripts/sources/policy.py | 329 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | .agents/skills/data-access/scripts/sources/policy.py | 337 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | .agents/skills/data-access/scripts/sources/policy.py | 342 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | .agents/skills/data-access/scripts/sources/policy.py | 347 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/exchange.py | 32 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/commodity.py | 189 | except Exception as e: # noqa: BLE001 — 逐品种隔离 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/commodity.py | 228 | except Exception as e: # noqa: BLE001 — 逐源隔离 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/cboe.py | 46 | except Exception: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/headlines.py | 208 | except Exception: # noqa: BLE001 — 解析失败按"无时间"处理,窗口裁剪时丢弃并计数 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/headlines.py | 236 | except Exception as e: # noqa: BLE001 — river 失败回退 RSS,但必须出声(RSS 只有 15 条,窗口会不完整) | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 156 | except Exception as e: # noqa: BLE001 — 每家单独记错,最后再判全灭 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 192 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 199 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 239 | except Exception: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 287 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | .agents/skills/data-access/scripts/sources/industry.py | 294 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 380 | except Exception as e: # preserve earlier parsed pages, never claim full coverage | CODE |
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 412 | except Exception as e: # noqa: BLE001 — 定向失败不该拖垮广度已拿到的部分,但必须出声 | CODE |
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 533 | except Exception as e: # preserve earlier parsed pages, never claim full coverage | CODE |
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 560 | except Exception as e: # noqa: BLE001 | CODE |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .agents/skills/data-access/scripts/sources/mappers.py | 164 | # ===================================================================== | COMMENT |
| MEDIUM | .agents/skills/data-access/scripts/sources/mappers.py | 166 | # ===================================================================== | COMMENT |
| MEDIUM | desktop/src/verticals/finance/lib/shareCard.ts | 123 | // ───────────────────────── 画卡片 ───────────────────────── | COMMENT |
| MEDIUM⚡ | backtest/benchmark.py | 22 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | backtest/benchmark.py | 24 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | backtest/benchmark.py | 137 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | backtest/benchmark.py | 139 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | backtest/engines/base.py | 785 | # ── External benchmark fetch ────────────────────────────────────────── | COMMENT |
| MEDIUM | backtest/engines/base.py | 817 | # ── External benchmark fetch ────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/direct_transport.test.ts | 291 | // ───────────── 模板的 API 能力声明 ───────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 88 | // ── 工具:两类大脑同一套规则 ───────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 202 | // ── 会话与上下文 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 338 | // ── 内部一次性任务:标题翻译 / 连接探针 ───────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 435 | // ── 输入与会话隔离 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 517 | // ── 用户在界面上自己配的来源(按请求带下来的 llm) ───────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 628 | // ── 三家本机 Agent ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 663 | // ── 并发与取消 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/chat.test.ts | 760 | // ── 报错收口:不泄密、不透传内部原文 ────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/test/number_gate.test.ts | 190 | // ── 接进对话 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | orchestrator/src/run_tools.ts | 221 | // ─────────────────────────── 工具 registry ─────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .agents/skills/data-access/scripts/core/cdp.py | 582 | {"expression": "({href: location.href, text: (document.body && document.body.innerText) || ''})", | CODE |
| HIGH | …skills/data-access/scripts/tests/test_market_review.py | 285 | '{"code":"bad","name":"x"},{"code":"600519","name":"贵州茅台","trade":"","changepercent":"-1","amount":"900000 | CODE |
| HIGH | …lls/data-access/scripts/tests/test_registry_sources.py | 346 | # 第四轮审计 B2:缺报告币种(没有 / 空串 / null)的金额不按上市地补成港元,列进 missing;一条都没有币种 = 失败 | COMMENT |
| HIGH | …s/skills/data-access/scripts/sources/mappers_astock.py | 4 | - 上游返回 DataFrame。先整表转成 JSON 安全的行(NaN → null,numpy 标量 → Python)落一个 extracted_ 文件 | STRING |
| HIGH | calc/series.py | 3 | 输入统一为 [{"period": "YYYY-MM-DD", "value": 数值或 null}] 列表(同一字段、同一单位,顺序任意): | STRING |
| HIGH | calc/display.py | 110 | (多结果函数顶层 value 为 null,四锚年数等在 details 里,报告照抄子结果的 display)。""" | STRING |
| HIGH | calc/cli.py | 23 | display = 展示层字符串(calc/display.py 确定性格式化;status ≠ ok 时为 null),报告正文照抄它、不抄 value 原始浮点。 | STRING |
| HIGH | backtest/metrics.py | 231 | undefined, | CODE |
| HIGH | backtest/rebalance_notes.py | 148 | ``_json_safe`` (non-finite -> null) and serialize with ``allow_nan=False`` | STRING |
| HIGH | backtest/validation.py | 513 | strict parsers reject. Sanitize with :func:`_json_safe` (non-finite → null) | STRING |
| HIGH⚡ | backtest/tests/test_loader.py | 35 | @pytest.mark.parametrize("stdout", ["not JSON", "[]", '{"errors":null}', '{"errors":[null,7,{"error":42}]}']) | CODE |
| HIGH | backtest/engines/base.py | 1330 | # Zero is always rejected (size = notional / price is undefined); | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .agents/skills/data-access/scripts/common.py | 224 | except OSError: | CODE |
| HIGH | .agents/skills/data-access/scripts/core/cdp.py | 456 | except (OSError, CdpError): | CODE |
| HIGH | .agents/skills/data-access/scripts/core/cdp.py | 460 | except OSError: | CODE |
| HIGH | .agents/skills/data-access/scripts/core/cdp.py | 598 | except CdpError: | CODE |
| HIGH | .agents/skills/data-access/scripts/core/cdp.py | 307 | except OSError: | CODE |
| HIGH | .agents/skills/data-access/scripts/sources/eastmoney.py | 707 | except Exception: # noqa: BLE001 — 搜索失败则逐个试 | CODE |
| HIGH | …s/skills/data-access/scripts/sources/mappers_astock.py | 41 | except (TypeError, ValueError, ImportError): | CODE |
| HIGH | …s/skills/data-access/scripts/sources/mappers_astock.py | 46 | except (ValueError, AttributeError): | CODE |
| HIGH | backtest/engines/china_a.py | 141 | except Exception: | CODE |
| HIGH | backtest/engines/base.py | 925 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/data-access/scripts/fetch_financials.py | 90 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_financials.py | 144 | CODE | |
| LOW | …nts/skills/data-access/scripts/fetch_trade_calendar.py | 32 | CODE | |
| LOW | .agents/skills/data-access/scripts/common.py | 129 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_pe_history.py | 23 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_estimates.py | 121 | CODE | |
| LOW | .agents/skills/data-access/scripts/fetch_quote.py | 113 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/cdp.py | 232 | CODE | |
| LOW | .agents/skills/data-access/scripts/core/cdp.py | 464 | CODE | |
| LOW | …gents/skills/data-access/scripts/sources/mootdx_src.py | 45 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 165 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 383 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 691 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 832 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/eastmoney.py | 930 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/policy.py | 97 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/commodity.py | 159 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/commodity.py | 196 | CODE | |
| LOW | …lls/data-access/scripts/sources/mappers_probability.py | 43 | CODE | |
| LOW | …/skills/data-access/scripts/sources/astock_defaults.py | 74 | CODE | |
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 431 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 467 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 755 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 1132 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 1970 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 2048 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 2129 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 2253 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 2849 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/baidu.py | 15 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/textsafe.py | 63 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/textsafe.py | 93 | CODE | |
| LOW | .agents/skills/data-access/scripts/sources/macro.py | 80 | CODE | |
| LOW | calc/formulas.py | 230 | CODE | |
| LOW | calc/indicators.py | 31 | CODE | |
| LOW | calc/cli.py | 160 | CODE | |
| LOW | calc/cli.py | 195 | CODE | |
| LOW | calc/tests/test_formulas.py | 20 | CODE | |
| LOW | backtest/portfolio_xray.py | 154 | CODE | |
| LOW | backtest/portfolio_xray.py | 205 | CODE | |
| LOW | backtest/event_study.py | 495 | CODE | |
| LOW | backtest/portfolio_perf.py | 122 | CODE | |
| LOW | backtest/portfolio_perf.py | 160 | CODE | |
| LOW | backtest/portfolio_perf.py | 251 | CODE | |
| LOW | backtest/portfolio_perf.py | 484 | CODE | |
| LOW | backtest/kline.py | 81 | CODE | |
| LOW | backtest/engines/base.py | 977 | CODE | |
| LOW | backtest/engines/base.py | 1414 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | orchestrator/test/guided_tool.test.ts | 188 | print(json.dumps({"ok": True, "result": _result_view(r)}))`; | CODE |
| HIGH | orchestrator/test/debate.test.ts | 345 | print(json.dumps({'script':ep,'status':'partial','extra':{'degraded':'复权因子没取到'},'evidence':[{'id':'ev-'+ep,'field':'x',' | CODE |
| HIGH | orchestrator/test/schedule_watch_job.test.ts | 41 | print(json.dumps({'status':'ok','evidence':ev})) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .agents/skills/data-access/scripts/core/stdio_utf8.py | 0 | 把 stdin / stdout / stderr 重配为 utf-8。可重复调用。 🔴 **stdin 用 strict,stdout / stderr 用 replace** —— 两端的取舍是相反的: 进来的字节坏了必须**当场报错* | STRING |
| HIGH | calc/stdio_utf8.py | 0 | 把 stdin / stdout / stderr 重配为 utf-8。可重复调用。 🔴 **stdin 用 strict,stdout / stderr 用 replace** —— 两端的取舍是相反的: 进来的字节坏了必须**当场报错* | STRING |
| HIGH | backtest/stdio_utf8.py | 0 | 把 stdin / stdout / stderr 重配为 utf-8。可重复调用。 🔴 **stdin 用 strict,stdout / stderr 用 replace** —— 两端的取舍是相反的: 进来的字节坏了必须**当场报错* | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | orchestrator/src/run_tools.ts | 34 | const variant = calcRecordSchema.properties.inputs_refs.items.oneOf.find(v => v.properties.ref_type.const === kind); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ents/skills/data-access/scripts/sources/probability.py | 61 | _source_deadline: contextvars.ContextVar[Optional[float]] = contextvars.ContextVar("macro_source_deadline", default=None | COMMENT |
| LOW | desktop/src/verticals/finance/hooks/useLiveQuotes.ts | 1 | // 自选股快照轮询,不是逐笔实时行情。 | COMMENT |
| LOW | backtest/metrics.py | 21 | # mootdx (A-share) and futu (HK + A-share) are equity sources, so they mirror | COMMENT |
| LOW | backtest/metrics.py | 41 | # data granularity; model as US equity session as a conservative default) | COMMENT |
| LOW | backtest/engines/_market_hooks.py | 41 | (re.compile(r"^[A-Z]+-USDT$", re.I), "crypto"), | COMMENT |
| LOW | orchestrator/src/knowledge.ts | 121 | // 档案是**改标题之前**写的 → 一节都匹配不上。契约保证 tail 是连续后缀,所以退到"最后 N 节" | COMMENT |
| LOW | orchestrator/src/plugin.ts | 1461 | throw new Error("Plugin.gate.probeLine 必须是非空字符串(硬测试注入、必须被拦住的一行)"); | COMMENT |
| LOW | orchestrator/src/validator.ts | 281 | } | COMMENT |
| LOW | orchestrator/src/finance/gate_rules.ts | 61 | { name: "赔率可参与", re: /(风险收益比|赔率)[^,。;\n]{0,12}(合适|不错|可以参与|值得)/ }, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | website/index.html | 40 | .harness{position:relative;min-height:500px;border:1px solid rgba(243,93,43,.36);border-radius:22px;padding:30px;bac | CODE |
| MEDIUM | website/index.html | 55 | <nav class="nav" aria-label="主导航"><div class="wrap nav-inner"><a class="brand" href="#top" aria-label="Vibe-Research 首 | CODE |
| MEDIUM | backtest/engines/china_a.py | 37 | config = {**config, "leverage": 1.0} # A-shares: no leverage | CODE |
| MEDIUM | backtest/engines/base.py | 694 | """Return leverage used to size and margin one symbol.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backtest/risk_xray.py | 95 | Compute the risk x-ray for a weighted basket. Args: closes: Close-price panel, one column per symbol, sorte | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backtest/run.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | backtest/benchmark.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | backtest/engines/base.py | 50 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | orchestrator/test/deep_engine.test.ts | 29 | start() { throw new ServiceError(code, "/private/fake-user/auth.json private-canary"); }, | CODE |
| LOW | orchestrator/test/deep_engine.test.ts | 141 | run_id: "placeholder", exists: false, status: null, exit_code: null, stages: [], evidence_count: null, | CODE |
| LOW | orchestrator/test/deep_engine.test.ts | 195 | let status: ReturnType<DeepResearchBackend["status"]> = { run_id: "placeholder", exists: false, status: null, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/data-access/scripts/sources/mappers.py | 51 | CODE | |
| LOW | …ts/skills/data-access/scripts/sources/astock_ported.py | 218 | CODE |