Not in the top 1,000 by GitHub stars
Veblin/invest-skills
大A研究助手,仅作为学习不作为决策的依据
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
scripts/wb_bundle/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-discover-scan/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-etf/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-gap-scan/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-journal/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-pattern-scan/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-pulse/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-a-stock/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
skills/invest-hk-stock/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b2857b0599de → b2857b0599de
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b2857b0599de
No earlier version was observed for comparison.
Verified commit b2857b0599de563604cd3baf054a1c157da36f88
git clone --filter=blob:none --no-checkout https://github.com/Veblin/invest-skills.git .hotskills/veblin-invest-skills && git -C .hotskills/veblin-invest-skills checkout --detach b2857b0599de563604cd3baf054a1c157da36f88
# Copy each selected skill directory from .hotskills/veblin-invest-skills into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/Veblin/invest-skills.git .hotskills/veblin-invest-skills && git -C .hotskills/veblin-invest-skills checkout --detach b2857b0599de563604cd3baf054a1c157da36f88
# Copy each selected skill directory from .hotskills/veblin-invest-skills into .agents/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/Veblin/invest-skills.git .hotskills/veblin-invest-skills && git -C .hotskills/veblin-invest-skills checkout --detach b2857b0599de563604cd3baf054a1c157da36f88
# Copy each selected skill directory from .hotskills/veblin-invest-skills into .gemini/skills/<skill-name>/Heat
1.6- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- invest-skills
scripts/wb_bundle - invest-a-discover-scan
skills/invest-a-discover-scan - invest-a-etf
skills/invest-a-etf - invest-a-gap-scan
skills/invest-a-gap-scan - invest-a-journal
skills/invest-a-journal - invest-a-pattern-scan
skills/invest-a-pattern-scan - invest-a-pulse
skills/invest-a-pulse - invest-a-stock
skills/invest-a-stock - invest-hk-stock
skills/invest-hk-stock
How it works
invest-skills
When your agent uses it
A股投研技能集:个股投研、ETF研究、交易日志、市场情绪脉搏、跳空缺口扫描、底部形态扫描、港股研究、低估发现扫描,八大技能共用一个 Python 数据引擎,产出带来源追溯的研究备忘录。研究工具,非决策工具。触发词:个股投研/估值/财报/ETF/指数基金/交易日志/买入评估/卖出评估/市场情绪/大盘/市场脉搏/缺口扫描/跳空扫描/双底/形态扫描/三角形底/底部形态/港股/AH比价/南向资金/低估/发现/便宜/估值扫描
What it loads into context
Frontmatter
192 tokensAlways available to the agent
SKILL.md
1,185 tokensWhen the skill is activated
Reference documents
188,706 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 子技能路由表
- 环境约定(重要)
- Step 0 — 首次使用:环境自检(每个新会话先跑一次)
- 输出位置
- 边界
Scripts executed separately
bootstrap.sh../../skills/invest-a-discover-scan/scripts/discover_fillback.py../../skills/invest-a-discover-scan/scripts/discover_scan.py../../skills/invest-a-discover-scan/scripts/lib/__init__.py../../skills/invest-a-discover-scan/scripts/lib/_invest_path.py../../skills/invest-a-discover-scan/scripts/lib/lenses.py../../skills/invest-a-discover-scan/scripts/lib/pool.py../../skills/invest-a-discover-scan/scripts/lib/quality.py../../skills/invest-a-discover-scan/scripts/lib/snapshot.py../../skills/invest-a-discover-scan/scripts/lib/sources.py../../skills/invest-a-discover-scan/scripts/lib/sources_hk.py../../skills/invest-a-discover-scan/tests/_scan_cli.py../../skills/invest-a-discover-scan/tests/conftest.py../../skills/invest-a-discover-scan/tests/test_cli.py../../skills/invest-a-discover-scan/tests/test_discover_pool.py../../skills/invest-a-discover-scan/tests/test_lenses.py../../skills/invest-a-discover-scan/tests/test_quality.py../../skills/invest-a-discover-scan/tests/test_snapshot.py../../skills/invest-a-discover-scan/tests/test_sources.py../../skills/invest-a-discover-scan/tests/test_sources_hk.py../../skills/invest-a-etf/scripts/__init__.py../../skills/invest-a-etf/scripts/etf.py../../skills/invest-a-etf/scripts/lib/__init__.py../../skills/invest-a-etf/scripts/lib/_invest_path.py../../skills/invest-a-etf/scripts/lib/assets/chart.umd.min.js../../skills/invest-a-etf/scripts/lib/etf_data.py../../skills/invest-a-etf/scripts/lib/etf_generation.py../../skills/invest-a-etf/scripts/lib/etf_html.py../../skills/invest-a-etf/scripts/lib/etf_md.py../../skills/invest-a-etf/scripts/lib/etf_peers.py../../skills/invest-a-etf/scripts/lib/etf_playbook.py../../skills/invest-a-etf/scripts/lib/etf_research.py../../skills/invest-a-etf/scripts/lib/etf_timeline.py../../skills/invest-a-etf/scripts/lib/futures_basis.py../../skills/invest-a-etf/scripts/lib/index_pe_snapshot.py../../skills/invest-a-etf/scripts/lib/industry_snapshot.py../../skills/invest-a-etf/scripts/lib/sector_flow.py../../skills/invest-a-etf/tests/conftest.py../../skills/invest-a-etf/tests/test_etf_159920_disclosure.py../../skills/invest-a-etf/tests/test_etf_boll_bandwidth.py../../skills/invest-a-etf/tests/test_etf_cache_fixes.py../../skills/invest-a-etf/tests/test_etf_cli.py../../skills/invest-a-etf/tests/test_etf_data_status.py../../skills/invest-a-etf/tests/test_etf_decision.py../../skills/invest-a-etf/tests/test_etf_exposure.py../../skills/invest-a-etf/tests/test_etf_flags.py../../skills/invest-a-etf/tests/test_etf_generation.py../../skills/invest-a-etf/tests/test_etf_holdings.py../../skills/invest-a-etf/tests/test_etf_html.py../../skills/invest-a-etf/tests/test_etf_identity.py../../skills/invest-a-etf/tests/test_etf_index_pe.py../../skills/invest-a-etf/tests/test_etf_kline.py../../skills/invest-a-etf/tests/test_etf_map.py../../skills/invest-a-etf/tests/test_etf_md.py../../skills/invest-a-etf/tests/test_etf_peers.py../../skills/invest-a-etf/tests/test_etf_playbook.py../../skills/invest-a-etf/tests/test_etf_same_index_evidence.py../../skills/invest-a-etf/tests/test_etf_scale_semantics.py../../skills/invest-a-etf/tests/test_etf_share_flow.py../../skills/invest-a-etf/tests/test_etf_share_split.py../../skills/invest-a-etf/tests/test_etf_share_window.py../../skills/invest-a-etf/tests/test_etf_spot_cache.py../../skills/invest-a-etf/tests/test_etf_timeline.py../../skills/invest-a-etf/tests/test_etf_tracking.py../../skills/invest-a-etf/tests/test_etf_tradability.py../../skills/invest-a-etf/tests/test_etf_valuation_guide.py../../skills/invest-a-etf/tests/test_futures_basis.py../../skills/invest-a-etf/tests/test_index_pe_snapshot.py../../skills/invest-a-etf/tests/test_operating_research.py../../skills/invest-a-etf/tests/test_r1_staleness.py../../skills/invest-a-etf/tests/test_sector_flow.py../../skills/invest-a-etf/tests/test_v026_p1_fixes.py../../skills/invest-a-event-calendar/scripts/__init__.py../../skills/invest-a-event-calendar/scripts/macro_calendar.py../../skills/invest-a-event-calendar/scripts/theme_calendar.py../../skills/invest-a-event-calendar/scripts/unlock_calendar.py../../skills/invest-a-event-calendar/tests/test_calendar.py../../skills/invest-a-event-calendar/tests/test_macro_calendar.py../../skills/invest-a-event-calendar/tests/test_macro_cli.py../../skills/invest-a-event-calendar/tests/test_pool.py../../skills/invest-a-event-calendar/tests/test_theme_calendar.py../../skills/invest-a-gap-scan/scripts/__init__.py../../skills/invest-a-gap-scan/scripts/eval_forward.py../../skills/invest-a-gap-scan/scripts/lib/__init__.py../../skills/invest-a-gap-scan/scripts/lib/_invest_path.py../../skills/invest-a-gap-scan/scripts/lib/gap_scanner.py../../skills/invest-a-gap-scan/scripts/lib/kline_source.py../../skills/invest-a-gap-scan/scripts/lib/qfq.py../../skills/invest-a-gap-scan/scripts/lib/report_formatter.py../../skills/invest-a-gap-scan/scripts/lib/skip_reasons.py../../skills/invest-a-gap-scan/scripts/lib/suspension.py../../skills/invest-a-gap-scan/scripts/lib/universe.py../../skills/invest-a-gap-scan/scripts/record_hits.py../../skills/invest-a-gap-scan/scripts/scan.py../../skills/invest-a-gap-scan/tests/__init__.py../../skills/invest-a-gap-scan/tests/conftest.py../../skills/invest-a-gap-scan/tests/test_backtest_eval.py../../skills/invest-a-gap-scan/tests/test_create_source.py../../skills/invest-a-gap-scan/tests/test_gap_scanner.py../../skills/invest-a-gap-scan/tests/test_kline_group.py../../skills/invest-a-gap-scan/tests/test_qfq.py../../skills/invest-a-gap-scan/tests/test_report_smoke.py../../skills/invest-a-gap-scan/tests/test_suspension.py../../skills/invest-a-gap-scan/tests/test_universe.py../../skills/invest-a-journal/scripts/journal.py../../skills/invest-a-journal/scripts/lib/__init__.py../../skills/invest-a-journal/scripts/lib/_invest_path.py../../skills/invest-a-journal/scripts/lib/db.py../../skills/invest-a-journal/scripts/lib/etf_data.py../../skills/invest-a-journal/scripts/lib/market_microstructure.py../../skills/invest-a-journal/scripts/lib/query_data.py../../skills/invest-a-journal/tests/conftest.py../../skills/invest-a-journal/tests/test_chip_clearance.py../../skills/invest-a-journal/tests/test_compute_technical_stock.py../../skills/invest-a-journal/tests/test_db_rollback.py../../skills/invest-a-journal/tests/test_env_guardrail.py../../skills/invest-a-journal/tests/test_etf_shim.py../../skills/invest-a-journal/tests/test_futures_basis_freshness.py../../skills/invest-a-journal/tests/test_inaction_watch_show.py../../skills/invest-a-journal/tests/test_journal_module_loader.py../../skills/invest-a-journal/tests/test_journal_v026.py../../skills/invest-a-journal/tests/test_labels_v2.py../../skills/invest-a-journal/tests/test_macro_snapshot.py../../skills/invest-a-journal/tests/test_market_form.py../../skills/invest-a-journal/tests/test_microstructure_via_bridge.py../../skills/invest-a-journal/tests/test_position_nav.py../../skills/invest-a-journal/tests/test_query_data_etf.py../../skills/invest-a-journal/tests/test_query_helpers.py../../skills/invest-a-journal/tests/test_safe_collect_ordering.py../../skills/invest-a-journal/tests/test_sell_link.py../../skills/invest-a-journal/tests/test_session_date_fields.py../../skills/invest-a-journal/tests/test_snapshot_status.py../../skills/invest-a-journal/tests/test_store_isolation.py../../skills/invest-a-journal/tests/test_szse_turnover.py../../skills/invest-a-journal/tests/test_v027_csindex_noise.py../../skills/invest-a-journal/tests/test_wrong_frequency.py../../skills/invest-a-journal/tests/test_zt_seesaw.py../../skills/invest-a-pattern-scan/scripts/lib/_invest_path.py../../skills/invest-a-pattern-scan/scripts/lib/feature_patterns.py../../skills/invest-a-pattern-scan/scripts/lib/kline_source.py../../skills/invest-a-pattern-scan/scripts/lib/pattern_scanner.py../../skills/invest-a-pattern-scan/scripts/lib/universe.py../../skills/invest-a-pattern-scan/scripts/scan.py../../skills/invest-a-pattern-scan/tests/test_feature_patterns.py../../skills/invest-a-pattern-scan/tests/test_scanner_smoke.py../../skills/invest-a-stock/scripts/agent_facts.py../../skills/invest-a-stock/scripts/check_report.sh../../skills/invest-a-stock/scripts/invest.py../../skills/invest-a-stock/scripts/lib/__init__.py../../skills/invest-a-stock/scripts/lib/_invest_path.py../../skills/invest-a-stock/scripts/lib/analysis_schema.py../../skills/invest-a-stock/scripts/lib/analysis_status.py../../skills/invest-a-stock/scripts/lib/analysis_templates.py../../skills/invest-a-stock/scripts/lib/archiver.py../../skills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js../../skills/invest-a-stock/scripts/lib/attribution.py../../skills/invest-a-stock/scripts/lib/catalyst.py../../skills/invest-a-stock/scripts/lib/chain.py../../skills/invest-a-stock/scripts/lib/climate.py../../skills/invest-a-stock/scripts/lib/collector/__init__.py../../skills/invest-a-stock/scripts/lib/collector/_base.py../../skills/invest-a-stock/scripts/lib/collector/_kline_cache.py../../skills/invest-a-stock/scripts/lib/collector/_legacy.py../../skills/invest-a-stock/scripts/lib/collector/_orchestrate.py../../skills/invest-a-stock/scripts/lib/collector/_sources.py../../skills/invest-a-stock/scripts/lib/data_util.py../../skills/invest-a-stock/scripts/lib/db_util.py../../skills/invest-a-stock/scripts/lib/env.py../../skills/invest-a-stock/scripts/lib/events.py../../skills/invest-a-stock/scripts/lib/evidence.py../../skills/invest-a-stock/scripts/lib/financial_rigor.py../../skills/invest-a-stock/scripts/lib/financials.py../../skills/invest-a-stock/scripts/lib/fusion.py../../skills/invest-a-stock/scripts/lib/futures_data.py../../skills/invest-a-stock/scripts/lib/html_charts.py../../skills/invest-a-stock/scripts/lib/income_driver.py../../skills/invest-a-stock/scripts/lib/industry/__init__.py../../skills/invest-a-stock/scripts/lib/industry/banks.py../../skills/invest-a-stock/scripts/lib/industry/base.py../../skills/invest-a-stock/scripts/lib/industry/tech_hardware.py../../skills/invest-a-stock/scripts/lib/insight_model.py../../skills/invest-a-stock/scripts/lib/json_util.py../../skills/invest-a-stock/scripts/lib/kline_cache.py../../skills/invest-a-stock/scripts/lib/lhb.py../../skills/invest-a-stock/scripts/lib/lint.py../../skills/invest-a-stock/scripts/lib/macro.py../../skills/invest-a-stock/scripts/lib/manifest.py../../skills/invest-a-stock/scripts/lib/market_daily.py../../skills/invest-a-stock/scripts/lib/market_pulse.py../../skills/invest-a-stock/scripts/lib/md_subset.py../../skills/invest-a-stock/scripts/lib/news_scanner.py../../skills/invest-a-stock/scripts/lib/notice_body.py../../skills/invest-a-stock/scripts/lib/nums.py../../skills/invest-a-stock/scripts/lib/participant_scan.py../../skills/invest-a-stock/scripts/lib/planner.py../../skills/invest-a-stock/scripts/lib/portfolio_review.py../../skills/invest-a-stock/scripts/lib/positions.py../../skills/invest-a-stock/scripts/lib/proxy.py../../skills/invest-a-stock/scripts/lib/qfq.py../../skills/invest-a-stock/scripts/lib/quality_check.py../../skills/invest-a-stock/scripts/lib/render.py../../skills/invest-a-stock/scripts/lib/render_dcf.py../../skills/invest-a-stock/scripts/lib/render_extras.py../../skills/invest-a-stock/scripts/lib/render_html.py../../skills/invest-a-stock/scripts/lib/render_icons.py../../skills/invest-a-stock/scripts/lib/render_insight.py../../skills/invest-a-stock/scripts/lib/render_markdown/__init__.py../../skills/invest-a-stock/scripts/lib/render_markdown/_base.py../../skills/invest-a-stock/scripts/lib/render_markdown/_concise.py../../skills/invest-a-stock/scripts/lib/render_markdown/_legacy.py../../skills/invest-a-stock/scripts/lib/render_markdown/_v2.py../../skills/invest-a-stock/scripts/lib/render_markdown/_v3.py../../skills/invest-a-stock/scripts/lib/render_risk.py../../skills/invest-a-stock/scripts/lib/render_utils.py../../skills/invest-a-stock/scripts/lib/report_audit.py../../skills/invest-a-stock/scripts/lib/report_snapshot.py../../skills/invest-a-stock/scripts/lib/rerank.py../../skills/invest-a-stock/scripts/lib/research_profile.py../../skills/invest-a-stock/scripts/lib/risk_reward.py../../skills/invest-a-stock/scripts/lib/risk_scanner.py../../skills/invest-a-stock/scripts/lib/schema.py../../skills/invest-a-stock/scripts/lib/scoring.py../../skills/invest-a-stock/scripts/lib/search_cache.py../../skills/invest-a-stock/scripts/lib/shared_codes.py../../skills/invest-a-stock/scripts/lib/shared_dates.py../../skills/invest-a-stock/scripts/lib/stats.py../../skills/invest-a-stock/scripts/lib/store.py../../skills/invest-a-stock/scripts/lib/style_match.py../../skills/invest-a-stock/scripts/lib/technical.py../../skills/invest-a-stock/scripts/lib/trade_cal.py../../skills/invest-a-stock/scripts/lib/tushare_client.py../../skills/invest-a-stock/scripts/lib/valuation.py../../skills/invest-a-stock/scripts/lib/version.py../../skills/invest-a-stock/scripts/merge_collections.py../../skills/invest-a-stock/scripts/valuation_calc.py../../skills/invest-a-stock/tests/conftest.py../../skills/invest-a-stock/tests/fixtures/__init__.py../../skills/invest-a-stock/tests/fixtures/collections.py../../skills/invest-a-stock/tests/stock_testutil.py../../skills/invest-a-stock/tests/test_agent_facts.py../../skills/invest-a-stock/tests/test_analysis_schema.py../../skills/invest-a-stock/tests/test_analysis_templates.py../../skills/invest-a-stock/tests/test_atomic_json_contract.py../../skills/invest-a-stock/tests/test_attribution.py../../skills/invest-a-stock/tests/test_catalyst.py../../skills/invest-a-stock/tests/test_chain.py../../skills/invest-a-stock/tests/test_cli_dispatch.py../../skills/invest-a-stock/tests/test_cli_html.py../../skills/invest-a-stock/tests/test_climate.py../../skills/invest-a-stock/tests/test_collector.py../../skills/invest-a-stock/tests/test_collector_fixes.py../../skills/invest-a-stock/tests/test_collector_run_cache.py../../skills/invest-a-stock/tests/test_collector_zombie_cache.py../../skills/invest-a-stock/tests/test_cross_validation.py../../skills/invest-a-stock/tests/test_d3_sourcing_labels.py../../skills/invest-a-stock/tests/test_default_store.py../../skills/invest-a-stock/tests/test_disposition_hint.py../../skills/invest-a-stock/tests/test_entry_check_precision.py../../skills/invest-a-stock/tests/test_env.py../../skills/invest-a-stock/tests/test_events.py../../skills/invest-a-stock/tests/test_events_notice_types.py../../skills/invest-a-stock/tests/test_evidence.py../../skills/invest-a-stock/tests/test_fast_report_pipeline.py../../skills/invest-a-stock/tests/test_financial_rigor.py../../skills/invest-a-stock/tests/test_financials.py../../skills/invest-a-stock/tests/test_full_analysis_cli.py../../skills/invest-a-stock/tests/test_fusion.py../../skills/invest-a-stock/tests/test_futures_data.py../../skills/invest-a-stock/tests/test_html_charts.py../../skills/invest-a-stock/tests/test_industry_success_factors.py../../skills/invest-a-stock/tests/test_injection_shield.py../../skills/invest-a-stock/tests/test_insight_analysis_cli.py../../skills/invest-a-stock/tests/test_insight_discoveries_chains.py../../skills/invest-a-stock/tests/test_insight_report.py../../skills/invest-a-stock/tests/test_invest_cli_help.py../../skills/invest-a-stock/tests/test_lhb.py../../skills/invest-a-stock/tests/test_lint.py../../skills/invest-a-stock/tests/test_macro_extended.py../../skills/invest-a-stock/tests/test_manifest.py../../skills/invest-a-stock/tests/test_market_daily.py../../skills/invest-a-stock/tests/test_market_status_basis.py../../skills/invest-a-stock/tests/test_md_subset.py../../skills/invest-a-stock/tests/test_merge_collections.py../../skills/invest-a-stock/tests/test_news_scanner.py../../skills/invest-a-stock/tests/test_notice_body.py../../skills/invest-a-stock/tests/test_orchestrate_blocks.py../../skills/invest-a-stock/tests/test_parse_fetched_at_parity.py../../skills/invest-a-stock/tests/test_participant_scan.py../../skills/invest-a-stock/tests/test_pcr_freshness.py../../skills/invest-a-stock/tests/test_pe_loss_missing_consistency.py../../skills/invest-a-stock/tests/test_peer_cli.py../../skills/invest-a-stock/tests/test_peer_market_caps.py../../skills/invest-a-stock/tests/test_percentile_core_shared.py../../skills/invest-a-stock/tests/test_portfolio_review.py../../skills/invest-a-stock/tests/test_positions.py../../skills/invest-a-stock/tests/test_price_basis_label.py../../skills/invest-a-stock/tests/test_proxy.py../../skills/invest-a-stock/tests/test_qc_render_output_regression.py../../skills/invest-a-stock/tests/test_quality_check.py../../skills/invest-a-stock/tests/test_r12h.py../../skills/invest-a-stock/tests/test_redundancy_phase23.py../../skills/invest-a-stock/tests/test_render_code_review_fixes.py../../skills/invest-a-stock/tests/test_render_concise_fixes.py../../skills/invest-a-stock/tests/test_render_extras.py../../skills/invest-a-stock/tests/test_render_html.py../../skills/invest-a-stock/tests/test_render_v2.py../../skills/invest-a-stock/tests/test_report_audit.py../../skills/invest-a-stock/tests/test_report_diff_history.py../../skills/invest-a-stock/tests/test_report_filepath.py../../skills/invest-a-stock/tests/test_report_qc_gates.py../../skills/invest-a-stock/tests/test_report_snapshot.py../../skills/invest-a-stock/tests/test_rerank.py../../skills/invest-a-stock/tests/test_research.py../../skills/invest-a-stock/tests/test_research_profile.py../../skills/invest-a-stock/tests/test_risk_reward.py../../skills/invest-a-stock/tests/test_risk_scanner.py../../skills/invest-a-stock/tests/test_schema.py../../skills/invest-a-stock/tests/test_search_cache.py../../skills/invest-a-stock/tests/test_sector_sync_collector.py../../skills/invest-a-stock/tests/test_segments_collector.py../../skills/invest-a-stock/tests/test_store_diff.py../../skills/invest-a-stock/tests/test_store_pipeline.py../../skills/invest-a-stock/tests/test_store_public_connection.py../../skills/invest-a-stock/tests/test_style_match.py../../skills/invest-a-stock/tests/test_sw_member_all.py../../skills/invest-a-stock/tests/test_technical.py../../skills/invest-a-stock/tests/test_technical_v019.py../../skills/invest-a-stock/tests/test_test_hygiene.py../../skills/invest-a-stock/tests/test_thesis_dates.py../../skills/invest-a-stock/tests/test_tushare_client.py../../skills/invest-a-stock/tests/test_v013_phase1.py../../skills/invest-a-stock/tests/test_v013_phase2.py../../skills/invest-a-stock/tests/test_v013_phase3.py../../skills/invest-a-stock/tests/test_v013_phase4.py../../skills/invest-a-stock/tests/test_v014.py../../skills/invest-a-stock/tests/test_v015_fixes.py../../skills/invest-a-stock/tests/test_v017.py../../skills/invest-a-stock/tests/test_v017_e2e.py../../skills/invest-a-stock/tests/test_v018.py../../skills/invest-a-stock/tests/test_v026_p0_fixes.py../../skills/invest-a-stock/tests/test_v026_review_fixes.py../../skills/invest-a-stock/tests/test_v027_fixes.py../../skills/invest-a-stock/tests/test_v028_fixes.py../../skills/invest-a-stock/tests/test_v030_reading_layers.py../../skills/invest-a-stock/tests/test_v031_c1_fin_series.py../../skills/invest-a-stock/tests/test_v031_c2_rf.py../../skills/invest-a-stock/tests/test_v031_c3_bank_leverage.py../../skills/invest-a-stock/tests/test_v031_mainline_rev.py../../skills/invest-a-stock/tests/test_v031_priority_review.py../../skills/invest-a-stock/tests/test_v031_reading_surface.py../../skills/invest-a-stock/tests/test_valuation.py../../skills/invest-a-stock/tests/test_version.py../../skills/invest-a-stock/tests/test_version_sync.py../../skills/invest-hk-stock/scripts/hk.py../../skills/invest-hk-stock/scripts/lib/__init__.py../../skills/invest-hk-stock/scripts/lib/_invest_path.py../../skills/invest-hk-stock/scripts/lib/hk_ah.py../../skills/invest-hk-stock/scripts/lib/hk_calendar.py../../skills/invest-hk-stock/scripts/lib/hk_codes.py../../skills/invest-hk-stock/scripts/lib/hk_compare.py../../skills/invest-hk-stock/scripts/lib/hk_financials.py../../skills/invest-hk-stock/scripts/lib/hk_kline.py../../skills/invest-hk-stock/scripts/lib/hk_quote.py../../skills/invest-hk-stock/scripts/lib/hk_southbound.py../../skills/invest-hk-stock/scripts/lib/hk_tushare.py../../skills/invest-hk-stock/scripts/lib/hk_valuation.py../../skills/invest-hk-stock/scripts/lib/hk_yfinance.py../../skills/invest-hk-stock/tests/_hk_cli.py../../skills/invest-hk-stock/tests/conftest.py../../skills/invest-hk-stock/tests/test_hk_ah.py../../skills/invest-hk-stock/tests/test_hk_ah_align.py../../skills/invest-hk-stock/tests/test_hk_calendar.py../../skills/invest-hk-stock/tests/test_hk_codes.py../../skills/invest-hk-stock/tests/test_hk_compare.py../../skills/invest-hk-stock/tests/test_hk_data.py../../skills/invest-hk-stock/tests/test_hk_quote.py../../skills/invest-hk-stock/tests/test_hk_southbound.py../../skills/lib/__init__.py../../skills/lib/backtest.py../../skills/lib/cache.py../../skills/lib/codes.py../../skills/lib/config_backtest.py../../skills/lib/data_bridge.py../../skills/lib/data_util.py../../skills/lib/dates.py../../skills/lib/db_util.py../../skills/lib/decision_review.py../../skills/lib/decision_schema.py../../skills/lib/env.py../../skills/lib/evidence_tags.py../../skills/lib/freshness.py../../skills/lib/invest_path.py../../skills/lib/kline_cache.py../../skills/lib/lmw.py../../skills/lib/logutil.py../../skills/lib/market_microstructure.py../../skills/lib/market_pctile.py../../skills/lib/market_pulse.py../../skills/lib/multiple_testing.py../../skills/lib/nums.py../../skills/lib/proxy.py../../skills/lib/qfq.py../../skills/lib/quote_tencent.py../../skills/lib/report_qc.py../../skills/lib/sector_sync.py../../skills/lib/skill_paths.py../../skills/lib/snapshot_core.py../../skills/lib/stats.py../../skills/lib/technical.py../../skills/lib/tests/test_b06_qc_record.py../../skills/lib/tests/test_backtest.py../../skills/lib/tests/test_backtest_futures_fixes.py../../skills/lib/tests/test_build_skillhub_packages.py../../skills/lib/tests/test_cache.py../../skills/lib/tests/test_codes.py../../skills/lib/tests/test_config_backtest.py../../skills/lib/tests/test_data_bridge.py../../skills/lib/tests/test_data_util.py../../skills/lib/tests/test_dates.py../../skills/lib/tests/test_db_util.py../../skills/lib/tests/test_decision_review.py../../skills/lib/tests/test_decision_schema.py../../skills/lib/tests/test_dev_log_wiring.py../../skills/lib/tests/test_dist_doc_refs.py../../skills/lib/tests/test_h6_events.py../../skills/lib/tests/test_hypothesis_registry.py../../skills/lib/tests/test_invest_path_shims.py../../skills/lib/tests/test_kline_cache.py../../skills/lib/tests/test_law_contract_v031.py../../skills/lib/tests/test_lib_version.py../../skills/lib/tests/test_lmw.py../../skills/lib/tests/test_logutil.py../../skills/lib/tests/test_market_pctile.py../../skills/lib/tests/test_market_pulse.py../../skills/lib/tests/test_market_service_owner.py../../skills/lib/tests/test_multiple_testing.py../../skills/lib/tests/test_qfq.py../../skills/lib/tests/test_qfq_contract.py../../skills/lib/tests/test_quote_tencent.py../../skills/lib/tests/test_r1_sourcing_layer.py../../skills/lib/tests/test_r2_module_identity.py../../skills/lib/tests/test_report_qc.py../../skills/lib/tests/test_scenario_triggers.py../../skills/lib/tests/test_sector_sync.py../../skills/lib/tests/test_shared_owner_migration.py../../skills/lib/tests/test_skill_paths.py../../skills/lib/tests/test_snapshot_core.py../../skills/lib/tests/test_stats.py../../skills/lib/tests/test_technical_adx.py../../skills/lib/tests/test_trade_cal.py../../skills/lib/tests/test_unlock_source.py../../skills/lib/tests/test_v025_doc_checks.py../../skills/lib/tests/test_v026_doc_checks.py../../skills/lib/tests/test_v030_doc_checks.py../../skills/lib/tests/test_v031_evidence_tags.py../../skills/lib/tests/test_volume_price.py../../skills/lib/tests/test_zt_rotation_bundle.py../../skills/lib/trade_cal.py../../skills/lib/tushare_client.py../../skills/lib/unlock_source.py../../skills/lib/version.py../../skills/lib/volume_price.py
Files
../../.claude-plugin/marketplace.jsonasset5,169 bytes../../.claude-plugin/marketplace.json.inasset5,233 bytes../../.claude-plugin/plugin.jsonasset776 bytes../../.claude-plugin/plugin.json.inasset784 bytes../../hooks/hooks.jsonasset279 bytes../../hooks/hooks.jsonasset279 bytesREADME-安装.mddoc3,552 bytesSKILL.mdcore3,831 bytesSKILL.mdcore3,831 bytesSKILL.mdcore3,831 bytesbootstrap.shruns3,176 bytes../../skills/invest-a-discover-scan/SKILL.mddoc6,449 bytes../../skills/invest-a-discover-scan/references/rules.mddoc4,910 bytes../../skills/invest-a-discover-scan/references/sources.mddoc6,324 bytes../../skills/invest-a-discover-scan/scripts/discover_fillback.pyruns1,212 bytes../../skills/invest-a-discover-scan/scripts/discover_scan.pyruns37,401 bytes../../skills/invest-a-discover-scan/scripts/lib/__init__.pyruns288 bytes../../skills/invest-a-discover-scan/scripts/lib/_invest_path.pyruns962 bytes../../skills/invest-a-discover-scan/scripts/lib/lenses.pyruns9,617 bytes../../skills/invest-a-discover-scan/scripts/lib/pool.pyruns2,554 bytes../../skills/invest-a-discover-scan/scripts/lib/quality.pyruns6,146 bytes../../skills/invest-a-discover-scan/scripts/lib/snapshot.pyruns4,847 bytes../../skills/invest-a-discover-scan/scripts/lib/sources.pyruns17,846 bytes../../skills/invest-a-discover-scan/scripts/lib/sources_hk.pyruns14,102 bytes../../skills/invest-a-discover-scan/tests/_scan_cli.pyruns957 bytes../../skills/invest-a-discover-scan/tests/conftest.pyruns683 bytes../../skills/invest-a-discover-scan/tests/test_cli.pyruns37,725 bytes../../skills/invest-a-discover-scan/tests/test_discover_pool.pyruns2,894 bytes../../skills/invest-a-discover-scan/tests/test_lenses.pyruns9,538 bytes../../skills/invest-a-discover-scan/tests/test_quality.pyruns4,925 bytes../../skills/invest-a-discover-scan/tests/test_snapshot.pyruns4,537 bytes../../skills/invest-a-discover-scan/tests/test_sources.pyruns7,006 bytes../../skills/invest-a-discover-scan/tests/test_sources_hk.pyruns8,172 bytes../../skills/invest-a-etf/SKILL.mddoc53,939 bytes../../skills/invest-a-etf/events/512660.jsonasset1,827 bytes../../skills/invest-a-etf/events/562590.jsonasset4,224 bytes../../skills/invest-a-etf/events/588000.jsonasset3,807 bytes../../skills/invest-a-etf/events/README.mddoc1,481 bytes../../skills/invest-a-etf/references/etf-hedge-map.mddoc5,607 bytes../../skills/invest-a-etf/references/operating-research.mddoc4,996 bytes../../skills/invest-a-etf/references/report-template.mddoc15,683 bytes../../skills/invest-a-etf/scripts/__init__.pyruns0 bytes../../skills/invest-a-etf/scripts/etf.pyruns76,716 bytes../../skills/invest-a-etf/scripts/lib/__init__.pyruns0 bytes../../skills/invest-a-etf/scripts/lib/_invest_path.pyruns510 bytes../../skills/invest-a-etf/scripts/lib/assets/chart.umd.min.jsruns205,222 bytes../../skills/invest-a-etf/scripts/lib/etf_data.pyruns301,481 bytes../../skills/invest-a-etf/scripts/lib/etf_generation.pyruns11,548 bytes../../skills/invest-a-etf/scripts/lib/etf_html.pyruns89,595 bytes../../skills/invest-a-etf/scripts/lib/etf_md.pyruns14,878 bytes../../skills/invest-a-etf/scripts/lib/etf_peers.pyruns27,790 bytes../../skills/invest-a-etf/scripts/lib/etf_playbook.pyruns6,317 bytes../../skills/invest-a-etf/scripts/lib/etf_research.pyruns27,694 bytes../../skills/invest-a-etf/scripts/lib/etf_timeline.pyruns8,643 bytes../../skills/invest-a-etf/scripts/lib/futures_basis.pyruns6,286 bytes../../skills/invest-a-etf/scripts/lib/index_pe_snapshot.pyruns8,637 bytes../../skills/invest-a-etf/scripts/lib/industry_snapshot.pyruns9,764 bytes../../skills/invest-a-etf/scripts/lib/sector_flow.pyruns33,995 bytes../../skills/invest-a-etf/tests/conftest.pyruns2,485 bytes../../skills/invest-a-etf/tests/fixtures/159920_history_247.jsonasset11,590 bytes../../skills/invest-a-etf/tests/fixtures/md_skeleton.mddoc4,303 bytes../../skills/invest-a-etf/tests/test_etf_159920_disclosure.pyruns8,272 bytes../../skills/invest-a-etf/tests/test_etf_boll_bandwidth.pyruns3,879 bytes../../skills/invest-a-etf/tests/test_etf_cache_fixes.pyruns17,908 bytes../../skills/invest-a-etf/tests/test_etf_cli.pyruns45,963 bytes../../skills/invest-a-etf/tests/test_etf_data_status.pyruns38,537 bytes../../skills/invest-a-etf/tests/test_etf_decision.pyruns8,884 bytes../../skills/invest-a-etf/tests/test_etf_exposure.pyruns13,374 bytes../../skills/invest-a-etf/tests/test_etf_flags.pyruns5,774 bytes../../skills/invest-a-etf/tests/test_etf_generation.pyruns11,308 bytes../../skills/invest-a-etf/tests/test_etf_holdings.pyruns16,411 bytes../../skills/invest-a-etf/tests/test_etf_html.pyruns53,513 bytes../../skills/invest-a-etf/tests/test_etf_identity.pyruns16,355 bytes../../skills/invest-a-etf/tests/test_etf_index_pe.pyruns16,576 bytes../../skills/invest-a-etf/tests/test_etf_kline.pyruns7,005 bytes../../skills/invest-a-etf/tests/test_etf_map.pyruns3,209 bytes../../skills/invest-a-etf/tests/test_etf_md.pyruns6,913 bytes../../skills/invest-a-etf/tests/test_etf_peers.pyruns13,993 bytes../../skills/invest-a-etf/tests/test_etf_playbook.pyruns8,185 bytes../../skills/invest-a-etf/tests/test_etf_same_index_evidence.pyruns14,702 bytes../../skills/invest-a-etf/tests/test_etf_scale_semantics.pyruns4,903 bytes../../skills/invest-a-etf/tests/test_etf_share_flow.pyruns9,305 bytes../../skills/invest-a-etf/tests/test_etf_share_split.pyruns8,510 bytes../../skills/invest-a-etf/tests/test_etf_share_window.pyruns8,053 bytes../../skills/invest-a-etf/tests/test_etf_spot_cache.pyruns4,783 bytes../../skills/invest-a-etf/tests/test_etf_timeline.pyruns21,387 bytes../../skills/invest-a-etf/tests/test_etf_tracking.pyruns45,583 bytes../../skills/invest-a-etf/tests/test_etf_tradability.pyruns4,575 bytes../../skills/invest-a-etf/tests/test_etf_valuation_guide.pyruns1,640 bytes../../skills/invest-a-etf/tests/test_futures_basis.pyruns4,664 bytes../../skills/invest-a-etf/tests/test_index_pe_snapshot.pyruns16,535 bytes../../skills/invest-a-etf/tests/test_operating_research.pyruns16,432 bytes../../skills/invest-a-etf/tests/test_r1_staleness.pyruns14,650 bytes../../skills/invest-a-etf/tests/test_sector_flow.pyruns31,330 bytes../../skills/invest-a-etf/tests/test_v026_p1_fixes.pyruns9,935 bytes../../skills/invest-a-event-calendar/README.mddoc16,117 bytes../../skills/invest-a-event-calendar/references/fomc_meetings.yamlasset2,985 bytes../../skills/invest-a-event-calendar/references/macro_sources.yamlasset8,253 bytes../../skills/invest-a-event-calendar/references/political_calendar.yamlasset1,625 bytes../../skills/invest-a-event-calendar/scripts/__init__.pyruns0 bytes../../skills/invest-a-event-calendar/scripts/macro_calendar.pyruns41,421 bytes../../skills/invest-a-event-calendar/scripts/theme_calendar.pyruns23,615 bytes../../skills/invest-a-event-calendar/scripts/unlock_calendar.pyruns53,349 bytes../../skills/invest-a-event-calendar/tests/test_calendar.pyruns10,168 bytes../../skills/invest-a-event-calendar/tests/test_macro_calendar.pyruns44,127 bytes../../skills/invest-a-event-calendar/tests/test_macro_cli.pyruns18,155 bytes../../skills/invest-a-event-calendar/tests/test_pool.pyruns23,646 bytes../../skills/invest-a-event-calendar/tests/test_theme_calendar.pyruns21,126 bytes../../skills/invest-a-gap-scan/SKILL.mddoc24,606 bytes../../skills/invest-a-gap-scan/scripts/__init__.pyruns0 bytes../../skills/invest-a-gap-scan/scripts/eval_forward.pyruns12,859 bytes../../skills/invest-a-gap-scan/scripts/lib/__init__.pyruns0 bytes../../skills/invest-a-gap-scan/scripts/lib/_invest_path.pyruns510 bytes../../skills/invest-a-gap-scan/scripts/lib/gap_scanner.pyruns33,778 bytes../../skills/invest-a-gap-scan/scripts/lib/kline_source.pyruns27,718 bytes../../skills/invest-a-gap-scan/scripts/lib/qfq.pyruns1,489 bytes../../skills/invest-a-gap-scan/scripts/lib/report_formatter.pyruns29,514 bytes../../skills/invest-a-gap-scan/scripts/lib/skip_reasons.pyruns1,265 bytes../../skills/invest-a-gap-scan/scripts/lib/suspension.pyruns4,916 bytes../../skills/invest-a-gap-scan/scripts/lib/universe.pyruns22,307 bytes../../skills/invest-a-gap-scan/scripts/record_hits.pyruns5,672 bytes../../skills/invest-a-gap-scan/scripts/scan.pyruns26,044 bytes../../skills/invest-a-gap-scan/tests/__init__.pyruns0 bytes../../skills/invest-a-gap-scan/tests/conftest.pyruns249 bytes../../skills/invest-a-gap-scan/tests/test_backtest_eval.pyruns2,919 bytes../../skills/invest-a-gap-scan/tests/test_create_source.pyruns7,129 bytes../../skills/invest-a-gap-scan/tests/test_gap_scanner.pyruns53,679 bytes../../skills/invest-a-gap-scan/tests/test_kline_group.pyruns2,059 bytes../../skills/invest-a-gap-scan/tests/test_qfq.pyruns16,219 bytes../../skills/invest-a-gap-scan/tests/test_report_smoke.pyruns31,896 bytes../../skills/invest-a-gap-scan/tests/test_suspension.pyruns13,988 bytes../../skills/invest-a-gap-scan/tests/test_universe.pyruns5,127 bytes../../skills/invest-a-journal/SKILL.mddoc39,676 bytes../../skills/invest-a-journal/references/etf-hedge-map.mddoc328 bytes../../skills/invest-a-journal/references/evaluation-criteria.mddoc8,574 bytes../../skills/invest-a-journal/scripts/journal.pyruns13,644 bytes../../skills/invest-a-journal/scripts/lib/__init__.pyruns0 bytes../../skills/invest-a-journal/scripts/lib/_invest_path.pyruns510 bytes../../skills/invest-a-journal/scripts/lib/db.pyruns25,167 bytes../../skills/invest-a-journal/scripts/lib/etf_data.pyruns9,248 bytes../../skills/invest-a-journal/scripts/lib/market_microstructure.pyruns1,420 bytes../../skills/invest-a-journal/scripts/lib/query_data.pyruns22,560 bytes../../skills/invest-a-journal/tests/conftest.pyruns5,764 bytes../../skills/invest-a-journal/tests/test_chip_clearance.pyruns21,314 bytes../../skills/invest-a-journal/tests/test_compute_technical_stock.pyruns1,564 bytes../../skills/invest-a-journal/tests/test_db_rollback.pyruns1,109 bytes../../skills/invest-a-journal/tests/test_env_guardrail.pyruns5,603 bytes../../skills/invest-a-journal/tests/test_etf_shim.pyruns12,504 bytes../../skills/invest-a-journal/tests/test_futures_basis_freshness.pyruns19,579 bytes../../skills/invest-a-journal/tests/test_inaction_watch_show.pyruns2,801 bytes../../skills/invest-a-journal/tests/test_journal_module_loader.pyruns5,862 bytes../../skills/invest-a-journal/tests/test_journal_v026.pyruns3,950 bytes../../skills/invest-a-journal/tests/test_labels_v2.pyruns3,158 bytes../../skills/invest-a-journal/tests/test_macro_snapshot.pyruns5,980 bytes../../skills/invest-a-journal/tests/test_market_form.pyruns15,959 bytes../../skills/invest-a-journal/tests/test_microstructure_via_bridge.pyruns1,946 bytes../../skills/invest-a-journal/tests/test_position_nav.pyruns7,572 bytes../../skills/invest-a-journal/tests/test_query_data_etf.pyruns4,896 bytes../../skills/invest-a-journal/tests/test_query_helpers.pyruns1,487 bytes../../skills/invest-a-journal/tests/test_safe_collect_ordering.pyruns7,907 bytes../../skills/invest-a-journal/tests/test_sell_link.pyruns6,595 bytes../../skills/invest-a-journal/tests/test_session_date_fields.pyruns2,779 bytes../../skills/invest-a-journal/tests/test_snapshot_status.pyruns3,645 bytes../../skills/invest-a-journal/tests/test_store_isolation.pyruns9,720 bytes../../skills/invest-a-journal/tests/test_szse_turnover.pyruns2,939 bytes../../skills/invest-a-journal/tests/test_v027_csindex_noise.pyruns4,488 bytes../../skills/invest-a-journal/tests/test_wrong_frequency.pyruns6,074 bytes../../skills/invest-a-journal/tests/test_zt_seesaw.pyruns4,491 bytes../../skills/invest-a-pattern-scan/SKILL.mddoc5,322 bytes../../skills/invest-a-pattern-scan/scripts/lib/_invest_path.pyruns734 bytes../../skills/invest-a-pattern-scan/scripts/lib/feature_patterns.pyruns16,088 bytes../../skills/invest-a-pattern-scan/scripts/lib/kline_source.pyruns399 bytes../../skills/invest-a-pattern-scan/scripts/lib/pattern_scanner.pyruns9,316 bytes../../skills/invest-a-pattern-scan/scripts/lib/universe.pyruns391 bytes../../skills/invest-a-pattern-scan/scripts/scan.pyruns4,778 bytes../../skills/invest-a-pattern-scan/tests/test_feature_patterns.pyruns17,551 bytes../../skills/invest-a-pattern-scan/tests/test_scanner_smoke.pyruns9,216 bytes../../skills/invest-a-pulse/SKILL.mddoc32,432 bytes../../skills/invest-a-stock/SKILL.mddoc58,986 bytes../../skills/invest-a-stock/references/agent-prompts.mddoc25,521 bytes../../skills/invest-a-stock/references/deep-sop.mddoc6,715 bytes../../skills/invest-a-stock/references/financials.mddoc7,694 bytes../../skills/invest-a-stock/references/game-theory.mddoc3,384 bytes../../skills/invest-a-stock/references/ic-framework.mddoc5,766 bytes../../skills/invest-a-stock/references/modules.mddoc4,265 bytes../../skills/invest-a-stock/references/references-format.mddoc2,128 bytes../../skills/invest-a-stock/references/sentiment.mddoc2,900 bytes../../skills/invest-a-stock/references/source-guide.mddoc11,185 bytes../../skills/invest-a-stock/references/trade-structure.mddoc5,345 bytes../../skills/invest-a-stock/scripts/agent_facts.pyruns23,061 bytes../../skills/invest-a-stock/scripts/check_report.shruns1,456 bytes../../skills/invest-a-stock/scripts/invest.pyruns158,641 bytes../../skills/invest-a-stock/scripts/lib/__init__.pyruns62 bytes../../skills/invest-a-stock/scripts/lib/_invest_path.pyruns510 bytes../../skills/invest-a-stock/scripts/lib/analysis_schema.pyruns28,974 bytes../../skills/invest-a-stock/scripts/lib/analysis_status.pyruns1,986 bytes../../skills/invest-a-stock/scripts/lib/analysis_templates.pyruns18,609 bytes../../skills/invest-a-stock/scripts/lib/archiver.pyruns1,559 bytes../../skills/invest-a-stock/scripts/lib/assets/echarts.umd.min.jsruns1,121,883 bytes../../skills/invest-a-stock/scripts/lib/attribution.pyruns2,207 bytes../../skills/invest-a-stock/scripts/lib/catalyst.pyruns15,646 bytes../../skills/invest-a-stock/scripts/lib/chain.pyruns7,792 bytes../../skills/invest-a-stock/scripts/lib/climate.pyruns17,655 bytes../../skills/invest-a-stock/scripts/lib/collector/__init__.pyruns614 bytes../../skills/invest-a-stock/scripts/lib/collector/_base.pyruns16,931 bytes../../skills/invest-a-stock/scripts/lib/collector/_kline_cache.pyruns3,191 bytes../../skills/invest-a-stock/scripts/lib/collector/_legacy.pyruns2,872 bytes../../skills/invest-a-stock/scripts/lib/collector/_orchestrate.pyruns208,527 bytes../../skills/invest-a-stock/scripts/lib/collector/_sources.pyruns56,613 bytes../../skills/invest-a-stock/scripts/lib/data_util.pyruns278 bytes../../skills/invest-a-stock/scripts/lib/db_util.pyruns401 bytes../../skills/invest-a-stock/scripts/lib/env.pyruns895 bytes../../skills/invest-a-stock/scripts/lib/events.pyruns36,871 bytes../../skills/invest-a-stock/scripts/lib/evidence.pyruns5,744 bytes../../skills/invest-a-stock/scripts/lib/financial_rigor.pyruns16,506 bytes../../skills/invest-a-stock/scripts/lib/financials.pyruns14,368 bytes../../skills/invest-a-stock/scripts/lib/fusion.pyruns10,045 bytes../../skills/invest-a-stock/scripts/lib/futures_data.pyruns14,478 bytes../../skills/invest-a-stock/scripts/lib/html_charts.pyruns30,985 bytes../../skills/invest-a-stock/scripts/lib/income_driver.pyruns16,788 bytes../../skills/invest-a-stock/scripts/lib/industry/__init__.pyruns1,154 bytes../../skills/invest-a-stock/scripts/lib/industry/banks.pyruns7,661 bytes../../skills/invest-a-stock/scripts/lib/industry/base.pyruns7,041 bytes../../skills/invest-a-stock/scripts/lib/industry/tech_hardware.pyruns7,714 bytes../../skills/invest-a-stock/scripts/lib/insight_model.pyruns55,289 bytes../../skills/invest-a-stock/scripts/lib/json_util.pyruns3,851 bytes../../skills/invest-a-stock/scripts/lib/kline_cache.pyruns264 bytes../../skills/invest-a-stock/scripts/lib/lhb.pyruns9,895 bytes../../skills/invest-a-stock/scripts/lib/lint.pyruns18,755 bytes../../skills/invest-a-stock/scripts/lib/macro.pyruns63,498 bytes../../skills/invest-a-stock/scripts/lib/manifest.pyruns10,287 bytes../../skills/invest-a-stock/scripts/lib/market_daily.pyruns5,305 bytes../../skills/invest-a-stock/scripts/lib/market_pulse.pyruns278 bytes../../skills/invest-a-stock/scripts/lib/md_subset.pyruns10,174 bytes../../skills/invest-a-stock/scripts/lib/news_scanner.pyruns7,375 bytes../../skills/invest-a-stock/scripts/lib/notice_body.pyruns8,093 bytes../../skills/invest-a-stock/scripts/lib/nums.pyruns403 bytes../../skills/invest-a-stock/scripts/lib/participant_scan.pyruns12,368 bytes../../skills/invest-a-stock/scripts/lib/planner.pyruns8,004 bytes../../skills/invest-a-stock/scripts/lib/portfolio_review.pyruns9,458 bytes../../skills/invest-a-stock/scripts/lib/positions.pyruns15,598 bytes../../skills/invest-a-stock/scripts/lib/proxy.pyruns893 bytes../../skills/invest-a-stock/scripts/lib/qfq.pyruns272 bytes../../skills/invest-a-stock/scripts/lib/quality_check.pyruns13,656 bytes../../skills/invest-a-stock/scripts/lib/render.pyruns3,047 bytes../../skills/invest-a-stock/scripts/lib/render_dcf.pyruns36,630 bytes../../skills/invest-a-stock/scripts/lib/render_extras.pyruns2,192 bytes../../skills/invest-a-stock/scripts/lib/render_html.pyruns87,452 bytes../../skills/invest-a-stock/scripts/lib/render_icons.pyruns1,003 bytes../../skills/invest-a-stock/scripts/lib/render_insight.pyruns24,854 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/__init__.pyruns532 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/_base.pyruns32,417 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/_concise.pyruns44,519 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/_legacy.pyruns484 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/_v2.pyruns27,911 bytes../../skills/invest-a-stock/scripts/lib/render_markdown/_v3.pyruns228,363 bytes../../skills/invest-a-stock/scripts/lib/render_risk.pyruns68,643 bytes../../skills/invest-a-stock/scripts/lib/render_utils.pyruns31,832 bytes../../skills/invest-a-stock/scripts/lib/report_audit.pyruns5,068 bytes../../skills/invest-a-stock/scripts/lib/report_snapshot.pyruns16,087 bytes../../skills/invest-a-stock/scripts/lib/rerank.pyruns4,806 bytes../../skills/invest-a-stock/scripts/lib/research_profile.pyruns14,766 bytes../../skills/invest-a-stock/scripts/lib/risk_reward.pyruns13,957 bytes../../skills/invest-a-stock/scripts/lib/risk_scanner.pyruns23,167 bytes../../skills/invest-a-stock/scripts/lib/schema.pyruns20,734 bytes../../skills/invest-a-stock/scripts/lib/scoring.pyruns29,049 bytes../../skills/invest-a-stock/scripts/lib/search_cache.pyruns6,425 bytes../../skills/invest-a-stock/scripts/lib/shared_codes.pyruns697 bytes../../skills/invest-a-stock/scripts/lib/shared_dates.pyruns1,721 bytes../../skills/invest-a-stock/scripts/lib/stats.pyruns364 bytes../../skills/invest-a-stock/scripts/lib/store.pyruns66,255 bytes../../skills/invest-a-stock/scripts/lib/style_match.pyruns7,658 bytes../../skills/invest-a-stock/scripts/lib/technical.pyruns321 bytes../../skills/invest-a-stock/scripts/lib/trade_cal.pyruns1,126 bytes../../skills/invest-a-stock/scripts/lib/tushare_client.pyruns873 bytes../../skills/invest-a-stock/scripts/lib/valuation.pyruns49,630 bytes../../skills/invest-a-stock/scripts/lib/version.pyruns262 bytes../../skills/invest-a-stock/scripts/merge_collections.pyruns18,410 bytes../../skills/invest-a-stock/scripts/references/compliance_rules.yamlasset47,844 bytes../../skills/invest-a-stock/scripts/references/compliance_rules.yamlasset47,844 bytes../../skills/invest-a-stock/scripts/references/compliance_rules.yamlasset47,844 bytes../../skills/invest-a-stock/scripts/references/compliance_rules.yamlasset47,844 bytes../../skills/invest-a-stock/scripts/references/event_type_taxonomy.yamlasset4,155 bytes../../skills/invest-a-stock/scripts/valuation_calc.pyruns84,754 bytes../../skills/invest-a-stock/tests/conftest.pyruns2,485 bytes../../skills/invest-a-stock/tests/fixtures/__init__.pyruns34 bytes../../skills/invest-a-stock/tests/fixtures/collections.pyruns4,462 bytes../../skills/invest-a-stock/tests/fixtures/v0.2.4/588000_nav_history.jsonasset22,270 bytes../../skills/invest-a-stock/tests/fixtures/v0.2.4/classify_inputs.jsonasset115,592 bytes../../skills/invest-a-stock/tests/fixtures/v0.2.4/limit_up_trigger_kline.jsonasset4,269 bytes../../skills/invest-a-stock/tests/fixtures/v0.2.4/woge_limit_streak_kline.jsonasset3,999 bytes../../skills/invest-a-stock/tests/fixtures/v0.2.9/catl_2021_2023_snapshot.jsonasset833 bytes../../skills/invest-a-stock/tests/stock_testutil.pyruns1,821 bytes../../skills/invest-a-stock/tests/test_agent_facts.pyruns15,726 bytes../../skills/invest-a-stock/tests/test_analysis_schema.pyruns24,827 bytes../../skills/invest-a-stock/tests/test_analysis_templates.pyruns28,401 bytes../../skills/invest-a-stock/tests/test_atomic_json_contract.pyruns4,754 bytes../../skills/invest-a-stock/tests/test_attribution.pyruns3,132 bytes../../skills/invest-a-stock/tests/test_catalyst.pyruns8,854 bytes../../skills/invest-a-stock/tests/test_chain.pyruns3,909 bytes../../skills/invest-a-stock/tests/test_cli_dispatch.pyruns13,153 bytes../../skills/invest-a-stock/tests/test_cli_html.pyruns1,495 bytes../../skills/invest-a-stock/tests/test_climate.pyruns16,210 bytes../../skills/invest-a-stock/tests/test_collector.pyruns22,453 bytes../../skills/invest-a-stock/tests/test_collector_fixes.pyruns68,898 bytes../../skills/invest-a-stock/tests/test_collector_run_cache.pyruns10,871 bytes../../skills/invest-a-stock/tests/test_collector_zombie_cache.pyruns2,659 bytes../../skills/invest-a-stock/tests/test_cross_validation.pyruns8,258 bytes../../skills/invest-a-stock/tests/test_d3_sourcing_labels.pyruns5,138 bytes../../skills/invest-a-stock/tests/test_default_store.pyruns33,569 bytes../../skills/invest-a-stock/tests/test_disposition_hint.pyruns6,368 bytes../../skills/invest-a-stock/tests/test_entry_check_precision.pyruns6,376 bytes../../skills/invest-a-stock/tests/test_env.pyruns6,335 bytes../../skills/invest-a-stock/tests/test_events.pyruns41,787 bytes../../skills/invest-a-stock/tests/test_events_notice_types.pyruns9,233 bytes../../skills/invest-a-stock/tests/test_evidence.pyruns4,874 bytes../../skills/invest-a-stock/tests/test_fast_report_pipeline.pyruns8,484 bytes../../skills/invest-a-stock/tests/test_financial_rigor.pyruns3,926 bytes../../skills/invest-a-stock/tests/test_financials.pyruns19,081 bytes../../skills/invest-a-stock/tests/test_full_analysis_cli.pyruns4,964 bytes../../skills/invest-a-stock/tests/test_fusion.pyruns25,940 bytes../../skills/invest-a-stock/tests/test_futures_data.pyruns14,264 bytes../../skills/invest-a-stock/tests/test_html_charts.pyruns20,715 bytes../../skills/invest-a-stock/tests/test_industry_success_factors.pyruns8,170 bytes../../skills/invest-a-stock/tests/test_injection_shield.pyruns3,663 bytes../../skills/invest-a-stock/tests/test_insight_analysis_cli.pyruns12,534 bytes../../skills/invest-a-stock/tests/test_insight_discoveries_chains.pyruns33,106 bytes../../skills/invest-a-stock/tests/test_insight_report.pyruns22,033 bytes../../skills/invest-a-stock/tests/test_invest_cli_help.pyruns1,000 bytes../../skills/invest-a-stock/tests/test_lhb.pyruns17,731 bytes../../skills/invest-a-stock/tests/test_lint.pyruns43,670 bytes../../skills/invest-a-stock/tests/test_macro_extended.pyruns43,280 bytes../../skills/invest-a-stock/tests/test_manifest.pyruns4,000 bytes../../skills/invest-a-stock/tests/test_market_daily.pyruns2,288 bytes../../skills/invest-a-stock/tests/test_market_status_basis.pyruns5,014 bytes../../skills/invest-a-stock/tests/test_md_subset.pyruns2,962 bytes../../skills/invest-a-stock/tests/test_merge_collections.pyruns12,271 bytes../../skills/invest-a-stock/tests/test_news_scanner.pyruns5,463 bytes../../skills/invest-a-stock/tests/test_notice_body.pyruns9,215 bytes../../skills/invest-a-stock/tests/test_orchestrate_blocks.pyruns12,803 bytes../../skills/invest-a-stock/tests/test_parse_fetched_at_parity.pyruns1,517 bytes../../skills/invest-a-stock/tests/test_participant_scan.pyruns8,679 bytes../../skills/invest-a-stock/tests/test_pcr_freshness.pyruns31,015 bytes../../skills/invest-a-stock/tests/test_pe_loss_missing_consistency.pyruns9,784 bytes../../skills/invest-a-stock/tests/test_peer_cli.pyruns2,310 bytes../../skills/invest-a-stock/tests/test_peer_market_caps.pyruns4,147 bytes../../skills/invest-a-stock/tests/test_percentile_core_shared.pyruns2,475 bytes../../skills/invest-a-stock/tests/test_portfolio_review.pyruns13,147 bytes../../skills/invest-a-stock/tests/test_positions.pyruns13,105 bytes../../skills/invest-a-stock/tests/test_price_basis_label.pyruns6,234 bytes../../skills/invest-a-stock/tests/test_proxy.pyruns14,806 bytes../../skills/invest-a-stock/tests/test_qc_render_output_regression.pyruns17,464 bytes../../skills/invest-a-stock/tests/test_quality_check.pyruns7,094 bytes../../skills/invest-a-stock/tests/test_r12h.pyruns23,044 bytes../../skills/invest-a-stock/tests/test_redundancy_phase23.pyruns7,022 bytes../../skills/invest-a-stock/tests/test_render_code_review_fixes.pyruns31,079 bytes../../skills/invest-a-stock/tests/test_render_concise_fixes.pyruns4,173 bytes../../skills/invest-a-stock/tests/test_render_extras.pyruns11,666 bytes../../skills/invest-a-stock/tests/test_render_html.pyruns36,892 bytes../../skills/invest-a-stock/tests/test_render_v2.pyruns11,503 bytes../../skills/invest-a-stock/tests/test_report_audit.pyruns5,507 bytes../../skills/invest-a-stock/tests/test_report_diff_history.pyruns4,185 bytes../../skills/invest-a-stock/tests/test_report_filepath.pyruns2,831 bytes../../skills/invest-a-stock/tests/test_report_qc_gates.pyruns47,676 bytes../../skills/invest-a-stock/tests/test_report_snapshot.pyruns61,942 bytes../../skills/invest-a-stock/tests/test_rerank.pyruns7,694 bytes../../skills/invest-a-stock/tests/test_research.pyruns13,284 bytes../../skills/invest-a-stock/tests/test_research_profile.pyruns28,470 bytes../../skills/invest-a-stock/tests/test_risk_reward.pyruns3,443 bytes../../skills/invest-a-stock/tests/test_risk_scanner.pyruns11,694 bytes../../skills/invest-a-stock/tests/test_schema.pyruns7,075 bytes../../skills/invest-a-stock/tests/test_search_cache.pyruns2,136 bytes../../skills/invest-a-stock/tests/test_sector_sync_collector.pyruns17,596 bytes../../skills/invest-a-stock/tests/test_segments_collector.pyruns11,672 bytes../../skills/invest-a-stock/tests/test_store_diff.pyruns32,758 bytes../../skills/invest-a-stock/tests/test_store_pipeline.pyruns5,861 bytes../../skills/invest-a-stock/tests/test_store_public_connection.pyruns4,756 bytes../../skills/invest-a-stock/tests/test_style_match.pyruns10,638 bytes../../skills/invest-a-stock/tests/test_sw_member_all.pyruns24,804 bytes../../skills/invest-a-stock/tests/test_technical.pyruns20,584 bytes../../skills/invest-a-stock/tests/test_technical_v019.pyruns1,646 bytes../../skills/invest-a-stock/tests/test_test_hygiene.pyruns2,684 bytes../../skills/invest-a-stock/tests/test_thesis_dates.pyruns6,221 bytes../../skills/invest-a-stock/tests/test_tushare_client.pyruns20,131 bytes../../skills/invest-a-stock/tests/test_v013_phase1.pyruns26,824 bytes../../skills/invest-a-stock/tests/test_v013_phase2.pyruns24,220 bytes../../skills/invest-a-stock/tests/test_v013_phase3.pyruns12,480 bytes../../skills/invest-a-stock/tests/test_v013_phase4.pyruns8,685 bytes../../skills/invest-a-stock/tests/test_v014.pyruns10,329 bytes../../skills/invest-a-stock/tests/test_v015_fixes.pyruns32,327 bytes../../skills/invest-a-stock/tests/test_v017.pyruns24,980 bytes../../skills/invest-a-stock/tests/test_v017_e2e.pyruns2,872 bytes../../skills/invest-a-stock/tests/test_v018.pyruns79,171 bytes../../skills/invest-a-stock/tests/test_v026_p0_fixes.pyruns15,263 bytes../../skills/invest-a-stock/tests/test_v026_review_fixes.pyruns25,812 bytes../../skills/invest-a-stock/tests/test_v027_fixes.pyruns8,456 bytes../../skills/invest-a-stock/tests/test_v028_fixes.pyruns1,808 bytes../../skills/invest-a-stock/tests/test_v030_reading_layers.pyruns36,929 bytes../../skills/invest-a-stock/tests/test_v031_c1_fin_series.pyruns10,000 bytes../../skills/invest-a-stock/tests/test_v031_c2_rf.pyruns5,644 bytes../../skills/invest-a-stock/tests/test_v031_c3_bank_leverage.pyruns4,850 bytes../../skills/invest-a-stock/tests/test_v031_mainline_rev.pyruns23,046 bytes../../skills/invest-a-stock/tests/test_v031_priority_review.pyruns6,059 bytes../../skills/invest-a-stock/tests/test_v031_reading_surface.pyruns12,376 bytes../../skills/invest-a-stock/tests/test_valuation.pyruns53,480 bytes../../skills/invest-a-stock/tests/test_version.pyruns1,280 bytes../../skills/invest-a-stock/tests/test_version_sync.pyruns9,696 bytes../../skills/invest-hk-stock/SKILL.mddoc6,671 bytes../../skills/invest-hk-stock/references/hk-caliber.mddoc6,275 bytes../../skills/invest-hk-stock/scripts/hk.pyruns58,815 bytes../../skills/invest-hk-stock/scripts/lib/__init__.pyruns388 bytes../../skills/invest-hk-stock/scripts/lib/_invest_path.pyruns772 bytes../../skills/invest-hk-stock/scripts/lib/hk_ah.pyruns22,294 bytes../../skills/invest-hk-stock/scripts/lib/hk_calendar.pyruns4,987 bytes../../skills/invest-hk-stock/scripts/lib/hk_codes.pyruns2,135 bytes../../skills/invest-hk-stock/scripts/lib/hk_compare.pyruns7,174 bytes../../skills/invest-hk-stock/scripts/lib/hk_financials.pyruns3,841 bytes../../skills/invest-hk-stock/scripts/lib/hk_kline.pyruns2,459 bytes../../skills/invest-hk-stock/scripts/lib/hk_quote.pyruns3,100 bytes../../skills/invest-hk-stock/scripts/lib/hk_southbound.pyruns22,726 bytes../../skills/invest-hk-stock/scripts/lib/hk_tushare.pyruns2,939 bytes../../skills/invest-hk-stock/scripts/lib/hk_valuation.pyruns2,630 bytes../../skills/invest-hk-stock/scripts/lib/hk_yfinance.pyruns3,321 bytes../../skills/invest-hk-stock/tests/_hk_cli.pyruns1,231 bytes../../skills/invest-hk-stock/tests/conftest.pyruns674 bytes../../skills/invest-hk-stock/tests/test_hk_ah.pyruns18,104 bytes../../skills/invest-hk-stock/tests/test_hk_ah_align.pyruns16,315 bytes../../skills/invest-hk-stock/tests/test_hk_calendar.pyruns4,386 bytes../../skills/invest-hk-stock/tests/test_hk_codes.pyruns1,412 bytes../../skills/invest-hk-stock/tests/test_hk_compare.pyruns17,570 bytes../../skills/invest-hk-stock/tests/test_hk_data.pyruns3,945 bytes../../skills/invest-hk-stock/tests/test_hk_quote.pyruns2,546 bytes../../skills/invest-hk-stock/tests/test_hk_southbound.pyruns28,404 bytes../../skills/lib/__init__.pyruns318 bytes../../skills/lib/backtest.pyruns17,625 bytes../../skills/lib/cache.pyruns13,550 bytes../../skills/lib/codes.pyruns4,802 bytes../../skills/lib/config_backtest.pyruns6,562 bytes../../skills/lib/data_bridge.pyruns21,335 bytes../../skills/lib/data_util.pyruns3,646 bytes../../skills/lib/dates.pyruns11,556 bytes../../skills/lib/db_util.pyruns6,428 bytes../../skills/lib/decision_review.pyruns10,039 bytes../../skills/lib/decision_schema.pyruns7,484 bytes../../skills/lib/env.pyruns13,602 bytes../../skills/lib/evidence_tags.pyruns7,134 bytes../../skills/lib/freshness.pyruns4,300 bytes../../skills/lib/invest_path.pyruns10,864 bytes../../skills/lib/kline_cache.pyruns6,140 bytes../../skills/lib/lmw.pyruns12,340 bytes../../skills/lib/logutil.pyruns6,861 bytes../../skills/lib/market_microstructure.pyruns104,844 bytes../../skills/lib/market_pctile.pyruns4,447 bytes../../skills/lib/market_pulse.pyruns904 bytes../../skills/lib/multiple_testing.pyruns6,901 bytes../../skills/lib/nums.pyruns3,771 bytes../../skills/lib/proxy.pyruns20,060 bytes../../skills/lib/qfq.pyruns5,555 bytes../../skills/lib/quote_tencent.pyruns10,199 bytes../../skills/lib/references/backtest_prereg/C10_预注册.mddoc3,787 bytes../../skills/lib/references/backtest_prereg/C11_预注册.mddoc5,552 bytes../../skills/lib/references/backtest_prereg/C12_预注册.mddoc4,808 bytes../../skills/lib/references/backtest_prereg/C17_预注册.mddoc4,784 bytes../../skills/lib/references/backtest_prereg/C3_预注册.mddoc5,275 bytes../../skills/lib/references/backtest_prereg/C7_预注册.mddoc4,429 bytes../../skills/lib/references/backtest_prereg/C8_预注册.mddoc5,229 bytes../../skills/lib/references/backtest_prereg/F1_预注册.mddoc1,608 bytes../../skills/lib/references/backtest_prereg/F2_预注册.mddoc1,099 bytes../../skills/lib/references/backtest_prereg/F3_预注册.mddoc1,113 bytes../../skills/lib/references/backtest_prereg/H1_预注册.mddoc1,442 bytes../../skills/lib/references/backtest_prereg/H2_预注册.mddoc1,642 bytes../../skills/lib/references/backtest_prereg/H3_预注册.mddoc1,293 bytes../../skills/lib/references/backtest_prereg/H4_预注册.mddoc1,769 bytes../../skills/lib/references/backtest_prereg/H6_预注册.mddoc2,357 bytes../../skills/lib/references/capital-mechanisms.mddoc11,364 bytes../../skills/lib/references/chip-clearance.mddoc7,136 bytes../../skills/lib/references/data-interface-map.mddoc20,772 bytes../../skills/lib/references/delivery-qc.mddoc18,439 bytes../../skills/lib/references/development-rules.mddoc13,331 bytes../../skills/lib/references/financial-semantics.mddoc11,648 bytes../../skills/lib/references/hypothesis-registry.mddoc15,772 bytes../../skills/lib/references/market-service-owner.mddoc4,846 bytes../../skills/lib/references/report-conventions.mddoc61,501 bytes../../skills/lib/references/scenario-plans.mddoc9,168 bytes../../skills/lib/report_qc.pyruns217,913 bytes../../skills/lib/sector_sync.pyruns50,149 bytes../../skills/lib/skill_paths.pyruns2,870 bytes../../skills/lib/snapshot_core.pyruns6,950 bytes../../skills/lib/stats.pyruns6,411 bytes../../skills/lib/technical.pyruns44,551 bytes../../skills/lib/tests/test_b06_qc_record.pyruns96,795 bytes../../skills/lib/tests/test_backtest.pyruns10,048 bytes../../skills/lib/tests/test_backtest_futures_fixes.pyruns8,276 bytes../../skills/lib/tests/test_build_skillhub_packages.pyruns52,907 bytes../../skills/lib/tests/test_cache.pyruns5,155 bytes../../skills/lib/tests/test_codes.pyruns3,458 bytes../../skills/lib/tests/test_config_backtest.pyruns5,407 bytes../../skills/lib/tests/test_data_bridge.pyruns20,635 bytes../../skills/lib/tests/test_data_util.pyruns2,207 bytes../../skills/lib/tests/test_dates.pyruns6,599 bytes../../skills/lib/tests/test_db_util.pyruns6,648 bytes../../skills/lib/tests/test_decision_review.pyruns9,297 bytes../../skills/lib/tests/test_decision_schema.pyruns8,528 bytes../../skills/lib/tests/test_dev_log_wiring.pyruns6,740 bytes../../skills/lib/tests/test_dist_doc_refs.pyruns5,088 bytes../../skills/lib/tests/test_h6_events.pyruns6,067 bytes../../skills/lib/tests/test_hypothesis_registry.pyruns4,225 bytes../../skills/lib/tests/test_invest_path_shims.pyruns2,013 bytes../../skills/lib/tests/test_kline_cache.pyruns7,602 bytes../../skills/lib/tests/test_law_contract_v031.pyruns8,243 bytes../../skills/lib/tests/test_lib_version.pyruns2,478 bytes../../skills/lib/tests/test_lmw.pyruns10,048 bytes../../skills/lib/tests/test_logutil.pyruns12,175 bytes../../skills/lib/tests/test_market_pctile.pyruns3,874 bytes../../skills/lib/tests/test_market_pulse.pyruns3,104 bytes../../skills/lib/tests/test_market_service_owner.pyruns4,592 bytes../../skills/lib/tests/test_multiple_testing.pyruns4,671 bytes../../skills/lib/tests/test_qfq.pyruns6,219 bytes../../skills/lib/tests/test_qfq_contract.pyruns4,384 bytes../../skills/lib/tests/test_quote_tencent.pyruns9,007 bytes../../skills/lib/tests/test_r1_sourcing_layer.pyruns8,018 bytes../../skills/lib/tests/test_r2_module_identity.pyruns6,711 bytes../../skills/lib/tests/test_report_qc.pyruns62,205 bytes../../skills/lib/tests/test_scenario_triggers.pyruns4,565 bytes../../skills/lib/tests/test_sector_sync.pyruns50,975 bytes../../skills/lib/tests/test_shared_owner_migration.pyruns10,525 bytes../../skills/lib/tests/test_skill_paths.pyruns2,887 bytes../../skills/lib/tests/test_snapshot_core.pyruns3,530 bytes../../skills/lib/tests/test_stats.pyruns3,670 bytes../../skills/lib/tests/test_technical_adx.pyruns6,856 bytes../../skills/lib/tests/test_trade_cal.pyruns7,216 bytes../../skills/lib/tests/test_unlock_source.pyruns3,944 bytes../../skills/lib/tests/test_v025_doc_checks.pyruns12,377 bytes../../skills/lib/tests/test_v026_doc_checks.pyruns23,969 bytes../../skills/lib/tests/test_v030_doc_checks.pyruns17,718 bytes../../skills/lib/tests/test_v031_evidence_tags.pyruns5,604 bytes../../skills/lib/tests/test_volume_price.pyruns18,708 bytes../../skills/lib/tests/test_zt_rotation_bundle.pyruns8,813 bytes../../skills/lib/trade_cal.pyruns10,132 bytes../../skills/lib/tushare_client.pyruns26,979 bytes../../skills/lib/unlock_source.pyruns5,381 bytes../../skills/lib/version.pyruns1,520 bytes../../skills/lib/volume_price.pyruns22,888 bytes
Read SKILL.md
# invest-skills(A股投研技能集入口)
本包是 8 个投研技能的 bundle:**共用一个 Python 数据引擎**,子技能是流程指令 + 引擎命令。
## 子技能路由表
| 用户意图(触发词) | 先 Read 的文件 | 说明 |
|---|---|---|
| 个股投研 / 估值 / 财报 | `skills/invest-a-stock/SKILL.md` | 九模块研究备忘录 |
| ETF / 指数基金 | `skills/invest-a-etf/SKILL.md` | 指数估值/折溢价/跟踪质量 |
| 交易日志 / 买入评估 / 卖出评估 | `skills/invest-a-journal/SKILL.md` | 四维评估 + 落库 |
| 市场情绪 / 大盘 / 市场脉搏 | `skills/invest-a-pulse/SKILL.md` | 五维情绪 + 环境标签 |
| 缺口扫描 / 跳空扫描 | `skills/invest-a-gap-scan/SKILL.md` | 成分股池缺口扫描 |
| 双底 / 形态扫描 / 三角形底 / 底部形态 | `skills/invest-a-pattern-scan/SKILL.md` | LMW 双底/三角形底 |View the complete source on GitHubinvest-a-discover-scan
When your agent uses it
低估发现扫描 — 多透镜粗筛(L1 横截面便宜 + L3 定价-盈利 gap + 质量中过滤)→ 研究观察短清单(≤15 只,逐只理由 + 下钻命令)→ 私有快照留档供事后回填。研究信号,非决策。触发词:低估/发现/便宜/估值扫描/找机会/筛股
What it loads into context
Frontmatter
235 tokensAlways available to the agent
SKILL.md
2,055 tokensWhen the skill is activated
Reference documents
3,767 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 状态与边界(v0.1)
- CLI
- 规则(预注册,改动须 bump 规则版本并记录原因)
- 口径与已知局限(读清单前必看)
- 快照与回填(设计 §8)
- 合规(A1/原 LAW 6)
- 数据源
Scripts executed separately
scripts/discover_fillback.pyscripts/discover_scan.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/lenses.pyscripts/lib/pool.pyscripts/lib/quality.pyscripts/lib/snapshot.pyscripts/lib/sources.pyscripts/lib/sources_hk.pytests/_scan_cli.pytests/conftest.pytests/test_cli.pytests/test_discover_pool.pytests/test_lenses.pytests/test_quality.pytests/test_snapshot.pytests/test_sources.pytests/test_sources_hk.py
Files
SKILL.mdcore6,449 bytesSKILL.mdcore6,449 bytesreferences/rules.mddoc4,910 bytesreferences/sources.mddoc6,324 bytesscripts/discover_fillback.pyruns1,212 bytesscripts/discover_scan.pyruns37,401 bytesscripts/lib/__init__.pyruns288 bytesscripts/lib/_invest_path.pyruns962 bytesscripts/lib/lenses.pyruns9,617 bytesscripts/lib/pool.pyruns2,554 bytesscripts/lib/quality.pyruns6,146 bytesscripts/lib/snapshot.pyruns4,847 bytesscripts/lib/sources.pyruns17,846 bytesscripts/lib/sources_hk.pyruns14,102 bytestests/_scan_cli.pyruns957 bytestests/conftest.pyruns683 bytestests/test_cli.pyruns37,725 bytestests/test_discover_pool.pyruns2,894 bytestests/test_lenses.pyruns9,538 bytestests/test_quality.pyruns4,925 bytestests/test_snapshot.pyruns4,537 bytestests/test_sources.pyruns7,006 bytestests/test_sources_hk.pyruns8,172 bytes
Read SKILL.md
# invest-a-discover-scan — 低估发现扫描(v0.1)
> **定位:研究信号,非决策。** 检出 = 「该标的符合**预注册规则定义**的客观条件」,
> 不构成任何交易建议(A1/原 LAW 6)。短清单是**观察起点**,深判走下钻命令进入
> invest-a-stock 既有流水线(基本面安全边际 + 多情景估值)。
## 状态与边界(v0.1)
- **范围**:多透镜粗筛 → 短清单 → 快照落盘。**不含**:回填结论(v0.2)、
自身历史分位 L2 透镜(v0.2)、定时/提醒(归 app)。
- **数据面全程 tushare**(东财域在部分网络环境不可达;skill 内零东财依赖)。
无 `TUSHARE_TOKEN` → 退出码 4。
- **个体产出仅本地**:md 落 `reports/discover-scan/`(已 gitignore),
快照落私有 `~/.local/share/investment/discovery/{YYYY}.jsonl`——不进公开仓库。View the complete source on GitHubinvest-a-etf
When your agent uses it
A股 ETF 结构化研究 — 身份/指数估值/折溢价/规模口径(AUM 语义修正)/跟踪质量/对冲覆盖,产出带来源追溯的研究备忘录。研究工具,非决策工具。共用数据层供 invest-a-journal ETF 路径调用。触发词:ETF/指数基金
What it loads into context
Frontmatter
203 tokensAlways available to the agent
SKILL.md
16,138 tokensWhen the skill is activated
Reference documents
34,969 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 概述
- 硬约束
- 工作流
- 正文职责与主题块(映射,不是默认栏目)
- 数据引擎
- 分析合成(必选四步)
- Self-Check
- 与其他 Skill 的关系
- 参考
Scripts executed separately
scripts/__init__.pyscripts/etf.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/assets/chart.umd.min.jsscripts/lib/etf_data.pyscripts/lib/etf_generation.pyscripts/lib/etf_html.pyscripts/lib/etf_md.pyscripts/lib/etf_peers.pyscripts/lib/etf_playbook.pyscripts/lib/etf_research.pyscripts/lib/etf_timeline.pyscripts/lib/futures_basis.pyscripts/lib/index_pe_snapshot.pyscripts/lib/industry_snapshot.pyscripts/lib/sector_flow.pytests/conftest.pytests/test_etf_159920_disclosure.pytests/test_etf_boll_bandwidth.pytests/test_etf_cache_fixes.pytests/test_etf_cli.pytests/test_etf_data_status.pytests/test_etf_decision.pytests/test_etf_exposure.pytests/test_etf_flags.pytests/test_etf_generation.pytests/test_etf_holdings.pytests/test_etf_html.pytests/test_etf_identity.pytests/test_etf_index_pe.pytests/test_etf_kline.pytests/test_etf_map.pytests/test_etf_md.pytests/test_etf_peers.pytests/test_etf_playbook.pytests/test_etf_same_index_evidence.pytests/test_etf_scale_semantics.pytests/test_etf_share_flow.pytests/test_etf_share_split.pytests/test_etf_share_window.pytests/test_etf_spot_cache.pytests/test_etf_timeline.pytests/test_etf_tracking.pytests/test_etf_tradability.pytests/test_etf_valuation_guide.pytests/test_futures_basis.pytests/test_index_pe_snapshot.pytests/test_operating_research.pytests/test_r1_staleness.pytests/test_sector_flow.pytests/test_v026_p1_fixes.py../invest-a-stock/scripts/invest.py../invest-a-stock/scripts/invest.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py
Files
SKILL.mdcore53,939 bytesSKILL.mdcore53,939 bytesSKILL.mdcore53,939 bytesevents/512660.jsonasset1,827 bytesevents/562590.jsonasset4,224 bytesevents/588000.jsonasset3,807 bytesevents/README.mddoc1,481 bytesreferences/etf-hedge-map.mddoc5,607 bytesreferences/operating-research.mddoc4,996 bytesreferences/report-template.mddoc15,683 bytesscripts/__init__.pyruns0 bytesscripts/etf.pyruns76,716 bytesscripts/lib/__init__.pyruns0 bytesscripts/lib/_invest_path.pyruns510 bytesscripts/lib/assets/chart.umd.min.jsruns205,222 bytesscripts/lib/etf_data.pyruns301,481 bytesscripts/lib/etf_generation.pyruns11,548 bytesscripts/lib/etf_html.pyruns89,595 bytesscripts/lib/etf_md.pyruns14,878 bytesscripts/lib/etf_peers.pyruns27,790 bytesscripts/lib/etf_playbook.pyruns6,317 bytesscripts/lib/etf_research.pyruns27,694 bytesscripts/lib/etf_timeline.pyruns8,643 bytesscripts/lib/futures_basis.pyruns6,286 bytesscripts/lib/index_pe_snapshot.pyruns8,637 bytesscripts/lib/industry_snapshot.pyruns9,764 bytesscripts/lib/sector_flow.pyruns33,995 bytestests/conftest.pyruns2,485 bytestests/fixtures/159920_history_247.jsonasset11,590 bytestests/fixtures/md_skeleton.mddoc4,303 bytestests/test_etf_159920_disclosure.pyruns8,272 bytestests/test_etf_boll_bandwidth.pyruns3,879 bytestests/test_etf_cache_fixes.pyruns17,908 bytestests/test_etf_cli.pyruns45,963 bytestests/test_etf_data_status.pyruns38,537 bytestests/test_etf_decision.pyruns8,884 bytestests/test_etf_exposure.pyruns13,374 bytestests/test_etf_flags.pyruns5,774 bytestests/test_etf_generation.pyruns11,308 bytestests/test_etf_holdings.pyruns16,411 bytestests/test_etf_html.pyruns53,513 bytestests/test_etf_identity.pyruns16,355 bytestests/test_etf_index_pe.pyruns16,576 bytestests/test_etf_kline.pyruns7,005 bytestests/test_etf_map.pyruns3,209 bytestests/test_etf_md.pyruns6,913 bytestests/test_etf_peers.pyruns13,993 bytestests/test_etf_playbook.pyruns8,185 bytestests/test_etf_same_index_evidence.pyruns14,702 bytestests/test_etf_scale_semantics.pyruns4,903 bytestests/test_etf_share_flow.pyruns9,305 bytestests/test_etf_share_split.pyruns8,510 bytestests/test_etf_share_window.pyruns8,053 bytestests/test_etf_spot_cache.pyruns4,783 bytestests/test_etf_timeline.pyruns21,387 bytestests/test_etf_tracking.pyruns45,583 bytestests/test_etf_tradability.pyruns4,575 bytestests/test_etf_valuation_guide.pyruns1,640 bytestests/test_futures_basis.pyruns4,664 bytestests/test_index_pe_snapshot.pyruns16,535 bytestests/test_operating_research.pyruns16,432 bytestests/test_r1_staleness.pyruns14,650 bytestests/test_sector_flow.pyruns31,330 bytestests/test_v026_p1_fixes.pyruns9,935 bytes../invest-a-stock/scripts/invest.pyruns158,641 bytes../invest-a-stock/scripts/invest.pyruns158,641 bytes../lib/references/delivery-qc.mddoc18,439 bytes../lib/references/report-conventions.mddoc61,501 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes
Read SKILL.md
# invest-a-etf — ETF 研究助手
> **工具约束**:`allowed-tools` 是 Claude Code 约定,跨 harness 语义不同(部分平台不读该字段,可用工具由平台沙箱决定)。本技能主体为本地 Bash/Python 采集与计算,部分维度经 WebSearch 补充。
## 概述
你是 ETF 研究助手。用户通过 `/invest-a-etf {代码}` 请求对单只 ETF 做结构化研究。你的职责:
1. **采集**:调用共用数据引擎 `etf_data.py`(身份、指数 PE、折溢价、规模口径、净值波动、跟踪质量、对冲覆盖)
2. **合成**:按 [references/report-template.md](references/report-template.md) 产出 Markdown 研究备忘录
3. **标注**:每个数字带来源;推测标注「待验证」;遵守 A1 / A2(原 LAW 6 / 6a)
**研究工具,非决策工具。** 不做买卖/仓位建议。需要评估「我要买/卖这只 ETF 的方案」时,引导用户用 `/invest-a-journal`。
View the complete source on GitHubinvest-a-gap-scan
When your agent uses it
跳空缺口扫描 — 向上缺口 + 收盘未跌破 MA60 + 未回补,指数成分股池(沪深300+中证A500+科创50)触发词:缺口/跳空扫描
What it loads into context
Frontmatter
200 tokensAlways available to the agent
SKILL.md
7,911 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 概述
- 运行
- 算法详解
- 数据流
- 性能
- 输出
- 缓存
- 数据源
- 排除/未命中原因
- 联动
- 合规
Scripts executed separately
scripts/__init__.pyscripts/eval_forward.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/gap_scanner.pyscripts/lib/kline_source.pyscripts/lib/qfq.pyscripts/lib/report_formatter.pyscripts/lib/skip_reasons.pyscripts/lib/suspension.pyscripts/lib/universe.pyscripts/record_hits.pyscripts/scan.pytests/__init__.pytests/conftest.pytests/test_backtest_eval.pytests/test_create_source.pytests/test_gap_scanner.pytests/test_kline_group.pytests/test_qfq.pytests/test_report_smoke.pytests/test_suspension.pytests/test_universe.py
Files
SKILL.mdcore24,606 bytesSKILL.mdcore24,606 bytesSKILL.mdcore24,606 bytesSKILL.mdcore24,606 bytesscripts/__init__.pyruns0 bytesscripts/eval_forward.pyruns12,859 bytesscripts/lib/__init__.pyruns0 bytesscripts/lib/_invest_path.pyruns510 bytesscripts/lib/gap_scanner.pyruns33,778 bytesscripts/lib/kline_source.pyruns27,718 bytesscripts/lib/qfq.pyruns1,489 bytesscripts/lib/report_formatter.pyruns29,514 bytesscripts/lib/skip_reasons.pyruns1,265 bytesscripts/lib/suspension.pyruns4,916 bytesscripts/lib/universe.pyruns22,307 bytesscripts/record_hits.pyruns5,672 bytesscripts/scan.pyruns26,044 bytestests/__init__.pyruns0 bytestests/conftest.pyruns249 bytestests/test_backtest_eval.pyruns2,919 bytestests/test_create_source.pyruns7,129 bytestests/test_gap_scanner.pyruns53,679 bytestests/test_kline_group.pyruns2,059 bytestests/test_qfq.pyruns16,219 bytestests/test_report_smoke.pyruns31,896 bytestests/test_suspension.pyruns13,988 bytestests/test_universe.pyruns5,127 bytes
Read SKILL.md
# invest-a-gap-scan 跳空缺口扫描
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能主体操作为本地数据采集与计算(Bash/Python 引擎);部分维度经 WebSearch/WebFetch 补充检索
## 概述
扫描**沪深300 + 中证A500 + 科创50 成分股并集**(去重后约 450~500 只,随指数调仓变动),找出同时满足:
1. 近 60 个交易日内有**向上跳空缺口**(`low[i] > high[i-1]`,幅度 >= 1%)
2. 自缺口日起,在**可计算 MA60 的 bar** 上收盘未跌破 MA60(`close[t] >= MA60[t]`;含 epsilon 容差与有效值门槛,见「MA60 计算」)
3. 缺口形成后**最低价从未回补至上沿及以下**(`min(low[gap_idx+1:]) > gap_high`)
> **产出性质:观察清单。** 命中 = 「这几只标的存在未回补的向上缺口且未跌破 MA60」这一**规则化形态检出结果**,
> **不是交易信号、不是预测、不是推荐排序**,也不含任何方向性判断或基本面/事件核验。View the complete source on GitHubinvest-a-journal
When your agent uses it
交易日志 v2 — Claude 驱动四维评估(逻辑/盲点/仓位匹配/风险收益)+ 数据引擎;ETF 路径调用 invest-a-etf 共用模块。研究工具,非决策工具。触发词:交易日志/买入/卖出评估
What it loads into context
Frontmatter
189 tokensAlways available to the agent
SKILL.md
12,310 tokensWhen the skill is activated
Reference documents
8,074 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 概述
- JOURNAL-LAW(10 条,违反即为 Bug)
- Badge 格式
- Self-Check 清单
- 交互流程
- 未行动观察(R-C04,错过后悔侧)
- 错频与失效条件(R-C01 / R-C02)
- 保存落库契约(用户确认后)
- 数据查询规范
- ETF vs 个股 评估维度对照
- 买入评估维度(4 维)
- 卖出评估维度(4 维)
- 持仓位置导航参考(P-2,v0.2.9 起;仅当 --portfolio 提供且标的存在于持仓时渲染)
- 评估输出模板
- 复盘归因模板(环境 vs 能力 vs 运气)
- 日历效应建议(H5 回测裁决)
- 情景预案闭环(scenario-plans)
- 数据库
- 环境护栏 v1(确定性规则)
- 与其他 Skill 的关系
- 参考文档
Scripts executed separately
../../scripts/archive/backtest_calendar.py../../scripts/archive/backtest_calendar.pyscripts/journal.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/db.pyscripts/lib/etf_data.pyscripts/lib/market_microstructure.pyscripts/lib/query_data.pytests/conftest.pytests/test_chip_clearance.pytests/test_compute_technical_stock.pytests/test_db_rollback.pytests/test_env_guardrail.pytests/test_etf_shim.pytests/test_futures_basis_freshness.pytests/test_inaction_watch_show.pytests/test_journal_module_loader.pytests/test_journal_v026.pytests/test_labels_v2.pytests/test_macro_snapshot.pytests/test_market_form.pytests/test_microstructure_via_bridge.pytests/test_position_nav.pytests/test_query_data_etf.pytests/test_query_helpers.pytests/test_safe_collect_ordering.pytests/test_sell_link.pytests/test_session_date_fields.pytests/test_snapshot_status.pytests/test_store_isolation.pytests/test_szse_turnover.pytests/test_v027_csindex_noise.pytests/test_wrong_frequency.pytests/test_zt_seesaw.py
Files
../../scripts/archive/backtest_calendar.pyruns8,513 bytes../../scripts/archive/backtest_calendar.pyruns8,513 bytes../invest-a-etf/references/etf-hedge-map.mddoc5,607 bytesSKILL.mdcore39,676 bytesSKILL.mdcore39,676 bytesSKILL.mdcore39,676 bytesSKILL.mdcore39,676 bytesreferences/etf-hedge-map.mddoc328 bytesreferences/evaluation-criteria.mddoc8,574 bytesscripts/journal.pyruns13,644 bytesscripts/lib/__init__.pyruns0 bytesscripts/lib/_invest_path.pyruns510 bytesscripts/lib/db.pyruns25,167 bytesscripts/lib/etf_data.pyruns9,248 bytesscripts/lib/market_microstructure.pyruns1,420 bytesscripts/lib/query_data.pyruns22,560 bytestests/conftest.pyruns5,764 bytestests/test_chip_clearance.pyruns21,314 bytestests/test_compute_technical_stock.pyruns1,564 bytestests/test_db_rollback.pyruns1,109 bytestests/test_env_guardrail.pyruns5,603 bytestests/test_etf_shim.pyruns12,504 bytestests/test_futures_basis_freshness.pyruns19,579 bytestests/test_inaction_watch_show.pyruns2,801 bytestests/test_journal_module_loader.pyruns5,862 bytestests/test_journal_v026.pyruns3,950 bytestests/test_labels_v2.pyruns3,158 bytestests/test_macro_snapshot.pyruns5,980 bytestests/test_market_form.pyruns15,959 bytestests/test_microstructure_via_bridge.pyruns1,946 bytestests/test_position_nav.pyruns7,572 bytestests/test_query_data_etf.pyruns4,896 bytestests/test_query_helpers.pyruns1,487 bytestests/test_safe_collect_ordering.pyruns7,907 bytestests/test_sell_link.pyruns6,595 bytestests/test_session_date_fields.pyruns2,779 bytestests/test_snapshot_status.pyruns3,645 bytestests/test_store_isolation.pyruns9,720 bytestests/test_szse_turnover.pyruns2,939 bytestests/test_v027_csindex_noise.pyruns4,488 bytestests/test_wrong_frequency.pyruns6,074 bytestests/test_zt_seesaw.pyruns4,491 bytes../lib/references/scenario-plans.mddoc9,168 bytes
Read SKILL.md
# invest-a-journal v0.3.2
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能全部操作均为本地数据采集与计算,仅依赖 Bash 与 Python 运行环境。
## 概述
你是一个交易日志评估助手。用户在买入或卖出时通过 `/invest-a-journal` 与你对话。你的职责是:
1. **交互式 Q&A**:引导用户写出标的、驱动逻辑、核心假设、错误条件、仓位、最大可接受损失
2. **数据查询**:调用 Python 引擎脚本查询 PE 分位、波动率、宏观、两融、涨跌比、涨跌停比;ETF 专属数据经共用 `etf_data`(invest-a-etf canonical)
3. **四维评估**:从逻辑完整性、数据盲点、仓位匹配、风险收益比四个维度评估方案质量
4. **护栏追加**:调用 `apply_env_guardrail()` 追加环境盲点提示,不改写维度评级
5. **保存落库**:确认后存入 SQLite,含结构化 `evaluation_json`
View the complete source on GitHubinvest-a-pattern-scan
When your agent uses it
底部形态扫描 — LMW 双底/三角形底全市场检出 + 数据窥探防护(RC p)。研究信号,非决策。触发词:双底/形态扫描/三角形底/底部形态
What it loads into context
Frontmatter
167 tokensAlways available to the agent
SKILL.md
1,715 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 运行
- 输出解读
- 方法学要点(报告引用时强制)
- 边界
- Self-Check
Scripts executed separately
scripts/lib/_invest_path.pyscripts/lib/feature_patterns.pyscripts/lib/kline_source.pyscripts/lib/pattern_scanner.pyscripts/lib/universe.pyscripts/scan.pytests/test_feature_patterns.pytests/test_scanner_smoke.py
Files
SKILL.mdcore5,322 bytesSKILL.mdcore5,322 bytesSKILL.mdcore5,322 bytesscripts/lib/_invest_path.pyruns734 bytesscripts/lib/feature_patterns.pyruns16,088 bytesscripts/lib/kline_source.pyruns399 bytesscripts/lib/pattern_scanner.pyruns9,316 bytesscripts/lib/universe.pyruns391 bytesscripts/scan.pyruns4,778 bytestests/test_feature_patterns.pyruns17,551 bytestests/test_scanner_smoke.pyruns9,216 bytes
Read SKILL.md
# invest-a-pattern-scan v0.2.9
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能全部操作均为本地数据采集与计算,仅依赖 Bash 与 Python 运行环境。
底部反转形态扫描器(MVP:双底 + 三角形底)。方法学:Lo-Mamaysky-Wang (2000, JF) 核平滑 + 5 极值模板;参数表与证据分级见 `skills/lib/references/scenario-plans.md` 同源设计(ABCD 设计 §2.3)。
**定位:研究信号,非决策。** 检出 = "该标的历史价格符合双底/三角形底的客观形态定义",不构成任何交易建议(A1/原 LAW 6)。
## 运行
```bash
cd "${INVEST_SKILLS_ROOT:-.}/skills/invest-a-pattern-scan/scripts/lib" && \
uv run python ../scan.py --universe csi300 a500 star50 --days 150
# 输出 docs/data/pattern_scan_result.json + stdout 摘要View the complete source on GitHubinvest-a-pulse
When your agent uses it
市场情绪脉搏 — 杠杆周期/市场广度/极端情绪/资金面/估值温度 + 综合环境标签 + 交叉维度分析。研究工具,非择时工具。触发词:市场情绪/大盘/市场脉搏
What it loads into context
Frontmatter
166 tokensAlways available to the agent
SKILL.md
10,095 tokensWhen the skill is activated
Reference documents
25,010 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 概述
- 工作流
- 数据引擎
- 输出模板(分析版)
- 分析纪律(必读)
- 数据缺失处理
- 复检流程(发报告前必做)
- Self-Check
- 与其他 Skill 的关系
- 参考
Scripts executed separately
../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py
Files
SKILL.mdcore32,432 bytesSKILL.mdcore32,432 bytesSKILL.mdcore32,432 bytes../lib/references/delivery-qc.mddoc18,439 bytes../lib/references/report-conventions.mddoc61,501 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes
Read SKILL.md
# invest-a-pulse — 市场情绪脉搏
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能全部操作均为本地数据采集与计算,仅依赖 Bash 与 Python 运行环境。
## 概述
你是市场情绪分析助手。用户通过 `/invest-a-pulse` 请求当前市场情绪全景。你的职责:
1. **采集**:调用 `market_microstructure.snapshot()` + `load_history(60)` 获取市场快照,再用 akshare 历史接口补长序列(PE/PB 分位、两融趋势)
2. **分析**:不罗列数据 — 每个维度必须给出**事实 → 分析**(数据之间的关系、背离、矛盾信号),最后交叉验证
3. **标注**:每个数字标注来源和质量;推测标注「待验证」;数据缺失明确说「无法定论」
**研究工具,非择时工具。** 不做买卖/仓位建议。需要交易方案评估时引导用户用 `/invest-a-journal`。
View the complete source on GitHubinvest-a-stock
When your agent uses it
A股多因子交叉验证的结构化投研助手 — 数据采集 + 学术级引用,产出带来源追溯的 Markdown 研究备忘录。研究工具,非决策工具。触发词:个股投研/估值/财报
What it loads into context
Frontmatter
224 tokensAlways available to the agent
SKILL.md
17,944 tokensWhen the skill is activated
Reference documents
48,306 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- OUTPUT CONTRACT(LAWs)
- Skill 身份声明
- 输出格式(层叠输出)
- 专项加载与 intent 路由
- R12f 分析深化契约(v0.2.4,简报铁律升级)
- R12a 关联数据挖掘 SOP(v0.2.4,采集后、合成前强制)
- R12d 模块权重自适应(v0.2.4,依赖 R1 classify)
- R4 行业成功关键因素(v0.2.4,行业洞见层)
- R5 行业景气状态卡(v0.2.4,结构性季节)
- R7 成长股四分类分流(v0.2.4,R1=成长兑现 时启用)
- R12g 双路径分流 + 连板触发(v0.2.4,趋势路径引擎)
- R12g-B 开场四问 + 双路径分流(v0.2.4,会话起点)
- 数据来源
- 报告产物协议(v0.2.8)
- CLI 命令
- 代理 / VPN
- 引用格式(精简)
- 技术指标
- 采集顺序
- CLI 扩展命令
Scripts executed separately
scripts/agent_facts.pyscripts/check_report.shscripts/invest.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/analysis_schema.pyscripts/lib/analysis_status.pyscripts/lib/analysis_templates.pyscripts/lib/archiver.pyscripts/lib/assets/echarts.umd.min.jsscripts/lib/attribution.pyscripts/lib/catalyst.pyscripts/lib/chain.pyscripts/lib/climate.pyscripts/lib/collector/__init__.pyscripts/lib/collector/_base.pyscripts/lib/collector/_kline_cache.pyscripts/lib/collector/_legacy.pyscripts/lib/collector/_orchestrate.pyscripts/lib/collector/_sources.pyscripts/lib/data_util.pyscripts/lib/db_util.pyscripts/lib/env.pyscripts/lib/events.pyscripts/lib/evidence.pyscripts/lib/financial_rigor.pyscripts/lib/financials.pyscripts/lib/fusion.pyscripts/lib/futures_data.pyscripts/lib/html_charts.pyscripts/lib/income_driver.pyscripts/lib/industry/__init__.pyscripts/lib/industry/banks.pyscripts/lib/industry/base.pyscripts/lib/industry/tech_hardware.pyscripts/lib/insight_model.pyscripts/lib/json_util.pyscripts/lib/kline_cache.pyscripts/lib/lhb.pyscripts/lib/lint.pyscripts/lib/macro.pyscripts/lib/manifest.pyscripts/lib/market_daily.pyscripts/lib/market_pulse.pyscripts/lib/md_subset.pyscripts/lib/news_scanner.pyscripts/lib/notice_body.pyscripts/lib/nums.pyscripts/lib/participant_scan.pyscripts/lib/planner.pyscripts/lib/portfolio_review.pyscripts/lib/positions.pyscripts/lib/proxy.pyscripts/lib/qfq.pyscripts/lib/quality_check.pyscripts/lib/render.pyscripts/lib/render_dcf.pyscripts/lib/render_extras.pyscripts/lib/render_html.pyscripts/lib/render_icons.pyscripts/lib/render_insight.pyscripts/lib/render_markdown/__init__.pyscripts/lib/render_markdown/_base.pyscripts/lib/render_markdown/_concise.pyscripts/lib/render_markdown/_legacy.pyscripts/lib/render_markdown/_v2.pyscripts/lib/render_markdown/_v3.pyscripts/lib/render_risk.pyscripts/lib/render_utils.pyscripts/lib/report_audit.pyscripts/lib/report_snapshot.pyscripts/lib/rerank.pyscripts/lib/research_profile.pyscripts/lib/risk_reward.pyscripts/lib/risk_scanner.pyscripts/lib/schema.pyscripts/lib/scoring.pyscripts/lib/search_cache.pyscripts/lib/shared_codes.pyscripts/lib/shared_dates.pyscripts/lib/stats.pyscripts/lib/store.pyscripts/lib/style_match.pyscripts/lib/technical.pyscripts/lib/trade_cal.pyscripts/lib/tushare_client.pyscripts/lib/valuation.pyscripts/lib/version.pyscripts/merge_collections.pyscripts/valuation_calc.pytests/conftest.pytests/fixtures/__init__.pytests/fixtures/collections.pytests/stock_testutil.pytests/test_agent_facts.pytests/test_analysis_schema.pytests/test_analysis_templates.pytests/test_atomic_json_contract.pytests/test_attribution.pytests/test_catalyst.pytests/test_chain.pytests/test_cli_dispatch.pytests/test_cli_html.pytests/test_climate.pytests/test_collector.pytests/test_collector_fixes.pytests/test_collector_run_cache.pytests/test_collector_zombie_cache.pytests/test_cross_validation.pytests/test_d3_sourcing_labels.pytests/test_default_store.pytests/test_disposition_hint.pytests/test_entry_check_precision.pytests/test_env.pytests/test_events.pytests/test_events_notice_types.pytests/test_evidence.pytests/test_fast_report_pipeline.pytests/test_financial_rigor.pytests/test_financials.pytests/test_full_analysis_cli.pytests/test_fusion.pytests/test_futures_data.pytests/test_html_charts.pytests/test_industry_success_factors.pytests/test_injection_shield.pytests/test_insight_analysis_cli.pytests/test_insight_discoveries_chains.pytests/test_insight_report.pytests/test_invest_cli_help.pytests/test_lhb.pytests/test_lint.pytests/test_macro_extended.pytests/test_manifest.pytests/test_market_daily.pytests/test_market_status_basis.pytests/test_md_subset.pytests/test_merge_collections.pytests/test_news_scanner.pytests/test_notice_body.pytests/test_orchestrate_blocks.pytests/test_parse_fetched_at_parity.pytests/test_participant_scan.pytests/test_pcr_freshness.pytests/test_pe_loss_missing_consistency.pytests/test_peer_cli.pytests/test_peer_market_caps.pytests/test_percentile_core_shared.pytests/test_portfolio_review.pytests/test_positions.pytests/test_price_basis_label.pytests/test_proxy.pytests/test_qc_render_output_regression.pytests/test_quality_check.pytests/test_r12h.pytests/test_redundancy_phase23.pytests/test_render_code_review_fixes.pytests/test_render_concise_fixes.pytests/test_render_extras.pytests/test_render_html.pytests/test_render_v2.pytests/test_report_audit.pytests/test_report_diff_history.pytests/test_report_filepath.pytests/test_report_qc_gates.pytests/test_report_snapshot.pytests/test_rerank.pytests/test_research.pytests/test_research_profile.pytests/test_risk_reward.pytests/test_risk_scanner.pytests/test_schema.pytests/test_search_cache.pytests/test_sector_sync_collector.pytests/test_segments_collector.pytests/test_store_diff.pytests/test_store_pipeline.pytests/test_store_public_connection.pytests/test_style_match.pytests/test_sw_member_all.pytests/test_technical.pytests/test_technical_v019.pytests/test_test_hygiene.pytests/test_thesis_dates.pytests/test_tushare_client.pytests/test_v013_phase1.pytests/test_v013_phase2.pytests/test_v013_phase3.pytests/test_v013_phase4.pytests/test_v014.pytests/test_v015_fixes.pytests/test_v017.pytests/test_v017_e2e.pytests/test_v018.pytests/test_v026_p0_fixes.pytests/test_v026_review_fixes.pytests/test_v027_fixes.pytests/test_v028_fixes.pytests/test_v030_reading_layers.pytests/test_v031_c1_fin_series.pytests/test_v031_c2_rf.pytests/test_v031_c3_bank_leverage.pytests/test_v031_mainline_rev.pytests/test_v031_priority_review.pytests/test_v031_reading_surface.pytests/test_valuation.pytests/test_version.pytests/test_version_sync.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py../lib/report_qc.py
Files
SKILL.mdcore58,986 bytesSKILL.mdcore58,986 bytesSKILL.mdcore58,986 bytesSKILL.mdcore58,986 bytesreferences/agent-prompts.mddoc25,521 bytesreferences/deep-sop.mddoc6,715 bytesreferences/financials.mddoc7,694 bytesreferences/game-theory.mddoc3,384 bytesreferences/ic-framework.mddoc5,766 bytesreferences/modules.mddoc4,265 bytesreferences/references-format.mddoc2,128 bytesreferences/sentiment.mddoc2,900 bytesreferences/source-guide.mddoc11,185 bytesreferences/trade-structure.mddoc5,345 bytesscripts/agent_facts.pyruns23,061 bytesscripts/check_report.shruns1,456 bytesscripts/invest.pyruns158,641 bytesscripts/lib/__init__.pyruns62 bytesscripts/lib/_invest_path.pyruns510 bytesscripts/lib/analysis_schema.pyruns28,974 bytesscripts/lib/analysis_status.pyruns1,986 bytesscripts/lib/analysis_templates.pyruns18,609 bytesscripts/lib/archiver.pyruns1,559 bytesscripts/lib/assets/echarts.umd.min.jsruns1,121,883 bytesscripts/lib/attribution.pyruns2,207 bytesscripts/lib/catalyst.pyruns15,646 bytesscripts/lib/chain.pyruns7,792 bytesscripts/lib/climate.pyruns17,655 bytesscripts/lib/collector/__init__.pyruns614 bytesscripts/lib/collector/_base.pyruns16,931 bytesscripts/lib/collector/_kline_cache.pyruns3,191 bytesscripts/lib/collector/_legacy.pyruns2,872 bytesscripts/lib/collector/_orchestrate.pyruns208,527 bytesscripts/lib/collector/_sources.pyruns56,613 bytesscripts/lib/data_util.pyruns278 bytesscripts/lib/db_util.pyruns401 bytesscripts/lib/env.pyruns895 bytesscripts/lib/events.pyruns36,871 bytesscripts/lib/evidence.pyruns5,744 bytesscripts/lib/financial_rigor.pyruns16,506 bytesscripts/lib/financials.pyruns14,368 bytesscripts/lib/fusion.pyruns10,045 bytesscripts/lib/futures_data.pyruns14,478 bytesscripts/lib/html_charts.pyruns30,985 bytesscripts/lib/income_driver.pyruns16,788 bytesscripts/lib/industry/__init__.pyruns1,154 bytesscripts/lib/industry/banks.pyruns7,661 bytesscripts/lib/industry/base.pyruns7,041 bytesscripts/lib/industry/tech_hardware.pyruns7,714 bytesscripts/lib/insight_model.pyruns55,289 bytesscripts/lib/json_util.pyruns3,851 bytesscripts/lib/kline_cache.pyruns264 bytesscripts/lib/lhb.pyruns9,895 bytesscripts/lib/lint.pyruns18,755 bytesscripts/lib/macro.pyruns63,498 bytesscripts/lib/manifest.pyruns10,287 bytesscripts/lib/market_daily.pyruns5,305 bytesscripts/lib/market_pulse.pyruns278 bytesscripts/lib/md_subset.pyruns10,174 bytesscripts/lib/news_scanner.pyruns7,375 bytesscripts/lib/notice_body.pyruns8,093 bytesscripts/lib/nums.pyruns403 bytesscripts/lib/participant_scan.pyruns12,368 bytesscripts/lib/planner.pyruns8,004 bytesscripts/lib/portfolio_review.pyruns9,458 bytesscripts/lib/positions.pyruns15,598 bytesscripts/lib/proxy.pyruns893 bytesscripts/lib/qfq.pyruns272 bytesscripts/lib/quality_check.pyruns13,656 bytesscripts/lib/render.pyruns3,047 bytesscripts/lib/render_dcf.pyruns36,630 bytesscripts/lib/render_extras.pyruns2,192 bytesscripts/lib/render_html.pyruns87,452 bytesscripts/lib/render_icons.pyruns1,003 bytesscripts/lib/render_insight.pyruns24,854 bytesscripts/lib/render_markdown/__init__.pyruns532 bytesscripts/lib/render_markdown/_base.pyruns32,417 bytesscripts/lib/render_markdown/_concise.pyruns44,519 bytesscripts/lib/render_markdown/_legacy.pyruns484 bytesscripts/lib/render_markdown/_v2.pyruns27,911 bytesscripts/lib/render_markdown/_v3.pyruns228,363 bytesscripts/lib/render_risk.pyruns68,643 bytesscripts/lib/render_utils.pyruns31,832 bytesscripts/lib/report_audit.pyruns5,068 bytesscripts/lib/report_snapshot.pyruns16,087 bytesscripts/lib/rerank.pyruns4,806 bytesscripts/lib/research_profile.pyruns14,766 bytesscripts/lib/risk_reward.pyruns13,957 bytesscripts/lib/risk_scanner.pyruns23,167 bytesscripts/lib/schema.pyruns20,734 bytesscripts/lib/scoring.pyruns29,049 bytesscripts/lib/search_cache.pyruns6,425 bytesscripts/lib/shared_codes.pyruns697 bytesscripts/lib/shared_dates.pyruns1,721 bytesscripts/lib/stats.pyruns364 bytesscripts/lib/store.pyruns66,255 bytesscripts/lib/style_match.pyruns7,658 bytesscripts/lib/technical.pyruns321 bytesscripts/lib/trade_cal.pyruns1,126 bytesscripts/lib/tushare_client.pyruns873 bytesscripts/lib/valuation.pyruns49,630 bytesscripts/lib/version.pyruns262 bytesscripts/merge_collections.pyruns18,410 bytesscripts/references/compliance_rules.yamlasset47,844 bytesscripts/references/event_type_taxonomy.yamlasset4,155 bytesscripts/valuation_calc.pyruns84,754 bytestests/conftest.pyruns2,485 bytestests/fixtures/__init__.pyruns34 bytestests/fixtures/collections.pyruns4,462 bytestests/fixtures/v0.2.4/588000_nav_history.jsonasset22,270 bytestests/fixtures/v0.2.4/classify_inputs.jsonasset115,592 bytestests/fixtures/v0.2.4/limit_up_trigger_kline.jsonasset4,269 bytestests/fixtures/v0.2.4/woge_limit_streak_kline.jsonasset3,999 bytestests/fixtures/v0.2.9/catl_2021_2023_snapshot.jsonasset833 bytestests/stock_testutil.pyruns1,821 bytestests/test_agent_facts.pyruns15,726 bytestests/test_analysis_schema.pyruns24,827 bytestests/test_analysis_templates.pyruns28,401 bytestests/test_atomic_json_contract.pyruns4,754 bytestests/test_attribution.pyruns3,132 bytestests/test_catalyst.pyruns8,854 bytestests/test_chain.pyruns3,909 bytestests/test_cli_dispatch.pyruns13,153 bytestests/test_cli_html.pyruns1,495 bytestests/test_climate.pyruns16,210 bytestests/test_collector.pyruns22,453 bytestests/test_collector_fixes.pyruns68,898 bytestests/test_collector_run_cache.pyruns10,871 bytestests/test_collector_zombie_cache.pyruns2,659 bytestests/test_cross_validation.pyruns8,258 bytestests/test_d3_sourcing_labels.pyruns5,138 bytestests/test_default_store.pyruns33,569 bytestests/test_disposition_hint.pyruns6,368 bytestests/test_entry_check_precision.pyruns6,376 bytestests/test_env.pyruns6,335 bytestests/test_events.pyruns41,787 bytestests/test_events_notice_types.pyruns9,233 bytestests/test_evidence.pyruns4,874 bytestests/test_fast_report_pipeline.pyruns8,484 bytestests/test_financial_rigor.pyruns3,926 bytestests/test_financials.pyruns19,081 bytestests/test_full_analysis_cli.pyruns4,964 bytestests/test_fusion.pyruns25,940 bytestests/test_futures_data.pyruns14,264 bytestests/test_html_charts.pyruns20,715 bytestests/test_industry_success_factors.pyruns8,170 bytestests/test_injection_shield.pyruns3,663 bytestests/test_insight_analysis_cli.pyruns12,534 bytestests/test_insight_discoveries_chains.pyruns33,106 bytestests/test_insight_report.pyruns22,033 bytestests/test_invest_cli_help.pyruns1,000 bytestests/test_lhb.pyruns17,731 bytestests/test_lint.pyruns43,670 bytestests/test_macro_extended.pyruns43,280 bytestests/test_manifest.pyruns4,000 bytestests/test_market_daily.pyruns2,288 bytestests/test_market_status_basis.pyruns5,014 bytestests/test_md_subset.pyruns2,962 bytestests/test_merge_collections.pyruns12,271 bytestests/test_news_scanner.pyruns5,463 bytestests/test_notice_body.pyruns9,215 bytestests/test_orchestrate_blocks.pyruns12,803 bytestests/test_parse_fetched_at_parity.pyruns1,517 bytestests/test_participant_scan.pyruns8,679 bytestests/test_pcr_freshness.pyruns31,015 bytestests/test_pe_loss_missing_consistency.pyruns9,784 bytestests/test_peer_cli.pyruns2,310 bytestests/test_peer_market_caps.pyruns4,147 bytestests/test_percentile_core_shared.pyruns2,475 bytestests/test_portfolio_review.pyruns13,147 bytestests/test_positions.pyruns13,105 bytestests/test_price_basis_label.pyruns6,234 bytestests/test_proxy.pyruns14,806 bytestests/test_qc_render_output_regression.pyruns17,464 bytestests/test_quality_check.pyruns7,094 bytestests/test_r12h.pyruns23,044 bytestests/test_redundancy_phase23.pyruns7,022 bytestests/test_render_code_review_fixes.pyruns31,079 bytestests/test_render_concise_fixes.pyruns4,173 bytestests/test_render_extras.pyruns11,666 bytestests/test_render_html.pyruns36,892 bytestests/test_render_v2.pyruns11,503 bytestests/test_report_audit.pyruns5,507 bytestests/test_report_diff_history.pyruns4,185 bytestests/test_report_filepath.pyruns2,831 bytestests/test_report_qc_gates.pyruns47,676 bytestests/test_report_snapshot.pyruns61,942 bytestests/test_rerank.pyruns7,694 bytestests/test_research.pyruns13,284 bytestests/test_research_profile.pyruns28,470 bytestests/test_risk_reward.pyruns3,443 bytestests/test_risk_scanner.pyruns11,694 bytestests/test_schema.pyruns7,075 bytestests/test_search_cache.pyruns2,136 bytestests/test_sector_sync_collector.pyruns17,596 bytestests/test_segments_collector.pyruns11,672 bytestests/test_store_diff.pyruns32,758 bytestests/test_store_pipeline.pyruns5,861 bytestests/test_store_public_connection.pyruns4,756 bytestests/test_style_match.pyruns10,638 bytestests/test_sw_member_all.pyruns24,804 bytestests/test_technical.pyruns20,584 bytestests/test_technical_v019.pyruns1,646 bytestests/test_test_hygiene.pyruns2,684 bytestests/test_thesis_dates.pyruns6,221 bytestests/test_tushare_client.pyruns20,131 bytestests/test_v013_phase1.pyruns26,824 bytestests/test_v013_phase2.pyruns24,220 bytestests/test_v013_phase3.pyruns12,480 bytestests/test_v013_phase4.pyruns8,685 bytestests/test_v014.pyruns10,329 bytestests/test_v015_fixes.pyruns32,327 bytestests/test_v017.pyruns24,980 bytestests/test_v017_e2e.pyruns2,872 bytestests/test_v018.pyruns79,171 bytestests/test_v026_p0_fixes.pyruns15,263 bytestests/test_v026_review_fixes.pyruns25,812 bytestests/test_v027_fixes.pyruns8,456 bytestests/test_v028_fixes.pyruns1,808 bytestests/test_v030_reading_layers.pyruns36,929 bytestests/test_v031_c1_fin_series.pyruns10,000 bytestests/test_v031_c2_rf.pyruns5,644 bytestests/test_v031_c3_bank_leverage.pyruns4,850 bytestests/test_v031_mainline_rev.pyruns23,046 bytestests/test_v031_priority_review.pyruns6,059 bytestests/test_v031_reading_surface.pyruns12,376 bytestests/test_valuation.pyruns53,480 bytestests/test_version.pyruns1,280 bytestests/test_version_sync.pyruns9,696 bytes../lib/references/delivery-qc.mddoc18,439 bytes../lib/references/report-conventions.mddoc61,501 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes../lib/report_qc.pyruns217,913 bytes
Read SKILL.md
# invest-a-stock 投研助手
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能主体操作为本地数据采集与计算(Bash/Python 引擎);新闻、研报与政策证据检索经 WebSearch/WebFetch 补充(平台不可用时标注数据缺口)
## OUTPUT CONTRACT(LAWs)
以下法则约束所有输出。违反即为 Bug。
### 契约 A:合规与非决策边界
**A1(原 LAW 6)— 禁止买卖建议、仓位建议。** 允许多情景估值参考价(须假设前提+概率权重+免责声明)。禁止无假设的单一目标价。
**A2(原 LAW 6a)— 允许「交易结构分析」**(假设一致性检验);详见 [references/trade-structure.md](references/trade-structure.md):
- 基于多情景估值推导**条件性估值区间**(标注锚定哪个情景 + 对应的假设前提)(v0.3.1 A5:原称「入场区间」,动作暗示强,已全链改称)View the complete source on GitHubinvest-hk-stock
When your agent uses it
港股研究(v2)——腾讯 r_hk 快照 / qfq K 线 / 东财财务 / 百度估值序列 / 南向资金 / A/H 比价 / 双标的 compare;九模块可映射维度 7/7,未接入维度显式声明。研究工具,非决策工具。触发词:港股/港股估值/AH比价/南向资金/港股对比
What it loads into context
Frontmatter
229 tokensAlways available to the agent
SKILL.md
2,175 tokensWhen the skill is activated
Reference documents
2,146 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 状态与边界(v2)
- CLI
- 南向资金口径(HK-3)
- 腾讯 r_hk 字段(2026-09-06 实测定稿,勿按社区整理修改)
- 港股风险层(报告模块 7.1 固定节)
- 口径参考
Scripts executed separately
scripts/hk.pyscripts/lib/__init__.pyscripts/lib/_invest_path.pyscripts/lib/hk_ah.pyscripts/lib/hk_calendar.pyscripts/lib/hk_codes.pyscripts/lib/hk_compare.pyscripts/lib/hk_financials.pyscripts/lib/hk_kline.pyscripts/lib/hk_quote.pyscripts/lib/hk_southbound.pyscripts/lib/hk_tushare.pyscripts/lib/hk_valuation.pyscripts/lib/hk_yfinance.pytests/_hk_cli.pytests/conftest.pytests/test_hk_ah.pytests/test_hk_ah_align.pytests/test_hk_calendar.pytests/test_hk_codes.pytests/test_hk_compare.pytests/test_hk_data.pytests/test_hk_quote.pytests/test_hk_southbound.py
Files
SKILL.mdcore6,671 bytesSKILL.mdcore6,671 bytesreferences/hk-caliber.mddoc6,275 bytesscripts/hk.pyruns58,815 bytesscripts/lib/__init__.pyruns388 bytesscripts/lib/_invest_path.pyruns772 bytesscripts/lib/hk_ah.pyruns22,294 bytesscripts/lib/hk_calendar.pyruns4,987 bytesscripts/lib/hk_codes.pyruns2,135 bytesscripts/lib/hk_compare.pyruns7,174 bytesscripts/lib/hk_financials.pyruns3,841 bytesscripts/lib/hk_kline.pyruns2,459 bytesscripts/lib/hk_quote.pyruns3,100 bytesscripts/lib/hk_southbound.pyruns22,726 bytesscripts/lib/hk_tushare.pyruns2,939 bytesscripts/lib/hk_valuation.pyruns2,630 bytesscripts/lib/hk_yfinance.pyruns3,321 bytestests/_hk_cli.pyruns1,231 bytestests/conftest.pyruns674 bytestests/test_hk_ah.pyruns18,104 bytestests/test_hk_ah_align.pyruns16,315 bytestests/test_hk_calendar.pyruns4,386 bytestests/test_hk_codes.pyruns1,412 bytestests/test_hk_compare.pyruns17,570 bytestests/test_hk_data.pyruns3,945 bytestests/test_hk_quote.pyruns2,546 bytestests/test_hk_southbound.pyruns28,404 bytes
Read SKILL.md
# invest-hk-stock — 港股数据引入与初步分析
> **工具约束说明**:frontmatter 的 `allowed-tools` 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能主体操作为本地数据采集与计算(`uv run python` CLI)。
## 状态与边界(v2)
- **模块覆盖(九模块映射,逐项可核)**:
**已覆盖 7/7 可映射维度** = 模块 0 研究问题卡(Claude 侧流程)/ 1 当前状态快照 / 3 市场结构(南向资金)/
5 市场分歧 / 6 左侧-右侧概率结构 / 7 风险与不确定性 / 8 附录。
**部分覆盖 1 项**:模块 4 静态基本面(财务摘要近 4 期;⚠<U+FE0F> **HK 无季报制度** → 期间口径为年报 + 中报,
与 A 股季频不可直接对齐)。
**声明未接入 3 项**(给原因,不静默缺节):模块 2 动态驱动分析(HK 无新闻/公告采集层)/
3b 机构观点与盈利预测(HK 一致预期源未接入)/ 3c 参与者行为扫描(CCASS 持仓、沽空源未接入)。
> 「可映射」判定口径 = **不需要新建数据源即可交付**的维度。每次 `report` 的正文最前输出View the complete source on GitHubSkills included
- invest-skills
- invest-a-discover-scan
- invest-a-etf
- invest-a-gap-scan
- invest-a-journal
- invest-a-pattern-scan
- invest-a-pulse
- invest-a-stock
- invest-hk-stock
Repository facts
- License
- MIT
- Created
- Jun 9, 2026
- Last pushed
- Oct 15, 2026
- Forks
- 3
- Open issues
- 2
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 59 notes
hooks/hooks.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/wb_bundle/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/wb_bundle/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:13Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:11Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:12Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:19Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:17Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:1Analysis incomplete: file exceeds text byte budgetskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:35Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:33Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:34Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:45Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:43Analysis incomplete: physical or joined line exceeds character limitskills/invest-a-stock/scripts/references/compliance_rules.yaml:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-stock/scripts/references/compliance_rules.yaml:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-stock/scripts/references/compliance_rules.yaml:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-discover-scan/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-etf/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/invest-a-etf/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 16 broad permissionsin 8 files: skills/invest-a-discover-scan/SKILL.md:1 skills/invest-a-etf/SKILL.md:1 skills/invest-a-gap-scan/SKILL.md:1 and 5 more
- 25 dangerous shell commandsin 4 files: skills/lib/tests/test_sector_sync.py:178 wb_bundle/bootstrap.sh:28 skills/invest-a-stock/tests/test_sector_sync_collector.py:368 and 1 more
- 922 network referencesin 63 files: skills/invest-a-etf/scripts/lib/etf_data.py:236 skills/invest-a-stock/tests/test_proxy.py:15 skills/invest-a-etf/tests/test_etf_html.py:867 and 60 more
- 13 obfuscation signalsin 4 files: skills/invest-a-etf/scripts/lib/assets/chart.umd.min.js:13 skills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js:35 skills/lib/report_qc.py:1061 and 1 more
- No instruction overrides
- 848 executable scriptsin 463 files: skills/lib/report_qc.py:1 skills/invest-a-stock/scripts/invest.py:1 scripts/archive/backtest_calendar.py:1 and 460 more
- 270 references to secretsin 46 files: skills/invest-a-stock/tests/test_proxy.py:23 skills/lib/env.py:3 skills/invest-a-stock/tests/test_env.py:23 and 43 more
- No requests to vote in Hot
Show all 2,094 signals by file
.claude-plugin/marketplace.json
- Network accessline 3
"owner": { "name": "invest:a-stock", "url": "https://github.com/Veblin/invest-skills" - Network accessline 4
"name": "invest:a-stock", "url": "https://github.com/Veblin/invest-skills" }, - Network accessline 5
"url": "https://github.com/Veblin/invest-skills" - Network accessline 15
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 16
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 17
"url": "https://github.com/Veblin" - Network accessline 19
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 20
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "equity-research", "financial-analysis", "a-share", "claude-code", "learning"] - Network accessline 21
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 28
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 29
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 30
"url": "https://github.com/Veblin" - Network accessline 32
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 33
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "gap-scan", "a-share", "claude-code", "learning"] - Network accessline 34
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 41
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 42
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 43
"url": "https://github.com/Veblin" - Network accessline 45
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 46
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "trading-journal", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 47
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 54
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 55
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 56
"url": "https://github.com/Veblin" - Network accessline 58
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 59
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "etf", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 60
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 67
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 68
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 69
"url": "https://github.com/Veblin" - Network accessline 71
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 72
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "pattern-scan", "a-share", "claude-code", "learning"] - Network accessline 73
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 80
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 81
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 82
"url": "https://github.com/Veblin" - Network accessline 84
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 85
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "market-sentiment", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 86
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 93
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 94
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 95
"url": "https://github.com/Veblin" - Network accessline 97
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 98
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "hong-kong-stock", "hk-stock", "claude-code", "learning"] - Network accessline 99
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 106
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 107
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 108
"url": "https://github.com/Veblin" - Network accessline 110
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 111
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-screener", "valuation", "discovery", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 112
"homepage": "https://github.com/Veblin/invest-skills",
.claude-plugin/marketplace.json.in
- Network accessline 3
"owner": { "name": "invest:a-stock", "url": "https://github.com/Veblin/invest-skills" - Network accessline 4
"name": "invest:a-stock", "url": "https://github.com/Veblin/invest-skills" }, - Network accessline 5
"url": "https://github.com/Veblin/invest-skills" - Network accessline 15
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 16
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 17
"url": "https://github.com/Veblin" - Network accessline 19
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 20
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "equity-research", "financial-analysis", "a-share", "claude-code", "learning"] - Network accessline 21
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 28
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 29
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 30
"url": "https://github.com/Veblin" - Network accessline 32
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 33
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "gap-scan", "a-share", "claude-code", "learning"] - Network accessline 34
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 41
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 42
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 43
"url": "https://github.com/Veblin" - Network accessline 45
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 46
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "trading-journal", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 47
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 54
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 55
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 56
"url": "https://github.com/Veblin" - Network accessline 58
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 59
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "etf", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 60
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 67
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 68
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 69
"url": "https://github.com/Veblin" - Network accessline 71
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 72
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-analysis", "china-stock", "pattern-scan", "a-share", "claude-code", "learning"] - Network accessline 73
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 80
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 81
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 82
"url": "https://github.com/Veblin" - Network accessline 84
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 85
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "market-sentiment", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 86
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 93
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 94
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 95
"url": "https://github.com/Veblin" - Network accessline 97
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 98
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "hong-kong-stock", "hk-stock", "claude-code", "learning"] - Network accessline 99
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 106
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 107
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 108
"url": "https://github.com/Veblin" - Network accessline 110
"source": "./", "category": "finance", "homepage": "https://github.com/Veblin/invest-skills", - Network accessline 111
"category": "finance", "homepage": "https://github.com/Veblin/invest-skills", "tags": ["investment", "stock-screener", "valuation", "discovery", "china-stock", "a-share", "claude-code", "learning"] - Network accessline 112
"homepage": "https://github.com/Veblin/invest-skills",
.claude-plugin/plugin.json
- Network accessline 5
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 6
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 7
"url": "https://github.com/Veblin" - Network accessline 8
}, "homepage": "https://github.com/Veblin/invest-skills", "repository": "https://github.com/Veblin/invest-skills", - Network accessline 9
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 10
"repository": "https://github.com/Veblin/invest-skills",
.claude-plugin/plugin.json.in
- Network accessline 5
"author": { "name": "Veblin", "url": "https://github.com/Veblin" - Network accessline 6
"name": "Veblin", "url": "https://github.com/Veblin" }, - Network accessline 7
"url": "https://github.com/Veblin" - Network accessline 8
}, "homepage": "https://github.com/Veblin/invest-skills", "repository": "https://github.com/Veblin/invest-skills", - Network accessline 9
"homepage": "https://github.com/Veblin/invest-skills", - Network accessline 10
"repository": "https://github.com/Veblin/invest-skills",
scripts/archive/backtest_calendar.py
scripts/wb_bundle/README-安装.md
scripts/wb_bundle/bootstrap.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 26
echo "" echo "macOS / Linux —— 终端执行:" echo " curl -LsSf https://astral.sh/uv/install.sh | sh" - Network accessline 27
echo "macOS / Linux —— 终端执行:" echo " curl -LsSf https://astral.sh/uv/install.sh | sh" echo " # 装完后新开终端,或执行: source ~/.local/bin/env" - Dangerous shell operationline 28
echo " curl -LsSf https://astral.sh/uv/install.sh | sh" - Network accessline 28
echo " curl -LsSf https://astral.sh/uv/install.sh | sh" - Network accessline 33
echo "" echo ">> 检测到 --install,正在自动安装 uv ..." curl -LsSf https://astral.sh/uv/install.sh | sh - Network accessline 34
echo ">> 检测到 --install,正在自动安装 uv ..." curl -LsSf https://astral.sh/uv/install.sh | sh UV="$(find_uv)" - Dangerous shell operationline 35
curl -LsSf https://astral.sh/uv/install.sh | sh - Network accessline 35
curl -LsSf https://astral.sh/uv/install.sh | sh - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted]
skills/invest-a-discover-scan/SKILL.md
skills/invest-a-discover-scan/scripts/discover_fillback.py
skills/invest-a-discover-scan/scripts/discover_scan.py
skills/invest-a-discover-scan/scripts/lib/__init__.py
skills/invest-a-discover-scan/scripts/lib/_invest_path.py
skills/invest-a-discover-scan/scripts/lib/lenses.py
skills/invest-a-discover-scan/scripts/lib/pool.py
skills/invest-a-discover-scan/scripts/lib/quality.py
skills/invest-a-discover-scan/scripts/lib/snapshot.py
skills/invest-a-discover-scan/scripts/lib/sources.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Network accessline 307
if not key: raise RuntimeError("无 FRED_API_KEY") url = (f"https://api.stlouisfed.org/fred/series/observations?series_id=DGS10" - Network accessline 307
if not key: raise RuntimeError("无 FRED_API_KEY") url = (f"https://api.stlouisfed.org/fred/series/observations?series_id=DGS10" - Network accessline 308
[Credential-related source omitted] - Network accessline 308
[Credential-related source omitted] - Access to secretsline 308
[Credential-related source omitted] - Access to secretsline 308
[Credential-related source omitted] - Network accessline 309
[Credential-related source omitted] - Network accessline 309
[Credential-related source omitted] - Network accessline 310
[Credential-related source omitted] - Network accessline 310
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Network accessline 311
with urllib.request.urlopen(url, timeout=20) as resp: # noqa: S310 固定官方主机 - Network accessline 311
with urllib.request.urlopen(url, timeout=20) as resp: # noqa: S310 固定官方主机
skills/invest-a-discover-scan/scripts/lib/sources_hk.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 173
chunk = symbols[i: i + BATCH_SIZE] CALL_COUNT["r_hk"] += 1 url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) - Network accessline 173
chunk = symbols[i: i + BATCH_SIZE] CALL_COUNT["r_hk"] += 1 url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) - Network accessline 174
CALL_COUNT["r_hk"] += 1 url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) try: - Network accessline 174
CALL_COUNT["r_hk"] += 1 url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) try: - Network accessline 175
url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 175
url = "https://qt.gtimg.cn/q=" + ",".join(f"r_hk{s}" for s in chunk) try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 176
try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) raw = urllib.request.urlopen(req, timeout=20).read().decode("gbk", errors="replace") - Network accessline 176
try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) raw = urllib.request.urlopen(req, timeout=20).read().decode("gbk", errors="replace") - Network accessline 177
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 177
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 178
raw = urllib.request.urlopen(req, timeout=20).read().decode("gbk", errors="replace") - Network accessline 178
raw = urllib.request.urlopen(req, timeout=20).read().decode("gbk", errors="replace")
skills/invest-a-discover-scan/tests/_scan_cli.py
skills/invest-a-discover-scan/tests/conftest.py
skills/invest-a-discover-scan/tests/test_cli.py
skills/invest-a-discover-scan/tests/test_discover_pool.py
skills/invest-a-discover-scan/tests/test_lenses.py
skills/invest-a-discover-scan/tests/test_quality.py
skills/invest-a-discover-scan/tests/test_snapshot.py
skills/invest-a-discover-scan/tests/test_sources.py
skills/invest-a-discover-scan/tests/test_sources_hk.py
skills/invest-a-etf/SKILL.md
skills/invest-a-etf/events/512660.json
- Network accessline 1
{"date": "2026-01-07", "event": "特朗普提出 2027 财年美国军费从 1 万亿美元大幅提升至 1.5 万亿美元(较原计划 +66%),全球军费进入上升通道预期升温", "source_url": "http://www.nbd.com.cn/articles/2026-01-08/4211999.html", "published_date": "2026-01-08", "confidence": "二手"} - Network accessline 1
{"date": "2026-01-07", "event": "特朗普提出 2027 财年美国军费从 1 万亿美元大幅提升至 1.5 万亿美元(较原计划 +66%),全球军费进入上升通道预期升温", "source_url": "http://www.nbd.com.cn/articles/2026-01-08/4211999.html", "published_date": "2026-01-08", "confidence": "二手"} - Network accessline 2
{"date": "2026-01-12", "event": "军工开年暴涨:军工ETF华宝(512810)单周狂飙 13.57% 刷新历史纪录,华力创通 20CM 涨停,航天电子/中国卫通 7 天 5 板,商业航天成分股批量新高", "source_url": "https://www.sohu.com/a/975157794_122014422", "published_date": "2026-01-12", "confidence": "二手"} - Network accessline 2
{"date": "2026-01-12", "event": "军工开年暴涨:军工ETF华宝(512810)单周狂飙 13.57% 刷新历史纪录,华力创通 20CM 涨停,航天电子/中国卫通 7 天 5 板,商业航天成分股批量新高", "source_url": "https://www.sohu.com/a/975157794_122014422", "published_date": "2026-01-12", "confidence": "二手"} - Network accessline 3
{"date": "2026-01-13", "event": "长征八号甲运载火箭在海南商业航天发射场成功发射卫星互联网低轨 18 组卫星", "source_url": "https://www.sohu.com/a/975884496_122014422", "published_date": "2026-01-14", "confidence": "二手"} - Network accessline 3
{"date": "2026-01-13", "event": "长征八号甲运载火箭在海南商业航天发射场成功发射卫星互联网低轨 18 组卫星", "source_url": "https://www.sohu.com/a/975884496_122014422", "published_date": "2026-01-14", "confidence": "二手"} - Network accessline 4
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,A 股高风偏板块超跌反弹", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 4
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,A 股高风偏板块超跌反弹", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 5
{"date": "2026-07-13", "event": "军工领跌全市场(卫星相关指数跌超 8%):长征十号乙火箭海上回收成功后的「利好出尽」卖出 + 大盘系统性调整 + 前期获利盘集中兑现", "source_url": "https://fund.eastmoney.com/a/202607133804260125.html", "published_date": "2026-07-13", "confidence": "二手"} - Network accessline 5
{"date": "2026-07-13", "event": "军工领跌全市场(卫星相关指数跌超 8%):长征十号乙火箭海上回收成功后的「利好出尽」卖出 + 大盘系统性调整 + 前期获利盘集中兑现", "source_url": "https://fund.eastmoney.com/a/202607133804260125.html", "published_date": "2026-07-13", "confidence": "二手"} - Network accessline 6
{"date": "2026-07-14", "event": "板块继续回调(-2.85%),但 512660 单日获约 2.28 亿元资金净流入(逆市布局),机构认为调整主要为情绪与交易层面波动", "source_url": "https://www.163.com/dy/article/L1QS4PGM0512B07B.html", "published_date": "2026-07-14", "confidence": "二手"} - Network accessline 6
{"date": "2026-07-14", "event": "板块继续回调(-2.85%),但 512660 单日获约 2.28 亿元资金净流入(逆市布局),机构认为调整主要为情绪与交易层面波动", "source_url": "https://www.163.com/dy/article/L1QS4PGM0512B07B.html", "published_date": "2026-07-14", "confidence": "二手"}
skills/invest-a-etf/events/562590.json
- Network accessline 1
{"date": "2025-08-22", "event": "AI 算力产业高景气 + 国产替代驱动 2025 年 8 月科技牛,云计算/算力主题指数单月大涨(光模块/CPO/AI 服务器全线爆发)", "source_url": "https://stock.jrj.com.cn/2025/08/25080952657259.shtml", "published_date": "2025-08-25", "confidence": "二手"} - Network accessline 1
{"date": "2025-08-22", "event": "AI 算力产业高景气 + 国产替代驱动 2025 年 8 月科技牛,云计算/算力主题指数单月大涨(光模块/CPO/AI 服务器全线爆发)", "source_url": "https://stock.jrj.com.cn/2025/08/25080952657259.shtml", "published_date": "2025-08-25", "confidence": "二手"} - Network accessline 2
{"date": "2025-08-28", "event": "寒武纪(算力权重股)股价超越贵州茅台登顶 A 股「股王」,半导体龙头带动指数当日大涨", "source_url": "https://www.21jingji.com/article/20250828/herald/d188455eee7415b05031ad8e820d7f8a.html", "published_date": "2025-08-28", "confidence": "二手"} - Network accessline 2
{"date": "2025-08-28", "event": "寒武纪(算力权重股)股价超越贵州茅台登顶 A 股「股王」,半导体龙头带动指数当日大涨", "source_url": "https://www.21jingji.com/article/20250828/herald/d188455eee7415b05031ad8e820d7f8a.html", "published_date": "2025-08-28", "confidence": "二手"} - Network accessline 3
{"date": "2025-09-24", "event": "阿里云栖大会开幕(吴泳铭:在 3800 亿 CAPEX 基础上继续加码 AI 投入)+ 美光财报超预期 + 存储涨价潮 + 国产光刻机突破,芯片/算力板块爆发", "source_url": "https://finance.eastmoney.com/a/202509243522457848.html", "published_date": "2025-09-24", "confidence": "二手"} - Network accessline 3
{"date": "2025-09-24", "event": "阿里云栖大会开幕(吴泳铭:在 3800 亿 CAPEX 基础上继续加码 AI 投入)+ 美光财报超预期 + 存储涨价潮 + 国产光刻机突破,芯片/算力板块爆发", "source_url": "https://finance.eastmoney.com/a/202509243522457848.html", "published_date": "2025-09-24", "confidence": "二手"} - Network accessline 4
{"date": "2026-03-03", "event": "中东局势恶化、国际油价突破每桶 100 美元,科技/算力板块 3 月调整在主流宽基中跌幅最深(科创50 月度 -15.57%)", "source_url": "https://finance.sina.com.cn/money/fund/jjgsgd/2026-04-30/doc-inhwhraa6184231.shtml", "published_date": "2026-04-30", "confiden - Network accessline 4
{"date": "2026-03-03", "event": "中东局势恶化、国际油价突破每桶 100 美元,科技/算力板块 3 月调整在主流宽基中跌幅最深(科创50 月度 -15.57%)", "source_url": "https://finance.sina.com.cn/money/fund/jjgsgd/2026-04-30/doc-inhwhraa6184231.shtml", "published_date": "2026-04-30", "confiden - Network accessline 5
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,科技板块超跌反弹(半导体权重约 70% 高弹性)", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 5
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,科技板块超跌反弹(半导体权重约 70% 高弹性)", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 6
{"date": "2026-06-29", "event": "国务院常务会议专题研究人工智能产业发展(加快关键技术攻关、推进超大规模智算集群建设),云计算/算力板块大涨", "source_url": "https://www.nbd.com.cn/articles/2026-06-30/4442323.html", "published_date": "2026-06-30", "confidence": "二手"} - Network accessline 6
{"date": "2026-06-29", "event": "国务院常务会议专题研究人工智能产业发展(加快关键技术攻关、推进超大规模智算集群建设),云计算/算力板块大涨", "source_url": "https://www.nbd.com.cn/articles/2026-06-30/4442323.html", "published_date": "2026-06-30", "confidence": "二手"} - Network accessline 7
{"date": "2026-07-02", "event": "海外 AI 叙事动摇(Meta 进军云基建被解读为算力过剩、黑石 QTS 终止超千亿美元数据中心项目,费城半导体指数大跌 6%+),云计算 ETF 单日 -9.32%", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二 - Network accessline 7
{"date": "2026-07-02", "event": "海外 AI 叙事动摇(Meta 进军云基建被解读为算力过剩、黑石 QTS 终止超千亿美元数据中心项目,费城半导体指数大跌 6%+),云计算 ETF 单日 -9.32%", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二 - Network accessline 8
{"date": "2026-07-16", "event": "长鑫科技启动科创板申购(发行价 8.66 元,募资约 579 亿元,科创板史上第二大 IPO),超级 IPO 流动性虹吸担忧压制算力/半导体板块", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二手"} - Network accessline 8
{"date": "2026-07-16", "event": "长鑫科技启动科创板申购(发行价 8.66 元,募资约 579 亿元,科创板史上第二大 IPO),超级 IPO 流动性虹吸担忧压制算力/半导体板块", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二手"} - Network accessline 9
{"date": "2026-07-21", "event": "A 股 V 型绝地反击:国新/诚通等国家队资金累计入市超 500 亿元、证监会召开投资者座谈会,云计算 ETF 单日 +15.49%", "source_url": "https://stcn.com/article/detail/4033252.html", "published_date": "2026-07-22", "confidence": "二手"} - Network accessline 9
{"date": "2026-07-21", "event": "A 股 V 型绝地反击:国新/诚通等国家队资金累计入市超 500 亿元、证监会召开投资者座谈会,云计算 ETF 单日 +15.49%", "source_url": "https://stcn.com/article/detail/4033252.html", "published_date": "2026-07-22", "confidence": "二手"} - Network accessline 10
{"date": "2026-07-28", "event": "英伟达推进总规模超 7500 亿美元 AI 基础设施交易,市场担忧「循环融资」人为抬高海外 AI 需求与估值", "source_url": "https://finance.eastmoney.com/a/202607283823348178.html", "published_date": "2026-07-28", "confidence": "二手"} - Network accessline 10
{"date": "2026-07-28", "event": "英伟达推进总规模超 7500 亿美元 AI 基础设施交易,市场担忧「循环融资」人为抬高海外 AI 需求与估值", "source_url": "https://finance.eastmoney.com/a/202607283823348178.html", "published_date": "2026-07-28", "confidence": "二手"} - Network accessline 11
{"date": "2026-07-30", "event": "国家发改委形势通报会:深入实施「东数西算」工程、统筹布局有序建设算力设施、加快人工智能法立法进程", "source_url": "https://www.cnfin.com/hg-lb/detail/20260731/4448865_1.html", "published_date": "2026-07-31", "confidence": "二手"} - Network accessline 11
{"date": "2026-07-30", "event": "国家发改委形势通报会:深入实施「东数西算」工程、统筹布局有序建设算力设施、加快人工智能法立法进程", "source_url": "https://www.cnfin.com/hg-lb/detail/20260731/4448865_1.html", "published_date": "2026-07-31", "confidence": "二手"} - Network accessline 12
{"date": "2026-07-30", "event": "科创50 单日急挫逾 6% 跌至 4 月底以来最低,7 月累计跌近 29%;分析认为芯片股疲弱更像结构性轮动与全球 AI 交易去杠杆", "source_url": "https://www.aastocks.com/tc/stocks/news/aafn-con/NOW.1535723/recommend-news/AAFN", "published_date": "2026-07-30", "confide - Network accessline 12
{"date": "2026-07-30", "event": "科创50 单日急挫逾 6% 跌至 4 月底以来最低,7 月累计跌近 29%;分析认为芯片股疲弱更像结构性轮动与全球 AI 交易去杠杆", "source_url": "https://www.aastocks.com/tc/stocks/news/aafn-con/NOW.1535723/recommend-news/AAFN", "published_date": "2026-07-30", "confide - Network accessline 13
{"date": "2026-08-05", "event": "北美「四朵云」Q2 财报超预期(AWS/微软 Azure/谷歌云高增)+ 海外云厂商 CAPEX 提速(上半年四家合计 2927 亿美元 +83.64%),云计算板块强势反弹", "source_url": "https://www.jiemian.com/article/14870693.html", "published_date": "2026-08-04", "confidence": "二手"} - Network accessline 13
{"date": "2026-08-05", "event": "北美「四朵云」Q2 财报超预期(AWS/微软 Azure/谷歌云高增)+ 海外云厂商 CAPEX 提速(上半年四家合计 2927 亿美元 +83.64%),云计算板块强势反弹", "source_url": "https://www.jiemian.com/article/14870693.html", "published_date": "2026-08-04", "confidence": "二手"}
skills/invest-a-etf/events/588000.json
- Network accessline 1
{"date": "2025-08-22", "event": "AI 算力产业高景气 + 国产替代驱动科创50 8 月单月大涨约 28% 创历史最大月涨幅(光模块/CPO/AI 服务器全线爆发)", "source_url": "https://stock.jrj.com.cn/2025/08/25080952657259.shtml", "published_date": "2025-08-25", "confidence": "二手"} - Network accessline 1
{"date": "2025-08-22", "event": "AI 算力产业高景气 + 国产替代驱动科创50 8 月单月大涨约 28% 创历史最大月涨幅(光模块/CPO/AI 服务器全线爆发)", "source_url": "https://stock.jrj.com.cn/2025/08/25080952657259.shtml", "published_date": "2025-08-25", "confidence": "二手"} - Network accessline 2
{"date": "2025-08-28", "event": "寒武纪(科创50 权重股)股价超越贵州茅台登顶 A 股「股王」,半导体龙头带动指数当日大涨创新高", "source_url": "https://www.21jingji.com/article/20250828/herald/d188455eee7415b05031ad8e820d7f8a.html", "published_date": "2025-08-28", "confidence": "二手"} - Network accessline 2
{"date": "2025-08-28", "event": "寒武纪(科创50 权重股)股价超越贵州茅台登顶 A 股「股王」,半导体龙头带动指数当日大涨创新高", "source_url": "https://www.21jingji.com/article/20250828/herald/d188455eee7415b05031ad8e820d7f8a.html", "published_date": "2025-08-28", "confidence": "二手"} - Network accessline 3
{"date": "2026-03-03", "event": "中东局势恶化、国际油价突破每桶 100 美元,科创50 3 月调整在主流宽基中跌幅最深(月度 -15.57%,2 月以来最大回撤 20.72%)", "source_url": "https://finance.sina.com.cn/money/fund/jjgsgd/2026-04-30/doc-inhwhraa6184231.shtml", "published_date": "2026-04-30", - Network accessline 3
{"date": "2026-03-03", "event": "中东局势恶化、国际油价突破每桶 100 美元,科创50 3 月调整在主流宽基中跌幅最深(月度 -15.57%,2 月以来最大回撤 20.72%)", "source_url": "https://finance.sina.com.cn/money/fund/jjgsgd/2026-04-30/doc-inhwhraa6184231.shtml", "published_date": "2026-04-30", - Network accessline 4
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,科创50 单日大涨超 3% 开启 4 月超跌反弹(半导体权重约 70% 高弹性)", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 4
{"date": "2026-04-08", "event": "地缘冲突显著缓和、油价从高位回落,科创50 单日大涨超 3% 开启 4 月超跌反弹(半导体权重约 70% 高弹性)", "source_url": "https://finance.eastmoney.com/a/202604083697641478.html", "published_date": "2026-04-08", "confidence": "二手"} - Network accessline 5
{"date": "2026-06-15", "event": "科创50 指数 2026 上半年定期调整生效:华虹公司/源杰科技/摩尔线程/沐曦股份调入,华大智造/天岳先进/特宝生物/三一重能调出(6/12 收市后生效)", "source_url": "https://www.cnfin.com/announ/detail/index.html?id=833408363293&code=000016&dannoun=indexdetail&announ=index", " - Network accessline 5
{"date": "2026-06-15", "event": "科创50 指数 2026 上半年定期调整生效:华虹公司/源杰科技/摩尔线程/沐曦股份调入,华大智造/天岳先进/特宝生物/三一重能调出(6/12 收市后生效)", "source_url": "https://www.cnfin.com/announ/detail/index.html?id=833408363293&code=000016&dannoun=indexdetail&announ=index", " - Network accessline 6
{"date": "2026-06-29", "event": "国务院常务会议专题研究人工智能产业发展(加快关键技术攻关、推进超大规模智算集群建设),科创50 大涨创历史新高,上半年累计涨幅 64.25%", "source_url": "https://www.nbd.com.cn/articles/2026-06-30/4442323.html", "published_date": "2026-06-30", "confidence": "二手"} - Network accessline 6
{"date": "2026-06-29", "event": "国务院常务会议专题研究人工智能产业发展(加快关键技术攻关、推进超大规模智算集群建设),科创50 大涨创历史新高,上半年累计涨幅 64.25%", "source_url": "https://www.nbd.com.cn/articles/2026-06-30/4442323.html", "published_date": "2026-06-30", "confidence": "二手"} - Network accessline 7
{"date": "2026-07-02", "event": "海外 AI 叙事动摇(Meta 进军云基建被解读为算力过剩、黑石 QTS 终止超千亿美元数据中心项目,费城半导体指数大跌 6%+),科创50 单日 -7.70% 创年内最大单日跌幅", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confiden - Network accessline 7
{"date": "2026-07-02", "event": "海外 AI 叙事动摇(Meta 进军云基建被解读为算力过剩、黑石 QTS 终止超千亿美元数据中心项目,费城半导体指数大跌 6%+),科创50 单日 -7.70% 创年内最大单日跌幅", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confiden - Network accessline 8
{"date": "2026-07-16", "event": "长鑫科技启动科创板申购(发行价 8.66 元,募资约 579 亿元,科创板史上第二大 IPO),超级 IPO 流动性虹吸担忧压制半导体板块", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二手"} - Network accessline 8
{"date": "2026-07-16", "event": "长鑫科技启动科创板申购(发行价 8.66 元,募资约 579 亿元,科创板史上第二大 IPO),超级 IPO 流动性虹吸担忧压制半导体板块", "source_url": "https://finance.eastmoney.com/a/202607233818874394.html", "published_date": "2026-07-23", "confidence": "二手"} - Network accessline 9
{"date": "2026-07-21", "event": "A 股 V 型绝地反击:国新/诚通等国家队资金累计入市超 500 亿元、证监会召开投资者座谈会,科创50 大涨 10.73% 创年内最大单日涨幅", "source_url": "https://stcn.com/article/detail/4033252.html", "published_date": "2026-07-22", "confidence": "二手"} - Network accessline 9
{"date": "2026-07-21", "event": "A 股 V 型绝地反击:国新/诚通等国家队资金累计入市超 500 亿元、证监会召开投资者座谈会,科创50 大涨 10.73% 创年内最大单日涨幅", "source_url": "https://stcn.com/article/detail/4033252.html", "published_date": "2026-07-22", "confidence": "二手"} - Network accessline 10
{"date": "2026-07-28", "event": "英伟达推进总规模超 7500 亿美元 AI 基础设施交易,市场担忧「循环融资」人为抬高海外 AI 需求与估值,科创50 再跌 6.32%", "source_url": "https://finance.eastmoney.com/a/202607283823348178.html", "published_date": "2026-07-28", "confidence": "二手"} - Network accessline 10
{"date": "2026-07-28", "event": "英伟达推进总规模超 7500 亿美元 AI 基础设施交易,市场担忧「循环融资」人为抬高海外 AI 需求与估值,科创50 再跌 6.32%", "source_url": "https://finance.eastmoney.com/a/202607283823348178.html", "published_date": "2026-07-28", "confidence": "二手"} - Network accessline 11
{"date": "2026-07-30", "event": "科创50 单日急挫逾 6% 跌至 4 月底以来最低,7 月累计跌近 29%(此前三个月曾飙升约 75%);分析认为芯片股疲弱更像结构性轮动与全球 AI 交易去杠杆", "source_url": "https://www.aastocks.com/tc/stocks/news/aafn-con/NOW.1535723/recommend-news/AAFN", "published_date": "2026-0 - Network accessline 11
{"date": "2026-07-30", "event": "科创50 单日急挫逾 6% 跌至 4 月底以来最低,7 月累计跌近 29%(此前三个月曾飙升约 75%);分析认为芯片股疲弱更像结构性轮动与全球 AI 交易去杠杆", "source_url": "https://www.aastocks.com/tc/stocks/news/aafn-con/NOW.1535723/recommend-news/AAFN", "published_date": "2026-0
skills/invest-a-etf/events/README.md
- Network accessline 6
{"date": "2026-05-11", "event": "科创50 指数创历史新高", "source_url": "https://example.com/x", "published_date": "2026-05-11", "confidence": "一手"} - Network accessline 6
{"date": "2026-05-11", "event": "科创50 指数创历史新高", "source_url": "https://example.com/x", "published_date": "2026-05-11", "confidence": "一手"}
skills/invest-a-etf/scripts/__init__.py
skills/invest-a-etf/scripts/etf.py
skills/invest-a-etf/scripts/lib/__init__.py
skills/invest-a-etf/scripts/lib/_invest_path.py
skills/invest-a-etf/scripts/lib/assets/chart.umd.min.js
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 3
* Original file: /npm/chart.js@4.4.0/dist/chart.umd.js * * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - Network accessline 3
* Original file: /npm/chart.js@4.4.0/dist/chart.umd.js * * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - Network accessline 4
* * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files */ - Network accessline 4
* * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files */ - Network accessline 5
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - Network accessline 5
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - Network accessline 7
/*! * Chart.js v4.4.0 * https://www.chartjs.org - Network accessline 7
/*! * Chart.js v4.4.0 * https://www.chartjs.org - Network accessline 8
* Chart.js v4.4.0 * https://www.chartjs.org * (c) 2023 Chart.js Contributors - Network accessline 8
* Chart.js v4.4.0 * https://www.chartjs.org * (c) 2023 Chart.js Contributors - Network accessline 9
* https://www.chartjs.org - Network accessline 9
* https://www.chartjs.org - Possible obfuscationline 13
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Obje - Possible obfuscationline 13
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Obje - Network accessline 14
/*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme - Network accessline 14
/*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme - Network accessline 15
* @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme * (c) 2023 Jukka Kurkela - Network accessline 15
* @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme * (c) 2023 Jukka Kurkela - Network accessline 16
* https://github.com/kurkle/color#readme - Network accessline 16
* https://github.com/kurkle/color#readme - Possible obfuscationline 19
*/function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t), - Possible obfuscationline 19
*/function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),
skills/invest-a-etf/scripts/lib/etf_data.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 236
{"claim": "基金名称/代码/上市地", "source_type": "上交所基金公告(做市服务,2026-06-11)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", - Network accessline 236
{"claim": "基金名称/代码/上市地", "source_type": "上交所基金公告(做市服务,2026-06-11)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", - Network accessline 237
"source_type": "上交所基金公告(做市服务,2026-06-11)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", "as_of": "2026-06-11", - Network accessline 237
"source_type": "上交所基金公告(做市服务,2026-06-11)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", "as_of": "2026-06-11", - Network accessline 238
"url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", - Network accessline 238
"url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260611_10821513.shtml", - Network accessline 244
{"claim": "资产类型/复制方式/基准", "source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 244
{"claim": "资产类型/复制方式/基准", "source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 245
"source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", "as_of": "2024-06-20", - Network accessline 245
"source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", "as_of": "2024-06-20", - Network accessline 246
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 246
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 263
{"claim": "基金名称/主代码/上市地/生效日", "source_type": "基金 2025 年年度报告(管理人华夏基金,披露 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 263
{"claim": "基金名称/主代码/上市地/生效日", "source_type": "基金 2025 年年度报告(管理人华夏基金,披露 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 264
"source_type": "基金 2025 年年度报告(管理人华夏基金,披露 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", "as_of": "2025-12-31(报告期)", "quote": "基金名称 华夏中证 5G 通信主 - Network accessline 264
"source_type": "基金 2025 年年度报告(管理人华夏基金,披露 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", "as_of": "2025-12-31(报告期)", "quote": "基金名称 华夏中证 5G 通信主 - Network accessline 265
"url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 265
"url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 286
{"claim": "基金名称/代码/上市地", "source_type": "上交所基金公告(做市服务,2026-05-28)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", - Network accessline 286
{"claim": "基金名称/代码/上市地", "source_type": "上交所基金公告(做市服务,2026-05-28)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", - Network accessline 287
"source_type": "上交所基金公告(做市服务,2026-05-28)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", "as_of": "2026-05-28", "quote": "上证红利交易型开放式指数证券投资基金(基金代码:510880)提供主做市服 - Network accessline 287
"source_type": "上交所基金公告(做市服务,2026-05-28)", "url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", "as_of": "2026-05-28", "quote": "上证红利交易型开放式指数证券投资基金(基金代码:510880)提供主做市服 - Network accessline 288
"url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", - Network accessline 288
"url": "https://www.sse.com.cn/disclosure/announcement/general/jjzssgg/c/c_20260528_10820053.shtml", - Network accessline 293
{"claim": "资产类型/策略(因子)/标的指数", "source_type": "更新招募说明书(管理人华泰柏瑞,2026 年第 1 号,2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 293
{"claim": "资产类型/策略(因子)/标的指数", "source_type": "更新招募说明书(管理人华泰柏瑞,2026 年第 1 号,2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 294
"source_type": "更新招募说明书(管理人华泰柏瑞,2026 年第 1 号,2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", "as_of": "2026-06-13", - Network accessline 294
"source_type": "更新招募说明书(管理人华泰柏瑞,2026 年第 1 号,2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", "as_of": "2026-06-13", - Network accessline 295
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 295
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 332
{"claim": "基金名称/主代码/管理人/托管人/生效日/上市地/运作方式", "source_type": "基金 2026 年中期报告(管理人华夏基金;报告期末 2026-06-30)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 332
{"claim": "基金名称/主代码/管理人/托管人/生效日/上市地/运作方式", "source_type": "基金 2026 年中期报告(管理人华夏基金;报告期末 2026-06-30)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 333
"source_type": "基金 2026 年中期报告(管理人华夏基金;报告期末 2026-06-30)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末;渠道披露 2026-08-31)", - Network accessline 333
"source_type": "基金 2026 年中期报告(管理人华夏基金;报告期末 2026-06-30)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末;渠道披露 2026-08-31)", - Network accessline 334
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 334
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 342
{"claim": "资产类型/复制方式/业绩比较基准(含汇率调整)", "source_type": "同上(§2.2 基金产品说明 / §4.4.1 投资策略和运作分析)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 342
{"claim": "资产类型/复制方式/业绩比较基准(含汇率调整)", "source_type": "同上(§2.2 基金产品说明 / §4.4.1 投资策略和运作分析)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 343
"source_type": "同上(§2.2 基金产品说明 / §4.4.1 投资策略和运作分析)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", - Network accessline 343
"source_type": "同上(§2.2 基金产品说明 / §4.4.1 投资策略和运作分析)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", - Network accessline 344
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 344
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 352
{"claim": "业绩比较基准细化公式 + 估值/开放日/汇率规则(跨境时点条款)", "source_type": "招募说明书(更新)2026-07-20(管理人华夏基金)", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 352
{"claim": "业绩比较基准细化公式 + 估值/开放日/汇率规则(跨境时点条款)", "source_type": "招募说明书(更新)2026-07-20(管理人华夏基金)", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 353
"source_type": "招募说明书(更新)2026-07-20(管理人华夏基金)", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" "794ad3cf4e4941b0a65e89ecddbbf5b8.pdf", - Network accessline 353
"source_type": "招募说明书(更新)2026-07-20(管理人华夏基金)", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" "794ad3cf4e4941b0a65e89ecddbbf5b8.pdf", - Network accessline 354
"url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 354
"url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 368
{"claim": "官网产品页身份字段(基金全称/代码/币种)", "source_type": "管理人官网产品页(华夏基金;页面无版本号,读取日 2026-10-10)", "url": "https://www.chinaamc.com/fund/159920/index.shtml", - Network accessline 368
{"claim": "官网产品页身份字段(基金全称/代码/币种)", "source_type": "管理人官网产品页(华夏基金;页面无版本号,读取日 2026-10-10)", "url": "https://www.chinaamc.com/fund/159920/index.shtml", - Network accessline 369
"source_type": "管理人官网产品页(华夏基金;页面无版本号,读取日 2026-10-10)", "url": "https://www.chinaamc.com/fund/159920/index.shtml", "as_of": "2026-10-10(读取日)", - Network accessline 369
"source_type": "管理人官网产品页(华夏基金;页面无版本号,读取日 2026-10-10)", "url": "https://www.chinaamc.com/fund/159920/index.shtml", "as_of": "2026-10-10(读取日)", - Network accessline 370
"url": "https://www.chinaamc.com/fund/159920/index.shtml", - Network accessline 370
"url": "https://www.chinaamc.com/fund/159920/index.shtml", - Network accessline 392
{"claim": "基金全称/简称/代码/基金类型/交易币种", "source_type": "基金产品资料概要更新(管理人华夏基金,编制 2026-05-28)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 392
{"claim": "基金全称/简称/代码/基金类型/交易币种", "source_type": "基金产品资料概要更新(管理人华夏基金,编制 2026-05-28)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 393
"source_type": "基金产品资料概要更新(管理人华夏基金,编制 2026-05-28)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", "as_of": "2026-05-29", - Network accessline 393
"source_type": "基金产品资料概要更新(管理人华夏基金,编制 2026-05-28)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", "as_of": "2026-05-29", - Network accessline 394
"url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 394
"url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 400
{"claim": "标的指数/业绩比较基准/被动复制", "source_type": "同上(§二(一) 投资目标与投资策略)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 400
{"claim": "标的指数/业绩比较基准/被动复制", "source_type": "同上(§二(一) 投资目标与投资策略)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 401
"source_type": "同上(§二(一) 投资目标与投资策略)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", "as_of": "2026-05-29", - Network accessline 401
"source_type": "同上(§二(一) 投资目标与投资策略)", "url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", "as_of": "2026-05-29", - Network accessline 402
"url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 402
"url": "https://www.chinaamc.com/upload/resources/file/2026/05/29/9ffa5179b7af4248a2c92b949f2cf617.pdf", - Network accessline 432
"source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "version": "产品资料概要更新(2024-06-20 编制)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 432
"source_type": "基金产品资料概要更新(管理人,编制 2024-06-20)", "version": "产品资料概要更新(2024-06-20 编制)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 433
"version": "产品资料概要更新(2024-06-20 编制)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", "as_of": "2024-06-20", - Network accessline 433
"version": "产品资料概要更新(2024-06-20 编制)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", "as_of": "2024-06-20", - Network accessline 434
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 434
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/510300_20240620_7SNV.pdf", - Network accessline 453
"source_type": "基金 2025 年年度报告(报表附注 7.4.10.2)", "version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 453
"source_type": "基金 2025 年年度报告(报表附注 7.4.10.2)", "version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 454
"version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", "as_of": "2025-12-31(报告期)", - Network accessline 454
"version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", "as_of": "2025-12-31(报告期)", - Network accessline 455
"url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 455
"url": "https://www.chinaamc.com/upload/resources/file/2026/03/31/cc00948747a74f66984d8ecff8214cac.pdf", - Network accessline 480
"source_type": "更新招募说明书 2026 年第 1 号(管理人,合同文件版本)", "version": "更新招募说明书 2026 年第 1 号(2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 480
"source_type": "更新招募说明书 2026 年第 1 号(管理人,合同文件版本)", "version": "更新招募说明书 2026 年第 1 号(2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 481
"version": "更新招募说明书 2026 年第 1 号(2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", "as_of": "2026-06-13", - Network accessline 481
"version": "更新招募说明书 2026 年第 1 号(2026-06-13)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", "as_of": "2026-06-13", - Network accessline 482
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 482
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2026-06-13/510880_20260613_RW6R.pdf", - Network accessline 513
"version": "招募说明书(更新)2026-07-20;产品资料概要 2026-05-29;" "官网费率页(无版本号,读取日 2026-10-10);中期报告 2026-06-30", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 513
"version": "招募说明书(更新)2026-07-20;产品资料概要 2026-05-29;" "官网费率页(无版本号,读取日 2026-10-10);中期报告 2026-06-30", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 514
"官网费率页(无版本号,读取日 2026-10-10);中期报告 2026-06-30", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" "794ad3cf4e4941b0a65e89ecddbbf5b8.pdf", - Network accessline 514
"官网费率页(无版本号,读取日 2026-10-10);中期报告 2026-06-30", "url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" "794ad3cf4e4941b0a65e89ecddbbf5b8.pdf", - Network accessline 515
"url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 515
"url": "https://www.chinaamc.com/upload/resources/file/2026/07/20/" - Network accessline 568
"source": { "source_type": "基金 2026 年中期报告(§3.2.1 / §4.4.2)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 568
"source": { "source_type": "基金 2026 年中期报告(§3.2.1 / §4.4.2)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 569
"source_type": "基金 2026 年中期报告(§3.2.1 / §4.4.2)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", - Network accessline 569
"source_type": "基金 2026 年中期报告(§3.2.1 / §4.4.2)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", - Network accessline 570
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 570
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 671
"source": { "source_type": "基金 2026 年中期报告(§6/§7)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 671
"source": { "source_type": "基金 2026 年中期报告(§6/§7)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 672
"source_type": "基金 2026 年中期报告(§6/§7)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", "read_at": "2026-10-10", - Network accessline 672
"source_type": "基金 2026 年中期报告(§6/§7)", "url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", "as_of": "2026-06-30(报告期末)", "read_at": "2026-10-10", - Network accessline 673
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 673
"url": "https://static.howbuy.com/gkxx/ggfile//2026/2026-8/2026-08-31/5514889.pdf", - Network accessline 709
"source": { "source_type": "基金份额拆分公告(管理人华夏基金,2026-04-15)", "url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" - Network accessline 709
"source": { "source_type": "基金份额拆分公告(管理人华夏基金,2026-04-15)", "url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" - Network accessline 710
"source_type": "基金份额拆分公告(管理人华夏基金,2026-04-15)", "url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" "9c8e5a50d59348229bfa529be6bdadc4.pdf", - Network accessline 710
"source_type": "基金份额拆分公告(管理人华夏基金,2026-04-15)", "url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" "9c8e5a50d59348229bfa529be6bdadc4.pdf", - Network accessline 711
"url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" - Network accessline 711
"url": "https://www.chinaamc.com/upload/resources/file/2026/04/15/" - Network accessline 809
"as_of": "文件日期列", "original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", - Network accessline 809
"as_of": "文件日期列", "original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", - Network accessline 810
"original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", }, - Network accessline 810
"original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", }, - Network accessline 811
"url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", - Network accessline 811
"url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/{code}cons.xls", - Network accessline 816
"as_of": "文件日期列(权重文件通常为上月月末)", "original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", - Network accessline 816
"as_of": "文件日期列(权重文件通常为上月月末)", "original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", - Network accessline 817
"original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", }, - Network accessline 817
"original_disclosure": True, "url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", }, - Network accessline 818
"url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", - Network accessline 818
"url_template": "https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/{code}closeweight.xls", - Network accessline 2022
_EM_F10_URL = "https://fundf10.eastmoney.com/FundArchivesDatas.aspx" - Network accessline 2022
_EM_F10_URL = "https://fundf10.eastmoney.com/FundArchivesDatas.aspx" - Network accessline 2026
"(KHTML, like Gecko) Chrome/120.0 Safari/537.36" ), "Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html", - Network accessline 2026
"(KHTML, like Gecko) Chrome/120.0 Safari/537.36" ), "Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html", - Network accessline 2027
), "Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html", } - Network accessline 2027
), "Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html", } - Network accessline 2028
"Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html", - Network accessline 2028
"Referer": "https://fundf10.eastmoney.com/ccmx_{symbol}.html",
skills/invest-a-etf/scripts/lib/etf_generation.py
skills/invest-a-etf/scripts/lib/etf_html.py
skills/invest-a-etf/scripts/lib/etf_md.py
skills/invest-a-etf/scripts/lib/etf_peers.py
skills/invest-a-etf/scripts/lib/etf_playbook.py
skills/invest-a-etf/scripts/lib/etf_research.py
skills/invest-a-etf/scripts/lib/etf_timeline.py
skills/invest-a-etf/scripts/lib/futures_basis.py
skills/invest-a-etf/scripts/lib/index_pe_snapshot.py
skills/invest-a-etf/scripts/lib/industry_snapshot.py
skills/invest-a-etf/scripts/lib/sector_flow.py
skills/invest-a-etf/tests/conftest.py
skills/invest-a-etf/tests/test_etf_159920_disclosure.py
skills/invest-a-etf/tests/test_etf_boll_bandwidth.py
skills/invest-a-etf/tests/test_etf_cache_fixes.py
skills/invest-a-etf/tests/test_etf_cli.py
skills/invest-a-etf/tests/test_etf_data_status.py
skills/invest-a-etf/tests/test_etf_decision.py
skills/invest-a-etf/tests/test_etf_exposure.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 260
h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "期间": "Q2", "事件": "e", "关联命题": "p", "来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} - Network accessline 260
h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "期间": "Q2", "事件": "e", "关联命题": "p", "来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} - Network accessline 261
ev = {"600001": {"业务证据": "x", "期间": "Q2", "事件": "e", "关联命题": "p", "来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} out = build_evidence_budget("515050", target_cov_pct=15.0, max_names=10, - Network accessline 261
ev = {"600001": {"业务证据": "x", "期间": "Q2", "事件": "e", "关联命题": "p", "来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} out = build_evidence_budget("515050", target_cov_pct=15.0, max_names=10, - Network accessline 262
"来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} - Network accessline 262
"来源": {"url": "https://x", "sha256": "ab", "locator": "§1"}}} - Network accessline 270
def test_invalid_evidence_source_marks_row_and_excludes_weight(self): h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 270
def test_invalid_evidence_source_marks_row_and_excludes_weight(self): h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 271
h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}} out = build_evidence_budget("515050", target_cov_pct=15.0, max_names=10, - Network accessline 271
h = self._holdings([10.0, 10.0]) ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}} out = build_evidence_budget("515050", target_cov_pct=15.0, max_names=10, - Network accessline 272
ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 272
ev = {"600001": {"业务证据": "x", "来源": {"url": "https://x"}}}
skills/invest-a-etf/tests/test_etf_flags.py
skills/invest-a-etf/tests/test_etf_generation.py
skills/invest-a-etf/tests/test_etf_holdings.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 88
return ( "<h4 class='t'><label class='left'><a title='卫星ETF永赢' " "href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>" - Network accessline 88
return ( "<h4 class='t'><label class='left'><a title='卫星ETF永赢' " "href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>" - Network accessline 89
"<h4 class='t'><label class='left'><a title='卫星ETF永赢' " "href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>" " 2026年2季度股票投资明细</label>" - Network accessline 89
"<h4 class='t'><label class='left'><a title='卫星ETF永赢' " "href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>" " 2026年2季度股票投资明细</label>" - Network accessline 90
"href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>" - Network accessline 90
"href='http://fund.eastmoney.com/159206.html'>卫星ETF永赢</a>"
skills/invest-a-etf/tests/test_etf_html.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 867
payload["quote"]["source"] = "fund_etf_spot_em" payload["kline"]["source"] = "fund_open_fund_info_em" payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} - Network accessline 867
payload["quote"]["source"] = "fund_etf_spot_em" payload["kline"]["source"] = "fund_open_fund_info_em" payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} - Network accessline 868
payload["kline"]["source"] = "fund_open_fund_info_em" payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} payload["research"] = {"sources": [ - Network accessline 868
payload["kline"]["source"] = "fund_open_fund_info_em" payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} payload["research"] = {"sources": [ - Network accessline 869
payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} - Network accessline 869
payload["profile"]["fees"] = {"status": "ok", "source": "https://example.com/fee.pdf"} - Network accessline 870
payload["research"] = {"sources": [ {"id": "S1", "title": "某公司2026年半年度报告", "url": "https://example.com/a.pdf"}]} - Network accessline 870
payload["research"] = {"sources": [ {"id": "S1", "title": "某公司2026年半年度报告", "url": "https://example.com/a.pdf"}]} - Network accessline 871
{"id": "S1", "title": "某公司2026年半年度报告", "url": "https://example.com/a.pdf"}]} html = render_etf_html(payload, md_text=MD_TEXT) - Network accessline 871
{"id": "S1", "title": "某公司2026年半年度报告", "url": "https://example.com/a.pdf"}]} html = render_etf_html(payload, md_text=MD_TEXT) - Network accessline 872
"url": "https://example.com/a.pdf"}]} - Network accessline 872
"url": "https://example.com/a.pdf"}]} - Network accessline 877
assert "某公司2026年半年度报告" in refs # 实际披露来源 assert "天天基金" in refs # 采集渠道如实标注 assert "https://example.com/fee.pdf" in refs # 费率材料来源 - Network accessline 877
assert "某公司2026年半年度报告" in refs # 实际披露来源 assert "天天基金" in refs # 采集渠道如实标注 assert "https://example.com/fee.pdf" in refs # 费率材料来源 - Network accessline 879
assert "https://example.com/fee.pdf" in refs # 费率材料来源 - Network accessline 879
assert "https://example.com/fee.pdf" in refs # 费率材料来源 - Network accessline 936
"source_type": "基金 2025 年年度报告(报表附注 7.4.10.2)", "version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://example.com/fee.pdf", - Network accessline 936
"source_type": "基金 2025 年年度报告(报表附注 7.4.10.2)", "version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://example.com/fee.pdf", - Network accessline 937
"version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://example.com/fee.pdf", "locator": "报表附注 7.4.10.2.1 管理费"}} - Network accessline 937
"version": "2025 年年度报告(披露日 2026-03-31)", "url": "https://example.com/fee.pdf", "locator": "报表附注 7.4.10.2.1 管理费"}} - Network accessline 938
"url": "https://example.com/fee.pdf", - Network accessline 938
"url": "https://example.com/fee.pdf", - Network accessline 939
"locator": "报表附注 7.4.10.2.1 管理费"}} refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/fee.pdf" in refs - Network accessline 939
"locator": "报表附注 7.4.10.2.1 管理费"}} refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/fee.pdf" in refs - Network accessline 940
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/fee.pdf" in refs assert "基金 2025 年年度报告" in refs - Network accessline 940
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/fee.pdf" in refs assert "基金 2025 年年度报告" in refs - Network accessline 941
assert "https://example.com/fee.pdf" in refs - Network accessline 941
assert "https://example.com/fee.pdf" in refs - Network accessline 1007
"evidence": [ {"claim": "全称/代码", "locator": "§一 产品概况", "url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, - Network accessline 1007
"evidence": [ {"claim": "全称/代码", "locator": "§一 产品概况", "url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, - Network accessline 1008
{"claim": "全称/代码", "locator": "§一 产品概况", "url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, {"claim": "标的指数", "locator": "§二(一) 投资目标", - Network accessline 1008
{"claim": "全称/代码", "locator": "§一 产品概况", "url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, {"claim": "标的指数", "locator": "§二(一) 投资目标", - Network accessline 1009
"url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, - Network accessline 1009
"url": "https://example.com/pds.pdf", "verified_at": "2026-10-13"}, - Network accessline 1028
payload = _real_identity_payload() refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/pds.pdf" in refs - Network accessline 1028
payload = _real_identity_payload() refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/pds.pdf" in refs - Network accessline 1029
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/pds.pdf" in refs assert "§一 产品概况" in refs and "§二(一) 投资目标" in refs - Network accessline 1029
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") assert "https://example.com/pds.pdf" in refs assert "§一 产品概况" in refs and "§二(一) 投资目标" in refs - Network accessline 1030
assert "https://example.com/pds.pdf" in refs - Network accessline 1030
assert "https://example.com/pds.pdf" in refs - Network accessline 1043
payload["profile"]["identity"] = { "verification": {"status": "unknown"}, "evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} - Network accessline 1043
payload["profile"]["identity"] = { "verification": {"status": "unknown"}, "evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} - Network accessline 1044
"verification": {"status": "unknown"}, "evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} payload["data_status"] = {"dimensions": { - Network accessline 1044
"verification": {"status": "unknown"}, "evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} payload["data_status"] = {"dimensions": { - Network accessline 1045
"evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} - Network accessline 1045
"evidence": [{"url": "https://example.com/unverified.pdf", "locator": "§一"}]} - Network accessline 1053
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") for bad in ("旧直连源", "旧直连份额源", "源X", "源Y", "Tushare fund_share", "https://example.com/unverified.pdf", "原文已核"): - Network accessline 1053
refs = _slice(render_etf_html(payload, md_text=MD_TEXT), "refs") for bad in ("旧直连源", "旧直连份额源", "源X", "源Y", "Tushare fund_share", "https://example.com/unverified.pdf", "原文已核"): - Network accessline 1054
for bad in ("旧直连源", "旧直连份额源", "源X", "源Y", "Tushare fund_share", "https://example.com/unverified.pdf", "原文已核"): assert bad not in refs, bad - Network accessline 1054
for bad in ("旧直连源", "旧直连份额源", "源X", "源Y", "Tushare fund_share", "https://example.com/unverified.pdf", "原文已核"): assert bad not in refs, bad - Network accessline 1055
"https://example.com/unverified.pdf", "原文已核"): - Network accessline 1055
"https://example.com/unverified.pdf", "原文已核"):
skills/invest-a-etf/tests/test_etf_identity.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 314
assert ident["evidence"], "588000 原文证据缺失" ev = ident["evidence"][0] assert ev["url"].startswith("https://www.chinaamc.com/") - Network accessline 314
assert ident["evidence"], "588000 原文证据缺失" ev = ident["evidence"][0] assert ev["url"].startswith("https://www.chinaamc.com/") - Network accessline 315
ev = ident["evidence"][0] assert ev["url"].startswith("https://www.chinaamc.com/") assert ev["sha256"] == "3932364340512b2e503ad4c66e3bb6f328a6910c83758fe177cd7eb93ea02bac" - Network accessline 315
ev = ident["evidence"][0] assert ev["url"].startswith("https://www.chinaamc.com/") assert ev["sha256"] == "3932364340512b2e503ad4c66e3bb6f328a6910c83758fe177cd7eb93ea02bac" - Network accessline 316
assert ev["url"].startswith("https://www.chinaamc.com/") - Network accessline 316
assert ev["url"].startswith("https://www.chinaamc.com/")
skills/invest-a-etf/tests/test_etf_index_pe.py
skills/invest-a-etf/tests/test_etf_kline.py
skills/invest-a-etf/tests/test_etf_map.py
skills/invest-a-etf/tests/test_etf_md.py
skills/invest-a-etf/tests/test_etf_peers.py
skills/invest-a-etf/tests/test_etf_playbook.py
skills/invest-a-etf/tests/test_etf_same_index_evidence.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 28
_SUM_EVIDENCE = { "source_type": "基金产品资料概要(管理人/交易所原文)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", - Network accessline 28
_SUM_EVIDENCE = { "source_type": "基金产品资料概要(管理人/交易所原文)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", - Network accessline 29
"source_type": "基金产品资料概要(管理人/交易所原文)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", "as_of": "2024-06-20", "read_at": "2026-10-08", - Network accessline 29
"source_type": "基金产品资料概要(管理人/交易所原文)", "url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", "as_of": "2024-06-20", "read_at": "2026-10-08", - Network accessline 30
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", - Network accessline 30
"url": "https://www.sse.com.cn/disclosure/fund/announcement/c/new/2024-06-20/x.pdf", - Network accessline 207
"关联命题": "AI 资本开支 → 800G/1.6T 光模块需求", "来源": {"source_type": "深交所公告(巨潮)", "url": "https://www.cninfo.com.cn/announcement/xxx", - Network accessline 207
"关联命题": "AI 资本开支 → 800G/1.6T 光模块需求", "来源": {"source_type": "深交所公告(巨潮)", "url": "https://www.cninfo.com.cn/announcement/xxx", - Network accessline 208
"来源": {"source_type": "深交所公告(巨潮)", "url": "https://www.cninfo.com.cn/announcement/xxx", "sha256": "b" * 64, "locator": "公告正文第 2 页「业绩变动原因」", - Network accessline 208
"来源": {"source_type": "深交所公告(巨潮)", "url": "https://www.cninfo.com.cn/announcement/xxx", "sha256": "b" * 64, "locator": "公告正文第 2 页「业绩变动原因」", - Network accessline 209
"url": "https://www.cninfo.com.cn/announcement/xxx", - Network accessline 209
"url": "https://www.cninfo.com.cn/announcement/xxx", - Network accessline 225
def test_incomplete_source_not_counted_as_evidence(self, monkeypatch): self._patch(monkeypatch) evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 225
def test_incomplete_source_not_counted_as_evidence(self, monkeypatch): self._patch(monkeypatch) evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 226
self._patch(monkeypatch) evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}} out = etf_data.build_evidence_budget( - Network accessline 226
self._patch(monkeypatch) evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}} out = etf_data.build_evidence_budget( - Network accessline 227
evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}} - Network accessline 227
evidence = {"300308": {"业务证据": "x", "来源": {"url": "https://x"}}}
skills/invest-a-etf/tests/test_etf_scale_semantics.py
skills/invest-a-etf/tests/test_etf_share_flow.py
skills/invest-a-etf/tests/test_etf_share_split.py
skills/invest-a-etf/tests/test_etf_share_window.py
skills/invest-a-etf/tests/test_etf_spot_cache.py
skills/invest-a-etf/tests/test_etf_timeline.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 392
] events = [ {"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", - Network accessline 392
] events = [ {"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", - Network accessline 393
events = [ {"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", "published_date": "2026-05-11", "confidence": "一手"}, # 同日 - Network accessline 393
events = [ {"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", "published_date": "2026-05-11", "confidence": "一手"}, # 同日 - Network accessline 394
{"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", - Network accessline 394
{"date": "2026-05-11", "event": "指数创历史新高", "source_url": "https://a", - Network accessline 395
"published_date": "2026-05-11", "confidence": "一手"}, # 同日 {"date": "2026-05-12", "event": "半导体设备景气报道", "source_url": "https://b", "published_date": "2026-05-12", "confidence": "二手"}, # 前一交易日 = 05-11 对齐(邻近) - Network accessline 395
"published_date": "2026-05-11", "confidence": "一手"}, # 同日 {"date": "2026-05-12", "event": "半导体设备景气报道", "source_url": "https://b", "published_date": "2026-05-12", "confidence": "二手"}, # 前一交易日 = 05-11 对齐(邻近) - Network accessline 396
{"date": "2026-05-12", "event": "半导体设备景气报道", "source_url": "https://b", - Network accessline 396
{"date": "2026-05-12", "event": "半导体设备景气报道", "source_url": "https://b", - Network accessline 397
"published_date": "2026-05-12", "confidence": "二手"}, # 前一交易日 = 05-11 对齐(邻近) {"date": "2026-05-14", "event": "权重股中报预告", "source_url": "https://c", "published_date": "2026-05-14", "confidence": "二手"}, # 后一交易日 = 05-15 对齐(邻 - Network accessline 397
"published_date": "2026-05-12", "confidence": "二手"}, # 前一交易日 = 05-11 对齐(邻近) {"date": "2026-05-14", "event": "权重股中报预告", "source_url": "https://c", "published_date": "2026-05-14", "confidence": "二手"}, # 后一交易日 = 05-15 对齐(邻 - Network accessline 398
{"date": "2026-05-14", "event": "权重股中报预告", "source_url": "https://c", - Network accessline 398
{"date": "2026-05-14", "event": "权重股中报预告", "source_url": "https://c", - Network accessline 399
"published_date": "2026-05-14", "confidence": "二手"}, # 后一交易日 = 05-15 对齐(邻近) {"date": "2026-06-01", "event": "无大波动邻近", "source_url": "https://d", "published_date": "2026-06-01", "confidence": "一手"}, # 未对齐 - Network accessline 399
"published_date": "2026-05-14", "confidence": "二手"}, # 后一交易日 = 05-15 对齐(邻近) {"date": "2026-06-01", "event": "无大波动邻近", "source_url": "https://d", "published_date": "2026-06-01", "confidence": "一手"}, # 未对齐 - Network accessline 400
{"date": "2026-06-01", "event": "无大波动邻近", "source_url": "https://d", - Network accessline 400
{"date": "2026-06-01", "event": "无大波动邻近", "source_url": "https://d", - Network accessline 430
ok_file = tmp_path / "events_ok.json" ok_file.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 430
ok_file = tmp_path / "events_ok.json" ok_file.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 431
ok_file.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n' - Network accessline 431
ok_file.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n' - Network accessline 432
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 432
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 433
'"published_date": "2026-05-11", "confidence": "一手"}\n' '{"date": "2026-05-12", "event": "B", "source_url": "https://b", ' '"published_date": "2026-05-12T10:00:00", "confidence": "二手"}\n', - Network accessline 433
'"published_date": "2026-05-11", "confidence": "一手"}\n' '{"date": "2026-05-12", "event": "B", "source_url": "https://b", ' '"published_date": "2026-05-12T10:00:00", "confidence": "二手"}\n', - Network accessline 434
'{"date": "2026-05-12", "event": "B", "source_url": "https://b", ' - Network accessline 434
'{"date": "2026-05-12", "event": "B", "source_url": "https://b", ' - Network accessline 446
bad1 = tmp_path / "events_missing_url.json" bad1.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 446
bad1 = tmp_path / "events_missing_url.json" bad1.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 447
bad1.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n' - Network accessline 447
bad1.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n' - Network accessline 448
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 448
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 459
bad2 = tmp_path / "events_bad_date.json" bad2.write_text( '{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' - Network accessline 459
bad2 = tmp_path / "events_bad_date.json" bad2.write_text( '{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' - Network accessline 460
bad2.write_text( '{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n', - Network accessline 460
bad2.write_text( '{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "一手"}\n', - Network accessline 461
'{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' - Network accessline 461
'{"date": "2026/05/11", "event": "A", "source_url": "https://a", ' - Network accessline 470
bad3 = tmp_path / "events_bad_conf.json" bad3.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 470
bad3 = tmp_path / "events_bad_conf.json" bad3.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 471
bad3.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "第三方"}\n', - Network accessline 471
bad3.write_text( '{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' '"published_date": "2026-05-11", "confidence": "第三方"}\n', - Network accessline 472
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", ' - Network accessline 472
'{"date": "2026-05-11", "event": "A", "source_url": "https://a", '
skills/invest-a-etf/tests/test_etf_tracking.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 845
[Credential-related source omitted] - Access to secretsline 845
[Credential-related source omitted] - Access to secretsline 855
[Credential-related source omitted] - Access to secretsline 855
[Credential-related source omitted]
skills/invest-a-etf/tests/test_etf_tradability.py
skills/invest-a-etf/tests/test_etf_valuation_guide.py
skills/invest-a-etf/tests/test_futures_basis.py
skills/invest-a-etf/tests/test_index_pe_snapshot.py
skills/invest-a-etf/tests/test_operating_research.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 27
"selection": [{"code": "688008", "reason": "接口环节与需求兑现"}, {"code": "688012", "reason": "设备环节竞争解释"}], "sources": [{"id": "S1", "url": "https://example.com/company.pdf", - Network accessline 27
"selection": [{"code": "688008", "reason": "接口环节与需求兑现"}, {"code": "688012", "reason": "设备环节竞争解释"}], "sources": [{"id": "S1", "url": "https://example.com/company.pdf", - Network accessline 28
{"code": "688012", "reason": "设备环节竞争解释"}], "sources": [{"id": "S1", "url": "https://example.com/company.pdf", "title": "公司原始披露", "source_type": "original", "sha256": sha, - Network accessline 28
{"code": "688012", "reason": "设备环节竞争解释"}], "sources": [{"id": "S1", "url": "https://example.com/company.pdf", "title": "公司原始披露", "source_type": "original", "sha256": sha, - Network accessline 29
"sources": [{"id": "S1", "url": "https://example.com/company.pdf", - Network accessline 29
"sources": [{"id": "S1", "url": "https://example.com/company.pdf", - Network accessline 67
p = payload() calls = [] def fetch(code): - Network accessline 67
p = payload() calls = [] def fetch(code): - Network accessline 68
calls = [] def fetch(code): calls.append(code) - Network accessline 68
calls = [] def fetch(code): calls.append(code) - Network accessline 69
def fetch(code): - Network accessline 69
def fetch(code): - Network accessline 171
def test_financial_failure_remains_visible(prepared): _, path = prepared def fetch(c): - Network accessline 171
def test_financial_failure_remains_visible(prepared): _, path = prepared def fetch(c): - Network accessline 172
_, path = prepared def fetch(c): raise TimeoutError("opaque upstream") - Network accessline 172
_, path = prepared def fetch(c): raise TimeoutError("opaque upstream") - Network accessline 173
def fetch(c): - Network accessline 173
def fetch(c):
skills/invest-a-etf/tests/test_r1_staleness.py
skills/invest-a-etf/tests/test_sector_flow.py
skills/invest-a-etf/tests/test_v026_p1_fixes.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 160
class _FakeSess: def get(self, url, timeout=None): assert url.startswith("http://qt.gtimg.cn/q=sh512660") - Network accessline 160
class _FakeSess: def get(self, url, timeout=None): assert url.startswith("http://qt.gtimg.cn/q=sh512660") - Network accessline 161
def get(self, url, timeout=None): assert url.startswith("http://qt.gtimg.cn/q=sh512660") return _FakeResp() - Network accessline 161
def get(self, url, timeout=None): assert url.startswith("http://qt.gtimg.cn/q=sh512660") return _FakeResp() - Network accessline 162
assert url.startswith("http://qt.gtimg.cn/q=sh512660") - Network accessline 162
assert url.startswith("http://qt.gtimg.cn/q=sh512660")
skills/invest-a-event-calendar/README.md
skills/invest-a-event-calendar/references/fomc_meetings.yaml
- Network accessline 21
last_verified: "2026-09-10" source_url: "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm" - Network accessline 22
source_url: "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm" - Network accessline 23
# 决议公布时刻的来源(勿凭印象改):**fomccalendars.htm 日程页不公布时刻**—— # 该值取自美联储新闻稿页头的 "For release at 2:00 p.m. EDT",例: # https://www.federalreserve.gov/newsevents/pressreleases/monetary20260429a.htm - Network accessline 24
# 该值取自美联储新闻稿页头的 "For release at 2:00 p.m. EDT",例: # https://www.federalreserve.gov/newsevents/pressreleases/monetary20260429a.htm # 北京时间为**次日** 02:00(夏令时 EDT)/ 03:00(冬令时 EST)→ 引擎按北京日期 +1 天归并。 - Network accessline 25
# https://www.federalreserve.gov/newsevents/pressreleases/monetary20260429a.htm
skills/invest-a-event-calendar/references/political_calendar.yaml
skills/invest-a-event-calendar/scripts/__init__.py
- Executable scriptline 1
Executable file
skills/invest-a-event-calendar/scripts/macro_calendar.py
- Executable scriptline 1
Executable file - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Network accessline 514
_FRED_URL = "https://api.stlouisfed.org/fred/releases/dates" - Access to secretsline 517
[Credential-related source omitted] - Access to secretsline 521
[Credential-related source omitted] - Network accessline 525
} url = f"{_FRED_URL}?{urllib.parse.urlencode(params)}" with urllib.request.urlopen(url, timeout=30) as resp: # noqa: S310 —— 固定官方主机 - Network accessline 526
url = f"{_FRED_URL}?{urllib.parse.urlencode(params)}" with urllib.request.urlopen(url, timeout=30) as resp: # noqa: S310 —— 固定官方主机 return json.loads(resp.read().decode("utf-8")) - Network accessline 527
with urllib.request.urlopen(url, timeout=30) as resp: # noqa: S310 —— 固定官方主机 - Access to secretsline 542
[Credential-related source omitted]
skills/invest-a-event-calendar/scripts/theme_calendar.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/invest-a-event-calendar/scripts/unlock_calendar.py
skills/invest-a-event-calendar/tests/test_calendar.py
- Executable scriptline 1
Executable file
skills/invest-a-event-calendar/tests/test_macro_calendar.py
- Executable scriptline 1
Executable file - Access to secretsline 398
[Credential-related source omitted] - Access to secretsline 400
[Credential-related source omitted] - Network accessline 417
_FOMC_YAML = """ last_verified: "2026-09-10" source_url: "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm" - Network accessline 418
last_verified: "2026-09-10" source_url: "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm" meetings: - Network accessline 419
source_url: "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm" - Access to secretsline 532
[Credential-related source omitted] - Access to secretsline 534
[Credential-related source omitted]
skills/invest-a-event-calendar/tests/test_macro_cli.py
skills/invest-a-event-calendar/tests/test_pool.py
- Executable scriptline 1
Executable file
skills/invest-a-event-calendar/tests/test_theme_calendar.py
- Executable scriptline 1
Executable file - Network accessline 70
assert not tc.is_official_source("题材热度第一") assert not tc.is_official_source("论坛帖子"), "未知渠道不得被当作官方确认" assert tc.is_official_source("https://www.gov.cn/zhengce/"), "权威域名 URL 应可用" - Network accessline 72
assert tc.is_official_source("https://www.gov.cn/zhengce/"), "权威域名 URL 应可用"
skills/invest-a-gap-scan/SKILL.md
skills/invest-a-gap-scan/scripts/__init__.py
skills/invest-a-gap-scan/scripts/eval_forward.py
skills/invest-a-gap-scan/scripts/lib/__init__.py
skills/invest-a-gap-scan/scripts/lib/_invest_path.py
skills/invest-a-gap-scan/scripts/lib/gap_scanner.py
skills/invest-a-gap-scan/scripts/lib/kline_source.py
skills/invest-a-gap-scan/scripts/lib/qfq.py
skills/invest-a-gap-scan/scripts/lib/report_formatter.py
skills/invest-a-gap-scan/scripts/lib/skip_reasons.py
skills/invest-a-gap-scan/scripts/lib/suspension.py
skills/invest-a-gap-scan/scripts/lib/universe.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 542
[Credential-related source omitted] - Access to secretsline 542
[Credential-related source omitted] - Access to secretsline 543
[Credential-related source omitted] - Access to secretsline 543
[Credential-related source omitted]
skills/invest-a-gap-scan/scripts/record_hits.py
skills/invest-a-gap-scan/scripts/scan.py
skills/invest-a-gap-scan/tests/__init__.py
skills/invest-a-gap-scan/tests/conftest.py
skills/invest-a-gap-scan/tests/test_backtest_eval.py
skills/invest-a-gap-scan/tests/test_create_source.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 131
[Credential-related source omitted] - Access to secretsline 131
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted]
skills/invest-a-gap-scan/tests/test_gap_scanner.py
skills/invest-a-gap-scan/tests/test_kline_group.py
skills/invest-a-gap-scan/tests/test_qfq.py
skills/invest-a-gap-scan/tests/test_report_smoke.py
skills/invest-a-gap-scan/tests/test_suspension.py
skills/invest-a-gap-scan/tests/test_universe.py
skills/invest-a-journal/SKILL.md
skills/invest-a-journal/scripts/journal.py
skills/invest-a-journal/scripts/lib/__init__.py
skills/invest-a-journal/scripts/lib/_invest_path.py
skills/invest-a-journal/scripts/lib/db.py
skills/invest-a-journal/scripts/lib/etf_data.py
skills/invest-a-journal/scripts/lib/market_microstructure.py
skills/invest-a-journal/scripts/lib/query_data.py
skills/invest-a-journal/tests/conftest.py
skills/invest-a-journal/tests/test_chip_clearance.py
skills/invest-a-journal/tests/test_compute_technical_stock.py
skills/invest-a-journal/tests/test_db_rollback.py
skills/invest-a-journal/tests/test_env_guardrail.py
skills/invest-a-journal/tests/test_etf_shim.py
skills/invest-a-journal/tests/test_futures_basis_freshness.py
skills/invest-a-journal/tests/test_inaction_watch_show.py
skills/invest-a-journal/tests/test_journal_module_loader.py
skills/invest-a-journal/tests/test_journal_v026.py
skills/invest-a-journal/tests/test_labels_v2.py
skills/invest-a-journal/tests/test_macro_snapshot.py
skills/invest-a-journal/tests/test_market_form.py
skills/invest-a-journal/tests/test_microstructure_via_bridge.py
skills/invest-a-journal/tests/test_position_nav.py
skills/invest-a-journal/tests/test_query_data_etf.py
skills/invest-a-journal/tests/test_query_helpers.py
skills/invest-a-journal/tests/test_safe_collect_ordering.py
skills/invest-a-journal/tests/test_sell_link.py
skills/invest-a-journal/tests/test_session_date_fields.py
skills/invest-a-journal/tests/test_snapshot_status.py
skills/invest-a-journal/tests/test_store_isolation.py
skills/invest-a-journal/tests/test_szse_turnover.py
skills/invest-a-journal/tests/test_v027_csindex_noise.py
skills/invest-a-journal/tests/test_wrong_frequency.py
skills/invest-a-journal/tests/test_zt_seesaw.py
skills/invest-a-pattern-scan/SKILL.md
skills/invest-a-pattern-scan/scripts/lib/_invest_path.py
skills/invest-a-pattern-scan/scripts/lib/feature_patterns.py
skills/invest-a-pattern-scan/scripts/lib/kline_source.py
skills/invest-a-pattern-scan/scripts/lib/pattern_scanner.py
skills/invest-a-pattern-scan/scripts/lib/universe.py
skills/invest-a-pattern-scan/scripts/scan.py
skills/invest-a-pattern-scan/tests/test_feature_patterns.py
skills/invest-a-pattern-scan/tests/test_scanner_smoke.py
skills/invest-a-stock/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, WebSearch, WebFetch - Broad permissionsline 1
Bash, Read, Write, WebSearch, WebFetch - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 640
[Credential-related source omitted] - Access to secretsline 640
[Credential-related source omitted]
skills/invest-a-stock/references/source-guide.md
- Network accessline 14
| 数据源 | 接口 | 稳定性 | 需要Token | 说明 | |--------|------|--------|-----------|------| | **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_ - Network accessline 14
| 数据源 | 接口 | 稳定性 | 需要Token | 说明 | |--------|------|--------|-----------|------| | **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_ - Network accessline 15
|--------|------|--------|-----------|------| | **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_daily` 申万行业日线需 5000 分**([文档](https - Network accessline 15
|--------|------|--------|-----------|------| | **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_daily` 申万行业日线需 5000 分**([文档](https - Network accessline 16
| **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_daily` 申万行业日线需 5000 分**([文档](https://tushare.pro/document/2?doc_id=327)),不足时回退 a - Network accessline 16
| **Tushare Pro** | `stock_basic` / `daily` / `fina_indicator` / `top10_floatholders` / `moneyflow` / `sw_daily` | ★★★★ | 是 | **主数据源**;2000 分解锁财务/资金/普通指数;**`sw_daily` 申万行业日线需 5000 分**([文档](https://tushare.pro/document/2?doc_id=327)),不足时回退 a - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 27
**TickFlow** ([GitHub 3.4k stars](https://github.com/weilinxie/tickflow)) 是由 efinance 作者开发的免费 A 股行情库,提供独立数据管道(非东方财富爬虫),用于 K 线交叉验证。 - Network accessline 27
**TickFlow** ([GitHub 3.4k stars](https://github.com/weilinxie/tickflow)) 是由 efinance 作者开发的免费 A 股行情库,提供独立数据管道(非东方财富爬虫),用于 K 线交叉验证。 - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted]
skills/invest-a-stock/scripts/agent_facts.py
skills/invest-a-stock/scripts/check_report.sh
skills/invest-a-stock/scripts/invest.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 3418
[Credential-related source omitted] - Access to secretsline 3418
[Credential-related source omitted] - Access to secretsline 3418
[Credential-related source omitted]
skills/invest-a-stock/scripts/lib/__init__.py
skills/invest-a-stock/scripts/lib/_invest_path.py
skills/invest-a-stock/scripts/lib/analysis_schema.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 85
# URL 内的数字不要求绑定 fact——但**只豁免 URL 自身跨度内的 token**。 # 早期实现写的是「该行出现过 http 即豁免整行」(review #10 实测: # `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数 - Network accessline 85
# URL 内的数字不要求绑定 fact——但**只豁免 URL 自身跨度内的 token**。 # 早期实现写的是「该行出现过 http 即豁免整行」(review #10 实测: # `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数 - Network accessline 86
# 早期实现写的是「该行出现过 http 即豁免整行」(review #10 实测: # `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数 # docstring「不能豁免整行」自相矛盾,且放过的恰是 P0 要拦的编造数字)。 - Network accessline 86
# 早期实现写的是「该行出现过 http 即豁免整行」(review #10 实测: # `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数 # docstring「不能豁免整行」自相矛盾,且放过的恰是 P0 要拦的编造数字)。 - Network accessline 87
# `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数 - Network accessline 87
# `来源 https://x.com/p/123 该季增长 999%` 的 999 被整行放过,与本函数
skills/invest-a-stock/scripts/lib/analysis_status.py
skills/invest-a-stock/scripts/lib/analysis_templates.py
skills/invest-a-stock/scripts/lib/archiver.py
skills/invest-a-stock/scripts/lib/assets/echarts.umd.min.js
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 9
* with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 10
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 10
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 11
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* http://www.apache.org/licenses/LICENSE-2.0 - Possible obfuscationline 35
***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype. - Possible obfuscationline 35
***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype. - Network accessline 41
* * LICENSE * https://github.com/ecomfe/zrender/blob/master/LICENSE - Network accessline 41
* * LICENSE * https://github.com/ecomfe/zrender/blob/master/LICENSE - Network accessline 42
* LICENSE * https://github.com/ecomfe/zrender/blob/master/LICENSE */ - Network accessline 42
* LICENSE * https://github.com/ecomfe/zrender/blob/master/LICENSE */ - Network accessline 43
* https://github.com/ecomfe/zrender/blob/master/LICENSE - Network accessline 43
* https://github.com/ecomfe/zrender/blob/master/LICENSE - Possible obfuscationline 45
var yo={},mo={};var xo,_o=function(){function t(t,e,n){var i=this;this._sleepAfterStill=10,this._stillFrameAccum=0,this._needsRefresh=!0,this._needsRefreshHover=!1,this._darkMode=!1,n=n||{},this.dom=e,this.id=t;var o=new Mn,a=n.renderer||"c - Possible obfuscationline 45
var yo={},mo={};var xo,_o=function(){function t(t,e,n){var i=this;this._sleepAfterStill=10,this._stillFrameAccum=0,this._needsRefresh=!0,this._needsRefreshHover=!1,this._darkMode=!1,n=n||{},this.dom=e,this.id=t;var o=new Mn,a=n.renderer||"c
skills/invest-a-stock/scripts/lib/attribution.py
skills/invest-a-stock/scripts/lib/catalyst.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 296
("公告事件", _fetch_announcement_events)): try: events, err = fetch(symbol, days) - Network accessline 296
("公告事件", _fetch_announcement_events)): try: events, err = fetch(symbol, days) - Network accessline 297
try: events, err = fetch(symbol, days) except Exception as exc: # noqa: BLE001 —— 单腿异常不得中断整块采集 - Network accessline 297
try: events, err = fetch(symbol, days) except Exception as exc: # noqa: BLE001 —— 单腿异常不得中断整块采集 - Network accessline 298
events, err = fetch(symbol, days) - Network accessline 298
events, err = fetch(symbol, days)
skills/invest-a-stock/scripts/lib/chain.py
skills/invest-a-stock/scripts/lib/climate.py
skills/invest-a-stock/scripts/lib/collector/__init__.py
skills/invest-a-stock/scripts/lib/collector/_base.py
skills/invest-a-stock/scripts/lib/collector/_kline_cache.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Network accessline 57
def _wrapped() -> list[dict] | None: data = fetch() - Network accessline 57
def _wrapped() -> list[dict] | None: data = fetch() - Network accessline 58
data = fetch() - Network accessline 58
data = fetch()
skills/invest-a-stock/scripts/lib/collector/_legacy.py
skills/invest-a-stock/scripts/lib/collector/_orchestrate.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 2296
[Credential-related source omitted] - Access to secretsline 2296
[Credential-related source omitted] - Network accessline 2834
return ( "available (akshare fallback; Tushare sw_daily 需 5000 积分,见 " "https://tushare.pro/document/2?doc_id=327)" - Network accessline 2834
return ( "available (akshare fallback; Tushare sw_daily 需 5000 积分,见 " "https://tushare.pro/document/2?doc_id=327)" - Network accessline 2835
"available (akshare fallback; Tushare sw_daily 需 5000 积分,见 " "https://tushare.pro/document/2?doc_id=327)" ) - Network accessline 2835
"available (akshare fallback; Tushare sw_daily 需 5000 积分,见 " "https://tushare.pro/document/2?doc_id=327)" ) - Network accessline 2836
"https://tushare.pro/document/2?doc_id=327)" - Network accessline 2836
"https://tushare.pro/document/2?doc_id=327)" - Access to secretsline 3234
[Credential-related source omitted] - Access to secretsline 3234
[Credential-related source omitted] - Access to secretsline 3237
[Credential-related source omitted] - Access to secretsline 3237
[Credential-related source omitted] - Network accessline 3240
"observation_end": _fred_date(_today()), }) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" - Network accessline 3240
"observation_end": _fred_date(_today()), }) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" - Network accessline 3241
}) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: - Network accessline 3241
}) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: - Network accessline 3242
url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 3242
url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 3243
try: with urllib.request.urlopen(url, timeout=15) as resp: payload = json.loads(resp.read().decode()) - Network accessline 3243
try: with urllib.request.urlopen(url, timeout=15) as resp: payload = json.loads(resp.read().decode()) - Network accessline 3244
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 3244
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 4270
unavailable_msg=( "申万行业指数不可得;Tushare sw_daily 需 5000 积分" "(https://tushare.pro/document/2?doc_id=327)," - Network accessline 4270
unavailable_msg=( "申万行业指数不可得;Tushare sw_daily 需 5000 积分" "(https://tushare.pro/document/2?doc_id=327)," - Network accessline 4271
"申万行业指数不可得;Tushare sw_daily 需 5000 积分" "(https://tushare.pro/document/2?doc_id=327)," "2000 分档已尝试 akshare 回退" - Network accessline 4271
"申万行业指数不可得;Tushare sw_daily 需 5000 积分" "(https://tushare.pro/document/2?doc_id=327)," "2000 分档已尝试 akshare 回退" - Network accessline 4272
"(https://tushare.pro/document/2?doc_id=327)," - Network accessline 4272
"(https://tushare.pro/document/2?doc_id=327),"
skills/invest-a-stock/scripts/lib/collector/_sources.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 122
global _run_kline_quote_cache_day if os.environ.get("INVEST_QUOTE_CACHE", "1") == "0": return fetch() - Network accessline 122
global _run_kline_quote_cache_day if os.environ.get("INVEST_QUOTE_CACHE", "1") == "0": return fetch() - Network accessline 123
[Credential-related source omitted] - Network accessline 123
[Credential-related source omitted] - Access to secretsline 123
[Credential-related source omitted] - Access to secretsline 123
[Credential-related source omitted] - Network accessline 124
return fetch() - Network accessline 124
return fetch() - Network accessline 138
return sliced return None # 0 行切片 → None(对齐直连空窗口语义,不判成功) rows = fetch() - Network accessline 138
return sliced return None # 0 行切片 → None(对齐直连空窗口语义,不判成功) rows = fetch() - Network accessline 139
return None # 0 行切片 → None(对齐直连空窗口语义,不判成功) rows = fetch() if not rows: - Network accessline 139
return None # 0 行切片 → None(对齐直连空窗口语义,不判成功) rows = fetch() if not rows: - Network accessline 140
rows = fetch() - Network accessline 140
rows = fetch()
skills/invest-a-stock/scripts/lib/data_util.py
skills/invest-a-stock/scripts/lib/db_util.py
skills/invest-a-stock/scripts/lib/env.py
skills/invest-a-stock/scripts/lib/events.py
skills/invest-a-stock/scripts/lib/evidence.py
skills/invest-a-stock/scripts/lib/financial_rigor.py
skills/invest-a-stock/scripts/lib/financials.py
skills/invest-a-stock/scripts/lib/fusion.py
skills/invest-a-stock/scripts/lib/futures_data.py
skills/invest-a-stock/scripts/lib/html_charts.py
skills/invest-a-stock/scripts/lib/income_driver.py
skills/invest-a-stock/scripts/lib/industry/__init__.py
skills/invest-a-stock/scripts/lib/industry/banks.py
skills/invest-a-stock/scripts/lib/industry/base.py
skills/invest-a-stock/scripts/lib/industry/tech_hardware.py
skills/invest-a-stock/scripts/lib/insight_model.py
skills/invest-a-stock/scripts/lib/json_util.py
skills/invest-a-stock/scripts/lib/kline_cache.py
skills/invest-a-stock/scripts/lib/lhb.py
skills/invest-a-stock/scripts/lib/lint.py
skills/invest-a-stock/scripts/lib/macro.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Network accessline 103
"observation_end": _to_iso_date(_today()), }) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" - Network accessline 103
"observation_end": _to_iso_date(_today()), }) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" - Network accessline 104
}) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: - Network accessline 104
}) url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: - Network accessline 105
url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 105
url = f"https://api.stlouisfed.org/fred/series/observations?{params}" try: with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 106
try: with urllib.request.urlopen(url, timeout=15) as resp: payload = json.loads(resp.read().decode()) - Network accessline 106
try: with urllib.request.urlopen(url, timeout=15) as resp: payload = json.loads(resp.read().decode()) - Network accessline 107
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 107
with urllib.request.urlopen(url, timeout=15) as resp: - Network accessline 138
url = "https://query1.finance.yahoo.com/v8/finance/chart/%5ESOX?interval=1d&range=5d" try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 138
url = "https://query1.finance.yahoo.com/v8/finance/chart/%5ESOX?interval=1d&range=5d" try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 139
try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) with urllib.request.urlopen(req, timeout=10) as resp: - Network accessline 139
try: req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) with urllib.request.urlopen(req, timeout=10) as resp: - Network accessline 140
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 140
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 141
with urllib.request.urlopen(req, timeout=10) as resp: - Network accessline 141
with urllib.request.urlopen(req, timeout=10) as resp: - Access to secretsline 255
[Credential-related source omitted] - Access to secretsline 255
[Credential-related source omitted] - Network accessline 329
sess = requests.Session() - Network accessline 329
sess = requests.Session() - Network accessline 348
if _session is None: _session = _new_nyfed_session() xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" - Network accessline 348
if _session is None: _session = _new_nyfed_session() xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" - Network accessline 349
_session = _new_nyfed_session() xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" try: - Network accessline 349
_session = _new_nyfed_session() xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" try: - Network accessline 350
xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" - Network accessline 350
xls_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/ACMTermPremium.xls" - Network accessline 357
except Exception as exc: logger.warning("ACMTP10 xls fetch failed: %s", exc) csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv" - Network accessline 357
except Exception as exc: logger.warning("ACMTP10 xls fetch failed: %s", exc) csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv" - Network accessline 358
logger.warning("ACMTP10 xls fetch failed: %s", exc) csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv" try: - Network accessline 358
logger.warning("ACMTP10 xls fetch failed: %s", exc) csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv" try: - Network accessline 359
csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv" - Network accessline 359
csv_url = "https://www.newyorkfed.org/medialibrary/media/research/data_indicators/acmPlot_data.csv"
skills/invest-a-stock/scripts/lib/manifest.py
skills/invest-a-stock/scripts/lib/market_daily.py
skills/invest-a-stock/scripts/lib/market_pulse.py
skills/invest-a-stock/scripts/lib/md_subset.py
skills/invest-a-stock/scripts/lib/news_scanner.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted] - Network accessline 132
query = f"{name} {symbol} 最新 新闻" try: r = requests.post( - Network accessline 132
query = f"{name} {symbol} 最新 新闻" try: r = requests.post( - Network accessline 133
try: r = requests.post( "https://api.tavily.com/search", - Network accessline 133
try: r = requests.post( "https://api.tavily.com/search", - Network accessline 134
r = requests.post( - Network accessline 134
r = requests.post( - Network accessline 135
"https://api.tavily.com/search", - Network accessline 135
"https://api.tavily.com/search", - Access to secretsline 137
[Credential-related source omitted] - Access to secretsline 137
[Credential-related source omitted]
skills/invest-a-stock/scripts/lib/notice_body.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 32
_API = "https://np-cnotice-stock.eastmoney.com/api/content/ann" - Network accessline 32
_API = "https://np-cnotice-stock.eastmoney.com/api/content/ann" - Network accessline 33
_UA = {"User-Agent": "Mozilla/5.0", "Referer": "https://data.eastmoney.com/"} - Network accessline 33
_UA = {"User-Agent": "Mozilla/5.0", "Referer": "https://data.eastmoney.com/"} - Network accessline 139
try: with akshare_direct_session(): req = urllib.request.Request(url, headers=_UA) - Network accessline 139
try: with akshare_direct_session(): req = urllib.request.Request(url, headers=_UA) - Network accessline 140
with akshare_direct_session(): req = urllib.request.Request(url, headers=_UA) with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 140
with akshare_direct_session(): req = urllib.request.Request(url, headers=_UA) with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 141
req = urllib.request.Request(url, headers=_UA) - Network accessline 141
req = urllib.request.Request(url, headers=_UA) - Network accessline 142
with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 142
with urllib.request.urlopen(req, timeout=timeout) as resp:
skills/invest-a-stock/scripts/lib/nums.py
skills/invest-a-stock/scripts/lib/participant_scan.py
skills/invest-a-stock/scripts/lib/planner.py
skills/invest-a-stock/scripts/lib/portfolio_review.py
skills/invest-a-stock/scripts/lib/positions.py
skills/invest-a-stock/scripts/lib/proxy.py
skills/invest-a-stock/scripts/lib/qfq.py
skills/invest-a-stock/scripts/lib/quality_check.py
skills/invest-a-stock/scripts/lib/render.py
skills/invest-a-stock/scripts/lib/render_dcf.py
skills/invest-a-stock/scripts/lib/render_extras.py
skills/invest-a-stock/scripts/lib/render_html.py
skills/invest-a-stock/scripts/lib/render_icons.py
skills/invest-a-stock/scripts/lib/render_insight.py
skills/invest-a-stock/scripts/lib/render_markdown/__init__.py
skills/invest-a-stock/scripts/lib/render_markdown/_base.py
skills/invest-a-stock/scripts/lib/render_markdown/_concise.py
skills/invest-a-stock/scripts/lib/render_markdown/_legacy.py
skills/invest-a-stock/scripts/lib/render_markdown/_v2.py
skills/invest-a-stock/scripts/lib/render_markdown/_v3.py
skills/invest-a-stock/scripts/lib/render_risk.py
skills/invest-a-stock/scripts/lib/render_utils.py
skills/invest-a-stock/scripts/lib/report_audit.py
skills/invest-a-stock/scripts/lib/report_snapshot.py
skills/invest-a-stock/scripts/lib/rerank.py
skills/invest-a-stock/scripts/lib/research_profile.py
skills/invest-a-stock/scripts/lib/risk_reward.py
skills/invest-a-stock/scripts/lib/risk_scanner.py
skills/invest-a-stock/scripts/lib/schema.py
skills/invest-a-stock/scripts/lib/scoring.py
skills/invest-a-stock/scripts/lib/search_cache.py
skills/invest-a-stock/scripts/lib/shared_codes.py
skills/invest-a-stock/scripts/lib/shared_dates.py
skills/invest-a-stock/scripts/lib/stats.py
skills/invest-a-stock/scripts/lib/store.py
skills/invest-a-stock/scripts/lib/style_match.py
skills/invest-a-stock/scripts/lib/technical.py
skills/invest-a-stock/scripts/lib/trade_cal.py
skills/invest-a-stock/scripts/lib/tushare_client.py
skills/invest-a-stock/scripts/lib/valuation.py
skills/invest-a-stock/scripts/lib/version.py
skills/invest-a-stock/scripts/merge_collections.py
skills/invest-a-stock/scripts/valuation_calc.py
skills/invest-a-stock/tests/conftest.py
skills/invest-a-stock/tests/fixtures/__init__.py
skills/invest-a-stock/tests/fixtures/collections.py
skills/invest-a-stock/tests/stock_testutil.py
skills/invest-a-stock/tests/test_agent_facts.py
skills/invest-a-stock/tests/test_analysis_schema.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 359
[{"id": "F1", "value": 1.0, "formula": "1.0"}], facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", - Network accessline 359
[{"id": "F1", "value": 1.0, "formula": "1.0"}], facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", - Network accessline 360
facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", )) == [] - Network accessline 360
facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", )) == [] - Network accessline 361
analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", - Network accessline 361
analysis_md="来源 https://x.com/p/123 的公开页。(证据 B)", - Network accessline 366
[{"id": "F1", "value": 1.0, "formula": "1.0"}], facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)", - Network accessline 366
[{"id": "F1", "value": 1.0, "formula": "1.0"}], facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)", - Network accessline 367
facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)", )) - Network accessline 367
facts_md="事实 [来源: engine]", analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)", )) - Network accessline 368
analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)", - Network accessline 368
analysis_md="来源 https://x.com/p/123 该季增长 999%。(证据 B)",
skills/invest-a-stock/tests/test_analysis_templates.py
skills/invest-a-stock/tests/test_atomic_json_contract.py
skills/invest-a-stock/tests/test_attribution.py
skills/invest-a-stock/tests/test_catalyst.py
skills/invest-a-stock/tests/test_chain.py
skills/invest-a-stock/tests/test_cli_dispatch.py
skills/invest-a-stock/tests/test_cli_html.py
skills/invest-a-stock/tests/test_climate.py
skills/invest-a-stock/tests/test_collector.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 98
[Credential-related source omitted] - Network accessline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Network accessline 99
[Credential-related source omitted] - Network accessline 99
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted]
skills/invest-a-stock/tests/test_collector_fixes.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 676
r = _q_tencent_quote("600000") assert captured["url"] == "http://qt.gtimg.cn/q=sh600000" - Network accessline 676
r = _q_tencent_quote("600000") assert captured["url"] == "http://qt.gtimg.cn/q=sh600000" - Network accessline 677
assert captured["url"] == "http://qt.gtimg.cn/q=sh600000" - Network accessline 677
assert captured["url"] == "http://qt.gtimg.cn/q=sh600000"
skills/invest-a-stock/tests/test_collector_run_cache.py
skills/invest-a-stock/tests/test_collector_zombie_cache.py
skills/invest-a-stock/tests/test_cross_validation.py
skills/invest-a-stock/tests/test_d3_sourcing_labels.py
skills/invest-a-stock/tests/test_default_store.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 222
[Credential-related source omitted] - Access to secretsline 222
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted]
skills/invest-a-stock/tests/test_disposition_hint.py
skills/invest-a-stock/tests/test_entry_check_precision.py
skills/invest-a-stock/tests/test_env.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Access to secretsline 171
[Credential-related source omitted] - Access to secretsline 171
[Credential-related source omitted]
skills/invest-a-stock/tests/test_events.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 473
"logic_relation": "强化", "source": "akshare stock_individual_notice_report", "url": "http://example.com", - Network accessline 473
"logic_relation": "强化", "source": "akshare stock_individual_notice_report", "url": "http://example.com", - Network accessline 474
"source": "akshare stock_individual_notice_report", "url": "http://example.com", }, - Network accessline 474
"source": "akshare stock_individual_notice_report", "url": "http://example.com", }, - Network accessline 475
"url": "http://example.com", - Network accessline 475
"url": "http://example.com", - Network accessline 616
mock_notice.return_value = MockDataFrame([ {"代码": "600176", "名称": "中国巨石", "公告标题": "关于回购公司股份的公告", "公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"}, - Network accessline 616
mock_notice.return_value = MockDataFrame([ {"代码": "600176", "名称": "中国巨石", "公告标题": "关于回购公司股份的公告", "公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"}, - Network accessline 617
{"代码": "600176", "名称": "中国巨石", "公告标题": "关于回购公司股份的公告", "公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"}, {"代码": "600176", "名称": "中国巨石", "公告标题": "2025年年度报告", - Network accessline 617
{"代码": "600176", "名称": "中国巨石", "公告标题": "关于回购公司股份的公告", "公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"}, {"代码": "600176", "名称": "中国巨石", "公告标题": "2025年年度报告", - Network accessline 618
"公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"}, - Network accessline 618
"公告类型": "回购", "公告日期": "2026-06-15", "网址": "http://example.com"},
skills/invest-a-stock/tests/test_events_notice_types.py
skills/invest-a-stock/tests/test_evidence.py
skills/invest-a-stock/tests/test_fast_report_pipeline.py
skills/invest-a-stock/tests/test_financial_rigor.py
skills/invest-a-stock/tests/test_financials.py
skills/invest-a-stock/tests/test_full_analysis_cli.py
skills/invest-a-stock/tests/test_fusion.py
skills/invest-a-stock/tests/test_futures_data.py
skills/invest-a-stock/tests/test_html_charts.py
skills/invest-a-stock/tests/test_industry_success_factors.py
skills/invest-a-stock/tests/test_injection_shield.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 50
assert _is_safe_href("javascript:alert(1)") is False assert _is_safe_href("data:text/html;base64,xx") is False assert _is_safe_href("https://a.b/c") is True - Network accessline 50
assert _is_safe_href("javascript:alert(1)") is False assert _is_safe_href("data:text/html;base64,xx") is False assert _is_safe_href("https://a.b/c") is True - Network accessline 51
assert _is_safe_href("data:text/html;base64,xx") is False assert _is_safe_href("https://a.b/c") is True assert _is_safe_href("#refs") is True - Network accessline 51
assert _is_safe_href("data:text/html;base64,xx") is False assert _is_safe_href("https://a.b/c") is True assert _is_safe_href("#refs") is True - Network accessline 52
assert _is_safe_href("https://a.b/c") is True - Network accessline 52
assert _is_safe_href("https://a.b/c") is True - Network accessline 55
assert 'href="javascript:' not in out assert "javascript:alert(1)" in out # 字面保留(已转义) out2 = render_markdown("[x](https://a.b/c)") - Network accessline 55
assert 'href="javascript:' not in out assert "javascript:alert(1)" in out # 字面保留(已转义) out2 = render_markdown("[x](https://a.b/c)") - Network accessline 56
assert "javascript:alert(1)" in out # 字面保留(已转义) out2 = render_markdown("[x](https://a.b/c)") assert 'href="https://a.b/c' in out2 - Network accessline 56
assert "javascript:alert(1)" in out # 字面保留(已转义) out2 = render_markdown("[x](https://a.b/c)") assert 'href="https://a.b/c' in out2 - Network accessline 57
out2 = render_markdown("[x](https://a.b/c)") - Network accessline 57
out2 = render_markdown("[x](https://a.b/c)") - Network accessline 58
assert 'href="https://a.b/c' in out2 - Network accessline 58
assert 'href="https://a.b/c' in out2
skills/invest-a-stock/tests/test_insight_analysis_cli.py
skills/invest-a-stock/tests/test_insight_discoveries_chains.py
skills/invest-a-stock/tests/test_insight_report.py
skills/invest-a-stock/tests/test_invest_cli_help.py
skills/invest-a-stock/tests/test_lhb.py
skills/invest-a-stock/tests/test_lint.py
skills/invest-a-stock/tests/test_macro_extended.py
skills/invest-a-stock/tests/test_manifest.py
skills/invest-a-stock/tests/test_market_daily.py
skills/invest-a-stock/tests/test_market_status_basis.py
skills/invest-a-stock/tests/test_md_subset.py
skills/invest-a-stock/tests/test_merge_collections.py
skills/invest-a-stock/tests/test_news_scanner.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 19
label, score = classify_credibility("上交所公告", "重大事项", "http://www.sse.com.cn") - Network accessline 19
label, score = classify_credibility("上交所公告", "重大事项", "http://www.sse.com.cn") - Network accessline 86
label, score = classify_credibility( "某公司季度经营数据发布", "内容摘要", "https://www.eastmoney.com/news/123", - Network accessline 86
label, score = classify_credibility( "某公司季度经营数据发布", "内容摘要", "https://www.eastmoney.com/news/123", - Network accessline 87
"某公司季度经营数据发布", "内容摘要", "https://www.eastmoney.com/news/123", ) - Network accessline 87
"某公司季度经营数据发布", "内容摘要", "https://www.eastmoney.com/news/123", ) - Network accessline 88
"https://www.eastmoney.com/news/123", - Network accessline 88
"https://www.eastmoney.com/news/123",
skills/invest-a-stock/tests/test_notice_body.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 23
@pytest.mark.parametrize("url,expected", [ ("https://data.eastmoney.com/notices/detail/600176/AN202609171829519061.html", - Network accessline 23
@pytest.mark.parametrize("url,expected", [ ("https://data.eastmoney.com/notices/detail/600176/AN202609171829519061.html", - Network accessline 24
("https://data.eastmoney.com/notices/detail/600176/AN202609171829519061.html", - Network accessline 24
("https://data.eastmoney.com/notices/detail/600176/AN202609171829519061.html", - Network accessline 25
"AN202609171829519061"), ("https://data.eastmoney.com/notices/detail/300750/AN202609211829726640.html", "AN202609211829726640"), - Network accessline 25
"AN202609171829519061"), ("https://data.eastmoney.com/notices/detail/300750/AN202609211829726640.html", "AN202609211829726640"), - Network accessline 26
("https://data.eastmoney.com/notices/detail/300750/AN202609211829726640.html", - Network accessline 26
("https://data.eastmoney.com/notices/detail/300750/AN202609211829726640.html", - Network accessline 27
"AN202609211829726640"), ("", None), ("https://example.com/no-code.html", None), - Network accessline 27
"AN202609211829726640"), ("", None), ("https://example.com/no-code.html", None), - Network accessline 28
("", None), ("https://example.com/no-code.html", None), ]) - Network accessline 28
("", None), ("https://example.com/no-code.html", None), ]) - Network accessline 29
("https://example.com/no-code.html", None), - Network accessline 29
("https://example.com/no-code.html", None), - Network accessline 150
r = NB.fetch_notice_body("") assert r["status"] == "missing" assert NB.fetch_body_by_url("https://example.com/x.html")["status"] == "missing" - Network accessline 150
r = NB.fetch_notice_body("") assert r["status"] == "missing" assert NB.fetch_body_by_url("https://example.com/x.html")["status"] == "missing" - Network accessline 152
assert NB.fetch_body_by_url("https://example.com/x.html")["status"] == "missing" - Network accessline 152
assert NB.fetch_body_by_url("https://example.com/x.html")["status"] == "missing" - Network accessline 244
_stub_net(monkeypatch, "公告正文") rc = invest.cmd_notice_body(argparse.Namespace( target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html", - Network accessline 244
_stub_net(monkeypatch, "公告正文") rc = invest.cmd_notice_body(argparse.Namespace( target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html", - Network accessline 245
rc = invest.cmd_notice_body(argparse.Namespace( target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html", no_cache=True, json=False)) - Network accessline 245
rc = invest.cmd_notice_body(argparse.Namespace( target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html", no_cache=True, json=False)) - Network accessline 246
target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html", - Network accessline 246
target="https://data.eastmoney.com/notices/detail/600176/AN000000000000000010.html",
skills/invest-a-stock/tests/test_orchestrate_blocks.py
skills/invest-a-stock/tests/test_parse_fetched_at_parity.py
skills/invest-a-stock/tests/test_participant_scan.py
skills/invest-a-stock/tests/test_pcr_freshness.py
skills/invest-a-stock/tests/test_pe_loss_missing_consistency.py
skills/invest-a-stock/tests/test_peer_cli.py
skills/invest-a-stock/tests/test_peer_market_caps.py
skills/invest-a-stock/tests/test_percentile_core_shared.py
skills/invest-a-stock/tests/test_portfolio_review.py
skills/invest-a-stock/tests/test_positions.py
skills/invest-a-stock/tests/test_price_basis_label.py
skills/invest-a-stock/tests/test_proxy.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 15
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 15
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Network accessline 32
实测(2026-10-14):urllib.getproxies()/requests.get_environ_proxies() - Network accessline 32
实测(2026-10-14):urllib.getproxies()/requests.get_environ_proxies() - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Network accessline 56
monkeypatch.delenv(key, raising=False) monkeypatch.setenv("NO_PROXY", "localhost") monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 56
monkeypatch.delenv(key, raising=False) monkeypatch.setenv("NO_PROXY", "localhost") monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 57
monkeypatch.setenv("NO_PROXY", "localhost") monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") info = detect_proxy() - Network accessline 57
monkeypatch.setenv("NO_PROXY", "localhost") monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") info = detect_proxy() - Network accessline 58
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 58
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Network accessline 68
monkeypatch.delenv(key, raising=False) monkeypatch.setenv("no_proxy", "localhost,127.0.0.1") assert requests_use_proxy("https://push2.eastmoney.com") is False - Network accessline 68
monkeypatch.delenv(key, raising=False) monkeypatch.setenv("no_proxy", "localhost,127.0.0.1") assert requests_use_proxy("https://push2.eastmoney.com") is False - Network accessline 69
monkeypatch.setenv("no_proxy", "localhost,127.0.0.1") assert requests_use_proxy("https://push2.eastmoney.com") is False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 69
monkeypatch.setenv("no_proxy", "localhost,127.0.0.1") assert requests_use_proxy("https://push2.eastmoney.com") is False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 70
assert requests_use_proxy("https://push2.eastmoney.com") is False - Network accessline 70
assert requests_use_proxy("https://push2.eastmoney.com") is False - Network accessline 71
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 71
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 72
assert requests_use_proxy("https://push2.eastmoney.com") is True - Network accessline 72
assert requests_use_proxy("https://push2.eastmoney.com") is True - Network accessline 85
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 85
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 86
monkeypatch.setenv("ALL_PROXY", "http://test-proxy:8080") - Network accessline 86
monkeypatch.setenv("ALL_PROXY", "http://test-proxy:8080") - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Network accessline 91
[Credential-related source omitted] - Network accessline 91
[Credential-related source omitted] - Access to secretsline 91
[Credential-related source omitted] - Access to secretsline 91
[Credential-related source omitted] - Network accessline 93
[Credential-related source omitted] - Network accessline 93
[Credential-related source omitted] - Access to secretsline 93
[Credential-related source omitted] - Access to secretsline 93
[Credential-related source omitted] - Network accessline 99
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 99
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 100
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 100
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 101
monkeypatch.setenv("ALL_PROXY", "http://127.0.0.1:7890") - Network accessline 101
monkeypatch.setenv("ALL_PROXY", "http://127.0.0.1:7890") - Network accessline 112
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 112
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 113
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 113
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 124
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 124
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 141
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 141
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 209
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 209
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Access to secretsline 218
[Credential-related source omitted] - Access to secretsline 218
[Credential-related source omitted] - Network accessline 226
t.join() assert errors == [] assert os.environ.get("HTTP_PROXY") == "http://test-proxy:8080" - Network accessline 226
t.join() assert errors == [] assert os.environ.get("HTTP_PROXY") == "http://test-proxy:8080" - Network accessline 228
[Credential-related source omitted] - Network accessline 228
[Credential-related source omitted] - Access to secretsline 228
[Credential-related source omitted] - Access to secretsline 228
[Credential-related source omitted] - Network accessline 234
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 234
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 255
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 255
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Access to secretsline 262
[Credential-related source omitted] - Access to secretsline 262
[Credential-related source omitted] - Network accessline 270
t.join() assert errors == [] assert os.environ.get("HTTP_PROXY") == "http://test-proxy:8080" - Network accessline 270
t.join() assert errors == [] assert os.environ.get("HTTP_PROXY") == "http://test-proxy:8080" - Network accessline 272
[Credential-related source omitted] - Network accessline 272
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Network accessline 283
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 283
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") - Network accessline 284
monkeypatch.setenv("ALL_PROXY", "http://test-proxy:8080") - Network accessline 284
monkeypatch.setenv("ALL_PROXY", "http://test-proxy:8080") - Access to secretsline 292
[Credential-related source omitted] - Access to secretsline 292
[Credential-related source omitted] - Network accessline 294
[Credential-related source omitted] - Network accessline 294
[Credential-related source omitted] - Access to secretsline 294
[Credential-related source omitted] - Access to secretsline 294
[Credential-related source omitted] - Network accessline 295
[Credential-related source omitted] - Network accessline 295
[Credential-related source omitted] - Access to secretsline 295
[Credential-related source omitted] - Access to secretsline 295
[Credential-related source omitted] - Network accessline 304
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 304
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 305
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 305
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 324
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 324
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 342
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 342
proxy_mod._warned = False monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 343
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Network accessline 343
monkeypatch.setenv("HTTP_PROXY", "http://127.0.0.1:7890") - Access to secretsline 354
[Credential-related source omitted] - Access to secretsline 354
[Credential-related source omitted] - Network accessline 366
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") with akshare_direct_session(): assert requests.request is not orig_request - Network accessline 366
monkeypatch.setenv("HTTP_PROXY", "http://test-proxy:8080") with akshare_direct_session(): assert requests.request is not orig_request
skills/invest-a-stock/tests/test_qc_render_output_regression.py
skills/invest-a-stock/tests/test_quality_check.py
skills/invest-a-stock/tests/test_r12h.py
skills/invest-a-stock/tests/test_redundancy_phase23.py
skills/invest-a-stock/tests/test_render_code_review_fixes.py
skills/invest-a-stock/tests/test_render_concise_fixes.py
skills/invest-a-stock/tests/test_render_extras.py
skills/invest-a-stock/tests/test_render_html.py
skills/invest-a-stock/tests/test_render_v2.py
skills/invest-a-stock/tests/test_report_audit.py
skills/invest-a-stock/tests/test_report_diff_history.py
skills/invest-a-stock/tests/test_report_filepath.py
skills/invest-a-stock/tests/test_report_qc_gates.py
skills/invest-a-stock/tests/test_report_snapshot.py
skills/invest-a-stock/tests/test_rerank.py
skills/invest-a-stock/tests/test_research.py
skills/invest-a-stock/tests/test_research_profile.py
skills/invest-a-stock/tests/test_risk_reward.py
skills/invest-a-stock/tests/test_risk_scanner.py
skills/invest-a-stock/tests/test_schema.py
skills/invest-a-stock/tests/test_search_cache.py
skills/invest-a-stock/tests/test_sector_sync_collector.py
skills/invest-a-stock/tests/test_segments_collector.py
skills/invest-a-stock/tests/test_store_diff.py
skills/invest-a-stock/tests/test_store_pipeline.py
skills/invest-a-stock/tests/test_store_public_connection.py
skills/invest-a-stock/tests/test_style_match.py
skills/invest-a-stock/tests/test_sw_member_all.py
skills/invest-a-stock/tests/test_technical.py
skills/invest-a-stock/tests/test_technical_v019.py
skills/invest-a-stock/tests/test_test_hygiene.py
skills/invest-a-stock/tests/test_thesis_dates.py
skills/invest-a-stock/tests/test_tushare_client.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Network accessline 218
口径见官方《积分与频次权限对应表》(https://tushare.pro/document/1?doc_id=290); - Network accessline 218
口径见官方《积分与频次权限对应表》(https://tushare.pro/document/1?doc_id=290); - Access to secretsline 442
[Credential-related source omitted] - Access to secretsline 442
[Credential-related source omitted] - Access to secretsline 459
[Credential-related source omitted] - Access to secretsline 459
[Credential-related source omitted] - Access to secretsline 465
[Credential-related source omitted] - Access to secretsline 465
[Credential-related source omitted]
skills/invest-a-stock/tests/test_v013_phase1.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 309
[Credential-related source omitted] - Access to secretsline 309
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted]
skills/invest-a-stock/tests/test_v013_phase2.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted]
skills/invest-a-stock/tests/test_v013_phase3.py
skills/invest-a-stock/tests/test_v013_phase4.py
skills/invest-a-stock/tests/test_v014.py
skills/invest-a-stock/tests/test_v015_fixes.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 269
[Credential-related source omitted] - Access to secretsline 269
[Credential-related source omitted] - Network accessline 304
monkeypatch.setattr("lib.env.is_fred_available", lambda _c: True) monkeypatch.setattr( "urllib.request.urlopen", - Network accessline 304
monkeypatch.setattr("lib.env.is_fred_available", lambda _c: True) monkeypatch.setattr( "urllib.request.urlopen", - Network accessline 305
monkeypatch.setattr( "urllib.request.urlopen", lambda *a, **k: _Resp(), - Network accessline 305
monkeypatch.setattr( "urllib.request.urlopen", lambda *a, **k: _Resp(), - Network accessline 306
"urllib.request.urlopen", - Network accessline 306
"urllib.request.urlopen", - Access to secretsline 310
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Network accessline 339
monkeypatch.setattr( "urllib.request.urlopen", - Network accessline 339
monkeypatch.setattr( "urllib.request.urlopen", - Network accessline 340
"urllib.request.urlopen", - Network accessline 340
"urllib.request.urlopen", - Network accessline 351
monkeypatch.setattr("urllib.request.urlopen", _boom) - Network accessline 351
monkeypatch.setattr("urllib.request.urlopen", _boom)
skills/invest-a-stock/tests/test_v017.py
skills/invest-a-stock/tests/test_v017_e2e.py
skills/invest-a-stock/tests/test_v018.py
skills/invest-a-stock/tests/test_v026_p0_fixes.py
skills/invest-a-stock/tests/test_v026_review_fixes.py
skills/invest-a-stock/tests/test_v027_fixes.py
skills/invest-a-stock/tests/test_v028_fixes.py
skills/invest-a-stock/tests/test_v030_reading_layers.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 357
"credibility": "official", "credibility_score": 0.95, "title": "某公告", "source": "notice", "url": "https://example.invalid/a"}]} - Network accessline 357
"credibility": "official", "credibility_score": 0.95, "title": "某公告", "source": "notice", "url": "https://example.invalid/a"}]} - Network accessline 358
"title": "某公告", "source": "notice", "url": "https://example.invalid/a"}]} out = render_report_v3(coll, "600176", mode="full") - Network accessline 358
"title": "某公告", "source": "notice", "url": "https://example.invalid/a"}]} out = render_report_v3(coll, "600176", mode="full") - Network accessline 359
"url": "https://example.invalid/a"}]} - Network accessline 359
"url": "https://example.invalid/a"}]}
skills/invest-a-stock/tests/test_v031_c1_fin_series.py
skills/invest-a-stock/tests/test_v031_c2_rf.py
skills/invest-a-stock/tests/test_v031_c3_bank_leverage.py
skills/invest-a-stock/tests/test_v031_mainline_rev.py
skills/invest-a-stock/tests/test_v031_priority_review.py
skills/invest-a-stock/tests/test_v031_reading_surface.py
skills/invest-a-stock/tests/test_valuation.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 1056
monkeypatch.setattr(_proxy, "no_proxy_session", lambda: _FakeCtx()) out = _get_quote_tencent("600519") assert captured["url"] == "http://qt.gtimg.cn/q=sh600519" - Network accessline 1056
monkeypatch.setattr(_proxy, "no_proxy_session", lambda: _FakeCtx()) out = _get_quote_tencent("600519") assert captured["url"] == "http://qt.gtimg.cn/q=sh600519" - Network accessline 1057
out = _get_quote_tencent("600519") assert captured["url"] == "http://qt.gtimg.cn/q=sh600519" assert out["price"] == 18.52 - Network accessline 1057
out = _get_quote_tencent("600519") assert captured["url"] == "http://qt.gtimg.cn/q=sh600519" assert out["price"] == 18.52 - Network accessline 1058
assert captured["url"] == "http://qt.gtimg.cn/q=sh600519" - Network accessline 1058
assert captured["url"] == "http://qt.gtimg.cn/q=sh600519"
skills/invest-a-stock/tests/test_version.py
skills/invest-a-stock/tests/test_version_sync.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 55
(root / "README.md").write_text( "# test\n\n[![Release]" f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n", - Network accessline 55
(root / "README.md").write_text( "# test\n\n[![Release]" f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n", - Network accessline 56
"# test\n\n[![Release]" f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n", encoding="utf-8", - Network accessline 56
"# test\n\n[![Release]" f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n", encoding="utf-8", - Network accessline 57
f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n", - Network accessline 57
f"(https://img.shields.io/github/v/release/Veblin/invest-skills?label=v{version})]\n",
skills/invest-hk-stock/SKILL.md
skills/invest-hk-stock/scripts/hk.py
skills/invest-hk-stock/scripts/lib/__init__.py
skills/invest-hk-stock/scripts/lib/_invest_path.py
skills/invest-hk-stock/scripts/lib/hk_ah.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Access to secretsline 377
[Credential-related source omitted] - Access to secretsline 377
[Credential-related source omitted] - Network accessline 381
def _latest(series: str) -> tuple[str, float] | None: url = (f"https://api.stlouisfed.org/fred/series/observations?series_id={series}" - Network accessline 381
def _latest(series: str) -> tuple[str, float] | None: url = (f"https://api.stlouisfed.org/fred/series/observations?series_id={series}" - Network accessline 382
[Credential-related source omitted] - Network accessline 382
[Credential-related source omitted] - Network accessline 383
[Credential-related source omitted] - Network accessline 383
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Network accessline 384
with urllib.request.urlopen(url, timeout=20) as resp: # noqa: S310 固定官方主机 - Network accessline 384
with urllib.request.urlopen(url, timeout=20) as resp: # noqa: S310 固定官方主机
skills/invest-hk-stock/scripts/lib/hk_calendar.py
skills/invest-hk-stock/scripts/lib/hk_codes.py
skills/invest-hk-stock/scripts/lib/hk_compare.py
skills/invest-hk-stock/scripts/lib/hk_financials.py
skills/invest-hk-stock/scripts/lib/hk_kline.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 3
2026-09-06 实测:`https://ifzq.gtimg.cn/appstock/app/fqkline/get?param=hk00700,day,,,N,qfq` - Network accessline 3
2026-09-06 实测:`https://ifzq.gtimg.cn/appstock/app/fqkline/get?param=hk00700,day,,,N,qfq` - Network accessline 18
FQKLINE_URL = "https://ifzq.gtimg.cn/appstock/app/fqkline/get" - Network accessline 18
FQKLINE_URL = "https://ifzq.gtimg.cn/appstock/app/fqkline/get" - Network accessline 27
code = parse_hk_symbol(sym) params = {"param": f"hk{code},day,,,{days},qfq"} resp = requests.get(FQKLINE_URL, params=params, timeout=timeout, - Network accessline 27
code = parse_hk_symbol(sym) params = {"param": f"hk{code},day,,,{days},qfq"} resp = requests.get(FQKLINE_URL, params=params, timeout=timeout, - Network accessline 28
params = {"param": f"hk{code},day,,,{days},qfq"} resp = requests.get(FQKLINE_URL, params=params, timeout=timeout, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 28
params = {"param": f"hk{code},day,,,{days},qfq"} resp = requests.get(FQKLINE_URL, params=params, timeout=timeout, headers={"User-Agent": "Mozilla/5.0"}) - Network accessline 29
resp = requests.get(FQKLINE_URL, params=params, timeout=timeout, - Network accessline 29
resp = requests.get(FQKLINE_URL, params=params, timeout=timeout,
skills/invest-hk-stock/scripts/lib/hk_quote.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 25
TENCENT_HK_URL = "http://qt.gtimg.cn/q=r_hk{sym}" - Network accessline 25
TENCENT_HK_URL = "http://qt.gtimg.cn/q=r_hk{sym}" - Network accessline 63
import requests code = parse_hk_symbol(sym) resp = requests.get( - Network accessline 63
import requests code = parse_hk_symbol(sym) resp = requests.get( - Network accessline 64
code = parse_hk_symbol(sym) resp = requests.get( TENCENT_HK_URL.format(sym=code), - Network accessline 64
code = parse_hk_symbol(sym) resp = requests.get( TENCENT_HK_URL.format(sym=code), - Network accessline 65
resp = requests.get( - Network accessline 65
resp = requests.get(
skills/invest-hk-stock/scripts/lib/hk_southbound.py
skills/invest-hk-stock/scripts/lib/hk_tushare.py
skills/invest-hk-stock/scripts/lib/hk_valuation.py
skills/invest-hk-stock/scripts/lib/hk_yfinance.py
skills/invest-hk-stock/tests/_hk_cli.py
skills/invest-hk-stock/tests/conftest.py
skills/invest-hk-stock/tests/test_hk_ah.py
skills/invest-hk-stock/tests/test_hk_ah_align.py
skills/invest-hk-stock/tests/test_hk_calendar.py
skills/invest-hk-stock/tests/test_hk_codes.py
skills/invest-hk-stock/tests/test_hk_compare.py
skills/invest-hk-stock/tests/test_hk_data.py
skills/invest-hk-stock/tests/test_hk_quote.py
skills/invest-hk-stock/tests/test_hk_southbound.py
skills/lib/__init__.py
- Executable scriptline 1
Executable file
skills/lib/backtest.py
- Executable scriptline 1
Executable file
skills/lib/cache.py
- Executable scriptline 1
Executable file
skills/lib/codes.py
- Executable scriptline 1
Executable file
skills/lib/config_backtest.py
- Executable scriptline 1
Executable file
skills/lib/data_bridge.py
- Executable scriptline 1
Executable file
skills/lib/data_util.py
- Executable scriptline 1
Executable file
skills/lib/dates.py
- Executable scriptline 1
Executable file
skills/lib/db_util.py
- Executable scriptline 1
Executable file
skills/lib/decision_review.py
- Executable scriptline 1
Executable file
skills/lib/decision_schema.py
- Executable scriptline 1
Executable file
skills/lib/env.py
- Executable scriptline 1
Executable file - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted] - Network accessline 112
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted] - Network accessline 113
"description": "Tushare Token", "how_to_get": "前往 https://tushare.pro 注册并获取 API Token(需积分 ≥120)", "affected_features": [ - Network accessline 114
"how_to_get": "前往 https://tushare.pro 注册并获取 API Token(需积分 ≥120)", - Access to secretsline 124
[Credential-related source omitted] - Network accessline 125
[Credential-related source omitted] - Access to secretsline 125
[Credential-related source omitted] - Network accessline 126
"description": "FRED API Key", "how_to_get": "前往 https://fred.stlouisfed.org/docs/api/api_key.html 免费申请", "affected_features": [ - Network accessline 127
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Network accessline 136
[Credential-related source omitted] - Access to secretsline 136
[Credential-related source omitted] - Network accessline 137
"description": "Tavily API Key", "how_to_get": "前往 https://tavily.com 注册并获取 API Key", "affected_features": [ - Network accessline 138
"how_to_get": "前往 https://tavily.com 注册并获取 API Key", - Access to secretsline 172
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 231
[Credential-related source omitted] - Network accessline 246
try: with no_proxy_session() as sess: r = sess.get("http://qt.gtimg.cn/q=sh600519", timeout=3) - Network accessline 247
with no_proxy_session() as sess: r = sess.get("http://qt.gtimg.cn/q=sh600519", timeout=3) return r.status_code == 200 and "~" in r.text - Network accessline 248
r = sess.get("http://qt.gtimg.cn/q=sh600519", timeout=3) - Access to secretsline 315
[Credential-related source omitted] - Access to secretsline 327
[Credential-related source omitted] - Network accessline 338
requests/urllib3/urllib/http.client 在未显式传 timeout 时都会回落到 - Access to secretsline 344
[Credential-related source omitted] - Access to secretsline 358
[Credential-related source omitted] - Access to secretsline 360
[Credential-related source omitted] - Access to secretsline 361
[Credential-related source omitted] - Access to secretsline 365
[Credential-related source omitted] - Access to secretsline 366
[Credential-related source omitted]
skills/lib/evidence_tags.py
skills/lib/freshness.py
- Executable scriptline 1
Executable file
skills/lib/invest_path.py
- Executable scriptline 1
Executable file
skills/lib/kline_cache.py
skills/lib/lmw.py
- Executable scriptline 1
Executable file
skills/lib/logutil.py
skills/lib/market_microstructure.py
- Executable scriptline 1
Executable file - Network accessline 1103
today = shanghai_today() url = "http://www.szse.cn/api/report/ShowReport" - Network accessline 1104
url = "http://www.szse.cn/api/report/ShowReport" - Network accessline 1110
"random": "0.39339437497296137", } r = requests.get(url, params=params, timeout=20) - Network accessline 1111
} r = requests.get(url, params=params, timeout=20) r.raise_for_status() - Network accessline 1112
r = requests.get(url, params=params, timeout=20)
skills/lib/market_pctile.py
- Executable scriptline 1
Executable file
skills/lib/market_pulse.py
- Executable scriptline 1
Executable file
skills/lib/multiple_testing.py
- Executable scriptline 1
Executable file
skills/lib/nums.py
- Executable scriptline 1
Executable file
skills/lib/proxy.py
- Executable scriptline 1
Executable file - Network accessline 48
PUSH2_EASTMONEY_URL = "https://push2his.eastmoney.com/api/qt/stock/kline/get" - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 189
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 204
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 208
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Network accessline 324
end = now.strftime("%Y%m%d") try: r = requests.get( - Network accessline 325
try: r = requests.get( PUSH2_EASTMONEY_URL, - Network accessline 326
r = requests.get( - Network accessline 342
"Chrome/120.0.0.0 Safari/537.36" ), "Referer": "https://quote.eastmoney.com/", - Network accessline 343
), "Referer": "https://quote.eastmoney.com/", }, - Network accessline 344
"Referer": "https://quote.eastmoney.com/", - Access to secretsline 369
[Credential-related source omitted] - Network accessline 537
sess = requests.Session()
skills/lib/qfq.py
- Executable scriptline 1
Executable file
skills/lib/quote_tencent.py
skills/lib/references/data-interface-map.md
skills/lib/references/development-rules.md
- Access to secretsline 258
[Credential-related source omitted]
skills/lib/references/financial-semantics.md
- Network accessline 10
- 会计事实按企业适用的会计准则与实际披露读取。中期的资产负债表时点、利润表期间和累计现金流不得互换;依据 [财政部《企业会计准则第32号》第五条](https://kjs.mof.gov.cn/zt/kjzzss/kuaijizhunzeshishi/200806/t20080618_46249.htm),另见 [财政部季报现金流口径答复](https://www.mof.gov.cn/bd/mhwzzxly/hjs/202301/t20230129_3864201.htm - Network accessline 11
- 每股收益和披露 ROE 保留法定定义;依据 [证监会编报规则第9号](https://www.csrc.gov.cn/csrc/c101864/c1024649/content.shtml)。每股收益的分母须考虑加权平均股数;港股采用 IFRS 时参见 [IAS 33](https://www.ifrs.org/issued-standards/list-of-standards/ias-33-earnings-per-share.html/)。
skills/lib/report_qc.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Possible obfuscationline 1061
r"^[//]\s*[⚠❓]<U+FE0F>?\s*[中弱](?:\s*[((]([^()()]{1,80})[))])?", rest) - Possible obfuscationline 1061
r"^[//]\s*[⚠❓]<U+FE0F>?\s*[中弱](?:\s*[((]([^()()]{1,80})[))])?", rest) - Possible obfuscationline 1061
r"^[//]\s*[⚠❓]<U+FE0F>?\s*[中弱](?:\s*[((]([^()()]{1,80})[))])?", rest) - Possible obfuscationline 1061
r"^[//]\s*[⚠❓]<U+FE0F>?\s*[中弱](?:\s*[((]([^()()]{1,80})[))])?", rest) - Access to secretsline 4005
[Credential-related source omitted] - Access to secretsline 4005
[Credential-related source omitted] - Access to secretsline 4005
[Credential-related source omitted] - Access to secretsline 4005
[Credential-related source omitted] - Access to secretsline 4010
[Credential-related source omitted] - Access to secretsline 4010
[Credential-related source omitted] - Access to secretsline 4010
[Credential-related source omitted] - Access to secretsline 4010
[Credential-related source omitted]
skills/lib/sector_sync.py
skills/lib/skill_paths.py
- Executable scriptline 1
Executable file
skills/lib/snapshot_core.py
- Executable scriptline 1
Executable file
skills/lib/stats.py
- Executable scriptline 1
Executable file
skills/lib/technical.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_b06_qc_record.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_backtest.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_backtest_futures_fixes.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_build_skillhub_packages.py
- Executable scriptline 1
Executable file - Access to secretsline 588
[Credential-related source omitted] - Access to secretsline 606
[Credential-related source omitted] - Access to secretsline 610
[Credential-related source omitted] - Access to secretsline 614
[Credential-related source omitted] - Access to secretsline 617
[Credential-related source omitted] - Access to secretsline 619
[Credential-related source omitted] - Network accessline 697
"budget": {"max_names": 1, "target_cov_pct": 8}, "selection": [{"code": "688008", "reason": "检验经营变化"}], "sources": [{"id": "S1", "url": "https://example.com/original.pdf", - Network accessline 698
"selection": [{"code": "688008", "reason": "检验经营变化"}], "sources": [{"id": "S1", "url": "https://example.com/original.pdf", "title": "离线原文", "source_type": "original", "sha256": sha, - Network accessline 699
"sources": [{"id": "S1", "url": "https://example.com/original.pdf", - Access to secretsline 937
[Credential-related source omitted]
skills/lib/tests/test_cache.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_codes.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_config_backtest.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_data_bridge.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_data_util.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_dates.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_db_util.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_decision_review.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_decision_schema.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_dev_log_wiring.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_dist_doc_refs.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_h6_events.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_hypothesis_registry.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_invest_path_shims.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_kline_cache.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_law_contract_v031.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_lib_version.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_lmw.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_logutil.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_market_pctile.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_market_pulse.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_market_service_owner.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_multiple_testing.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_qfq.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_qfq_contract.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_quote_tencent.py
- Executable scriptline 1
Executable file - Network accessline 65
@pytest.mark.parametrize("symbol,expected", [ ("600000", "http://qt.gtimg.cn/q=sh600000"), - Network accessline 66
("600000", "http://qt.gtimg.cn/q=sh600000"), - Network accessline 67
("512660", "http://qt.gtimg.cn/q=sh512660"), - Network accessline 68
("159915", "http://qt.gtimg.cn/q=sz159915"), - Network accessline 69
("600176.SH", "http://qt.gtimg.cn/q=sh600176"), # 收敛:剥离后缀(旧 valuation 直接拼后缀必失败) - Network accessline 191
assert q["price"] == 18.52 assert q["amount"] == pytest.approx(323831 * 1e4) assert sess.calls == [("http://qt.gtimg.cn/q=sh600000", 5.0)] - Network accessline 193
assert sess.calls == [("http://qt.gtimg.cn/q=sh600000", 5.0)]
skills/lib/tests/test_r1_sourcing_layer.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_r2_module_identity.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_report_qc.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_scenario_triggers.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_sector_sync.py
- Executable scriptline 1
Executable file - Dangerous shell operationline 178
rm = 0.0005 + 0.01 * math.sin(t / 7.0) - Dangerous shell operationline 181
csad_t = 0.02 - 0.005 * abs(rm) + gamma2 * rm * rm - Dangerous shell operationline 182
# 30 只成分股:20 只 = Rm + CSAD_t,10 只 = Rm − CSAD_t → mean|dev| = CSAD_t - Dangerous shell operationline 183
returns_by_day[d] = [rm + csad_t] * 20 + [rm - csad_t] * 10 - Dangerous shell operationline 198
rm = np.array([idx_ret_by_date[d] for d in dts]) - Dangerous shell operationline 201
A = np.vstack([np.ones_like(rm), np.abs(rm), rm ** 2]).T - Dangerous shell operationline 226
rm = 0.0005 + 0.01 * math.sin(t / 7.0) - Dangerous shell operationline 229
csad_t = (0.02 - 0.005 * abs(rm) - 0.5 * rm * rm - Dangerous shell operationline 231
returns_by_day[d] = [rm + csad_t] * 20 + [rm - csad_t] * 10 - Dangerous shell operationline 237
rm = np.array([idx_ret_by_date[d] for d in dts]) - Dangerous shell operationline 240
A = np.vstack([np.ones_like(rm), np.abs(rm), rm ** 2]).T - Dangerous shell operationline 268
rm = np.array([idx_ret_by_date[d] for d in keep]) - Dangerous shell operationline 271
A = np.vstack([np.ones_like(rm), np.abs(rm), rm ** 2]).T - Dangerous shell operationline 289
rm = -0.04 + 0.003 * math.sin(_) # 下行档(高波:噪声 0.003) - Dangerous shell operationline 291
stk.append(1.1 * rm + 0.001 * math.cos(_ * 2)) - Dangerous shell operationline 293
rm = 0.04 + 0.001 * math.sin(_ * 3) # 上行档(低波:噪声 0.001) - Dangerous shell operationline 295
stk.append(1.1 * rm + 0.001 * math.cos(_ * 5)) - Dangerous shell operationline 297
rm = 0.01 * math.sin(_ * 7) - Dangerous shell operationline 299
stk.append(1.1 * rm + 0.001 * math.cos(_ * 11)) - Network accessline 605
if name == "index_hist_sw": hist_symbols.append(str(kwargs.get("symbol"))) return fetch(name, *args, **kwargs) - Network accessline 607
return fetch(name, *args, **kwargs) - Network accessline 764
def _lagged(name, *a, **k): df = fetch(name, *a, **k) - Network accessline 765
df = fetch(name, *a, **k)
skills/lib/tests/test_shared_owner_migration.py
skills/lib/tests/test_skill_paths.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_snapshot_core.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_stats.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_technical_adx.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_trade_cal.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_unlock_source.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_v025_doc_checks.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_v026_doc_checks.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_v030_doc_checks.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_v031_evidence_tags.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_volume_price.py
- Executable scriptline 1
Executable file
skills/lib/tests/test_zt_rotation_bundle.py
- Executable scriptline 1
Executable file
skills/lib/trade_cal.py
- Executable scriptline 1
Executable file
skills/lib/tushare_client.py
- Executable scriptline 1
Executable file - Access to secretsline 5
[Credential-related source omitted] - Network accessline 36
TUSHARE_API_URL = "https://api.tushare.pro" - Network accessline 42
# 官方「积分与频次权限对应表」(https://tushare.pro/document/1?doc_id=290): - Network accessline 57
# 官方最低积分(以各接口文档为准;用于降级提示) # sw_daily: https://tushare.pro/document/2?doc_id=327 - Network accessline 58
# sw_daily: https://tushare.pro/document/2?doc_id=327 - Access to secretsline 93
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 157
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Network accessline 178
DAILY_CALL_LIMIT if daily_call_limit is None else daily_call_limit ) self._session = requests.Session() - Network accessline 179
) self._session = requests.Session() self._session.trust_env = False - Network accessline 180
self._session = requests.Session() - Access to secretsline 208
[Credential-related source omitted]
skills/lib/unlock_source.py
- Executable scriptline 1
Executable file
skills/lib/version.py
- Executable scriptline 1
Executable file
skills/lib/volume_price.py
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Combined signals: 1 fact
- Runs the official installer from astral.shwb_bundle/bootstrap.sh:35Low confidence
Declared and executed: 7 facts
- Contacts astral.sh, which SKILL.md, the README and the plugin manifest do not mentionwb_bundle/bootstrap.sh:28High confidence
- Contacts api.stlouisfed.org, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-discover-scan/scripts/lib/sources.py:309High confidence
- Contacts www.sse.com.cn, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-etf/scripts/lib/etf_data.py:238High confidence
- Contacts www.chinaamc.com, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-etf/scripts/lib/etf_data.py:265High confidence
- Contacts static.howbuy.com, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-etf/scripts/lib/etf_data.py:334High confidence
- Contacts oss-ch.csindex.com.cn, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-etf/scripts/lib/etf_data.py:811High confidence
- Contacts fundf10.eastmoney.com, which SKILL.md, the README and the plugin manifest do not mentioninvest-a-etf/scripts/lib/etf_data.py:2022High confidence
Signal confidence: 492 facts
- Executable script in code of a file that runsscripts/archive/backtest_calendar.py:1High confidence
- Executable script in code of a file that runsscripts/archive/backtest_calendar.py:1High confidence
- Access to secrets in prose of documentationwb_bundle/README-安装.md:57Low confidence
- Access to secrets in prose of documentationwb_bundle/README-安装.md:58Low confidence
- Executable script in code of a file that runswb_bundle/bootstrap.sh:1High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:26High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:27High confidence
- Dangerous shell operation in code of a file that runswb_bundle/bootstrap.sh:28High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:28High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:33High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:34High confidence
- Dangerous shell operation in code of a file that runswb_bundle/bootstrap.sh:35High confidence
- Network access in code of a file that runswb_bundle/bootstrap.sh:35High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuewb_bundle/bootstrap.sh:78Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuewb_bundle/bootstrap.sh:79Low confidence
- Access to secrets in code of a file that runswb_bundle/bootstrap.sh:82High confidence
- Broad permissions in the frontmatter of the SKILL.mdskills/invest-a-discover-scan/SKILL.md:1High confidence
- Broad permissions in the frontmatter of the SKILL.mdinvest-a-discover-scan/SKILL.md:1High confidence
- Executable script in code of a file that runsskills/invest-a-discover-scan/scripts/discover_fillback.py:1High confidence
- Executable script in code of a file that runsinvest-a-discover-scan/scripts/discover_fillback.py:1High confidence
- Executable script in code of a file that runsskills/invest-a-discover-scan/scripts/discover_scan.py:1High confidence
- Executable script in code of a file that runsinvest-a-discover-scan/scripts/discover_scan.py:1High confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/__init__.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/__init__.py:1Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/_invest_path.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/_invest_path.py:1Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/lenses.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/lenses.py:1Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/pool.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/pool.py:1Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/quality.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/quality.py:1Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/snapshot.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/snapshot.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueskills/invest-a-discover-scan/scripts/lib/snapshot.py:32Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueinvest-a-discover-scan/scripts/lib/snapshot.py:32Low confidence
- Executable script in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/sources.py:1Low confidence
- Executable script in prose of a file that runsinvest-a-discover-scan/scripts/lib/sources.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueskills/invest-a-discover-scan/scripts/lib/sources.py:57Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueinvest-a-discover-scan/scripts/lib/sources.py:57Low confidence
- Access to secrets in prose of a file that runsskills/invest-a-discover-scan/scripts/lib/sources.py:298Low confidence
- Access to secrets in prose of a file that runsinvest-a-discover-scan/scripts/lib/sources.py:298Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueskills/invest-a-discover-scan/scripts/lib/sources.py:306Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueinvest-a-discover-scan/scripts/lib/sources.py:306Low confidence
- Network access in code of a file that runsskills/invest-a-discover-scan/scripts/lib/sources.py:307High confidence
- Network access in code of a file that runsinvest-a-discover-scan/scripts/lib/sources.py:307High confidence
- Network access in code of a file that runsskills/invest-a-discover-scan/scripts/lib/sources.py:308High confidence
- Network access in code of a file that runsinvest-a-discover-scan/scripts/lib/sources.py:308High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueskills/invest-a-discover-scan/scripts/lib/sources.py:308Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueinvest-a-discover-scan/scripts/lib/sources.py:308Low confidence
and 442 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md scripts/wb_bundle/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Native | Manifest gemini-extension.json | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md scripts/wb_bundle/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md scripts/wb_bundle/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.