AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary
1613 matches across 14 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_env_v3.py | 17 | def test_x_source_prefers_xai_without_bird_probe(self): |
| LOW | tests/test_env_v3.py | 22 | def test_x_source_uses_bird_with_explicit_cookies(self): |
| LOW | tests/test_env_v3.py | 29 | def test_bird_auth_never_checks_browser_cookies(self): |
| LOW | tests/test_env_v3.py | 41 | def test_file_permission_check_skips_windows_posix_mode_bits(self): |
| LOW | tests/test_env_v3.py | 55 | def test_threads_available_with_sc_key_only(self): |
| LOW | tests/test_env_v3.py | 58 | def test_threads_unavailable_without_sc_key(self): |
| LOW | tests/test_env_v3.py | 62 | def test_threads_does_not_require_include_sources(self): |
| LOW | tests/test_env_include_sources_default.py | 4 | def test_include_sources_defaults_to_empty_string(monkeypatch, tmp_path): |
| LOW | tests/test_dedupe_v3.py | 28 | def test_collapses_whitespace(self): |
| LOW | tests/test_dedupe_v3.py | 45 | def test_short_text_returns_whole(self): |
| LOW | tests/test_dedupe_v3.py | 49 | def test_empty_returns_empty_set(self): |
| LOW | tests/test_dedupe_v3.py | 52 | def test_normalizes_before_ngrams(self): |
| LOW | tests/test_dedupe_v3.py | 90 | def test_completely_different(self): |
| LOW | tests/test_dedupe_v3.py | 98 | def test_filters_single_char_tokens(self): |
| LOW | tests/test_dedupe_v3.py | 114 | def test_completely_different(self): |
| LOW | tests/test_dedupe_v3.py | 118 | def test_takes_max_of_both_methods(self): |
| LOW | tests/test_dedupe_v3.py | 150 | def test_includes_author_and_container(self): |
| LOW | tests/test_dedupe_v3.py | 174 | def test_removes_near_duplicates(self): |
| LOW | tests/test_dedupe_v3.py | 183 | def test_keeps_first_of_duplicates(self): |
| LOW | tests/test_dedupe_v3.py | 191 | def test_empty_body_items_kept(self): |
| LOW | tests/test_instagram.py | 46 | def test_default_depth_returns_two_plus_queries(self): |
| LOW | tests/test_instagram.py | 57 | def test_quick_depth_returns_one_query(self): |
| LOW | tests/test_planner_quiet_mode.py | 33 | def test_internal_subrun_suppresses_warning(self): |
| LOW | tests/test_planner_quiet_mode.py | 40 | def test_internal_subrun_still_allows_other_warnings(self): |
| LOW | tests/test_resolve.py | 11 | def test_no_keys_returns_false(self): |
| LOW | tests/test_resolve.py | 14 | def test_brave_key_returns_true(self): |
| LOW | tests/test_resolve.py | 17 | def test_exa_key_returns_true(self): |
| LOW | tests/test_resolve.py | 20 | def test_serper_key_returns_true(self): |
| LOW | tests/test_resolve.py | 25 | def test_extracts_from_title_and_snippet(self): |
| LOW | tests/test_resolve.py | 40 | def test_deduplicates_case_insensitive(self): |
| LOW | tests/test_resolve.py | 47 | def test_empty_items_returns_empty(self): |
| LOW | tests/test_resolve.py | 50 | def test_no_subreddits_in_text(self): |
| LOW | tests/test_resolve.py | 70 | def test_filters_generic_handles(self): |
| LOW | tests/test_resolve.py | 77 | def test_empty_items_returns_empty(self): |
| LOW | tests/test_resolve.py | 82 | def test_builds_from_snippets(self): |
| LOW | tests/test_resolve.py | 100 | def test_empty_items_returns_empty(self): |
| LOW | tests/test_resolve.py | 103 | def test_items_with_empty_snippets(self): |
| LOW | tests/test_resolve.py | 109 | def test_rewrites_integration_repo_to_canonical_product(self): |
| LOW | tests/test_resolve.py | 114 | def test_preserves_action_repo_when_topic_intends_action(self): |
| LOW | tests/test_resolve.py | 120 | def test_dedupes_case_insensitive_after_canonicalization(self): |
| LOW | tests/test_resolve.py | 127 | def test_no_backend_returns_empty(self): |
| LOW | tests/test_resolve.py | 227 | def test_peer_already_in_websearch_not_duplicated(self): |
| LOW | tests/test_resolve.py | 237 | def test_dedupe_is_case_insensitive(self): |
| LOW | tests/test_resolve.py | 245 | def test_no_log_when_all_peers_already_present(self): |
| LOW | tests/test_resolve.py | 263 | def test_topic_with_no_category_returns_unchanged(self): |
| LOW | tests/test_resolve.py | 271 | def test_empty_subreddit_list_with_category_still_adds_peers(self): |
| LOW | tests/test_resolve.py | 276 | def test_empty_topic_returns_unchanged(self): |
| LOW | tests/test_resolve.py | 281 | def test_none_topic_returns_unchanged(self): |
| LOW | tests/test_resolve.py | 286 | def test_no_log_when_topic_has_no_category(self): |
| LOW | tests/test_resolve.py | 294 | def test_cap_is_enforced_at_max_subs(self): |
| LOW | tests/test_resolve.py | 161 | def test_search_failure_graceful(self, mock_search): |
| LOW | tests/test_resolve.py | 192 | def test_image_gen_topic_appends_peers(self): |
| LOW | tests/test_resolve.py | 205 | def test_preserves_websearch_order_then_appends_peers(self): |
| LOW | tests/test_resolve.py | 214 | def test_emits_stderr_log_when_peers_added(self): |
| LOW | tests/test_resolve.py | 306 | def test_cap_preserves_highest_priority_peer_when_trimming(self): |
| LOW | tests/test_resolve.py | 318 | def test_classification_error_returns_unwidened_list_and_logs(self): |
| LOW | tests/test_resolve.py | 341 | def test_auto_resolve_returns_category_key(self, mock_search): |
| LOW | tests/test_resolve.py | 358 | def test_no_backend_returns_category_none(self): |
| LOW | tests/test_plugin_contract.py | 24 | def test_codex_plugin_scaffold_stays_removed(self) -> None: |
| LOW | tests/test_plugin_contract.py | 30 | def test_versions_match_across_manifests(self) -> None: |
| 1129 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_dedupe_v3.py | 34 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 36 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 57 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 59 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 80 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 82 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 104 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 106 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 158 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 160 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 15 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 17 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 130 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_dedupe_v3.py | 132 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 33 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 35 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 57 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 59 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 119 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 121 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 137 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 139 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 190 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 192 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 205 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 207 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 230 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 232 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 245 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 247 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 269 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 271 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 284 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 286 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 317 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 319 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 344 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 346 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 368 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 370 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 76 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 78 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 156 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 158 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 173 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_internals_v3.py | 175 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 141 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 143 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 158 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 160 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 195 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 197 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 209 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 211 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 228 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 230 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 240 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 242 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 261 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_chrome_cookies.py | 263 | # --------------------------------------------------------------------------- |
| 62 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_planner_quiet_mode.py | 3 | |
| LOW | tests/test_safari_cookies.py | 3 | |
| LOW | tests/test_save_raw_per_entity.py | 7 | |
| LOW | tests/test_cookie_extract.py | 3 | |
| LOW | tests/test_cookie_extract.py | 6 | |
| LOW | tests/test_cookie_extract.py | 6 | |
| LOW | tests/test_cookie_extract.py | 6 | |
| LOW | tests/test_cookie_extract.py | 6 | |
| LOW | tests/test_cookie_extract.py | 11 | |
| LOW | tests/test_cookie_extract.py | 11 | |
| LOW | tests/test_chrome_cookies.py | 3 | |
| LOW | tests/test_chrome_cookies.py | 6 | |
| LOW | tests/test_chrome_cookies.py | 10 | |
| LOW | tests/test_chrome_cookies.py | 12 | |
| LOW | tests/test_chrome_cookies.py | 12 | |
| LOW | tests/test_chrome_cookies.py | 12 | |
| LOW | tests/test_chrome_cookies.py | 12 | |
| LOW | tests/test_footer_nudge_suppression.py | 3 | |
| LOW | tests/test_rerank_fun.py | 3 | |
| LOW | tests/test_competitors_plan_threading.py | 3 | |
| LOW | tests/test_competitors_plan_threading.py | 11 | |
| LOW | tests/test_github.py | 3 | |
| LOW | tests/test_truthsocial.py | 3 | |
| LOW | tests/test_relevance.py | 8 | |
| LOW | tests/test_relevance.py | 8 | |
| LOW | tests/test_polymarket_disambiguation.py | 3 | |
| LOW | tests/test_subproc.py | 8 | |
| LOW | tests/test_competitors_resolve_integration.py | 3 | |
| LOW | tests/test_setup_openclaw.py | 6 | |
| LOW | tests/test_setup_openclaw.py | 8 | |
| LOW | tests/test_quality_nudge.py | 8 | |
| LOW | tests/test_env_cookies.py | 6 | |
| LOW | tests/test_env_cookies.py | 8 | |
| LOW | tests/test_instagram_sc.py | 5 | |
| LOW | tests/test_categories.py | 12 | |
| LOW | tests/test_polymarket.py | 3 | |
| LOW | tests/test_polymarket.py | 4 | |
| LOW | tests/test_setup_wizard.py | 7 | |
| LOW | tests/test_competitors.py | 3 | |
| LOW | tests/test_env_keychain.py | 11 | |
| LOW | tests/test_digg.py | 3 | |
| LOW | tests/test_digg.py | 9 | |
| LOW | tests/test_vs_mode_fanout.py | 8 | |
| LOW | tests/test_vs_mode_fanout.py | 10 | |
| LOW | tests/test_vs_mode_fanout.py | 12 | |
| LOW | tests/test_hackernews.py | 3 | |
| LOW | tests/test_hackernews.py | 5 | |
| LOW | tests/test_cli_competitors.py | 3 | |
| LOW | tests/test_render_comparison_multi.py | 3 | |
| LOW | tests/test_html_render.py | 3 | |
| LOW | tests/test_competitor_subrun_isolation.py | 9 | |
| LOW | tests/test_competitor_subrun_isolation.py | 11 | |
| LOW | tests/test_competitor_subrun_isolation.py | 13 | |
| LOW | tests/test_reddit_public.py | 7 | |
| LOW | tests/test_bluesky.py | 5 | |
| LOW | tests/test_watchlist_commands.py | 4 | |
| LOW | tests/test_watchlist_commands.py | 14 | |
| LOW | tests/test_competitor_fanout.py | 3 | |
| LOW | tests/test_competitor_fanout.py | 6 | |
| LOW | tests/test_competitor_fanout.py | 10 | |
| 56 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_competitors_resolve_integration.py | 292 | except Exception as exc: |
| LOW | tests/e2e_comparison.py | 110 | except Exception as exc: |
| LOW | tests/test_competitor_subrun_isolation.py | 85 | except Exception: |
| LOW | hooks/scripts/check-config.sh | 97 | except Exception: |
| LOW | skills/last30days/scripts/evaluate_search_quality.py | 540 | except Exception as exc: |
| LOW | skills/last30days/scripts/last30days.py | 233 | except Exception as exc: |
| LOW | skills/last30days/scripts/last30days.py | 552 | except Exception: |
| MEDIUM | skills/last30days/scripts/last30days.py | 697 | print("Error: --deep-research requires OPENROUTER_API_KEY", file=sys.stderr) |
| LOW | skills/last30days/scripts/last30days.py | 839 | except Exception as exc: |
| LOW | skills/last30days/scripts/last30days.py | 905 | except Exception as exc: |
| LOW | skills/last30days/scripts/last30days.py | 963 | except Exception: |
| LOW | skills/last30days/scripts/watchlist.py | 36 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/xurl_x.py | 94 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/truthsocial.py | 114 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/hackernews.py | 120 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/hackernews.py | 259 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/reddit_keyless.py | 42 | except Exception as e: # never let the demoted tier sink the run |
| LOW | skills/last30days/scripts/lib/reddit_keyless.py | 128 | except Exception: |
| LOW | skills/last30days/scripts/lib/reddit_keyless.py | 153 | except Exception: |
| LOW | skills/last30days/scripts/lib/reddit_keyless.py | 160 | except Exception: |
| LOW | skills/last30days/scripts/lib/resolve.py | 43 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/resolve.py | 323 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/env.py | 436 | except Exception: |
| LOW | skills/last30days/scripts/lib/env.py | 668 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/polymarket.py | 326 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/polymarket.py | 358 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/subproc.py | 77 | except Exception: |
| LOW | skills/last30days/scripts/lib/bird_x.py | 192 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/bird_x.py | 199 | except Exception: |
| LOW | skills/last30days/scripts/lib/perplexity.py | 86 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/pinterest.py | 146 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 445 | except Exception: |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 462 | except Exception: |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 53 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 81 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 529 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/threads.py | 162 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/reddit_rss.py | 178 | except Exception as e: # defensive: a single bad feed must not sink the run |
| LOW | skills/last30days/scripts/lib/pipeline.py | 298 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 318 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 376 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 400 | except Exception as retry_exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 687 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 714 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 840 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 884 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 904 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/pipeline.py | 939 | except Exception: |
| LOW | skills/last30days/scripts/lib/instagram.py | 290 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/instagram.py | 348 | except Exception as retry_e: |
| LOW | skills/last30days/scripts/lib/instagram.py | 354 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/instagram.py | 458 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/quality_nudge.py | 39 | except Exception: |
| LOW | skills/last30days/scripts/lib/quality_nudge.py | 174 | except Exception: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 220 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 254 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 298 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 397 | except Exception as e: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 543 | except Exception as exc: |
| LOW | skills/last30days/scripts/lib/tiktok.py | 585 | except Exception as exc: |
| 30 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_pipeline_v3.py | 90 | |
| LOW | skills/last30days/scripts/last30days.py | 556 | |
| LOW | skills/last30days/scripts/lib/truthsocial.py | 57 | |
| LOW | skills/last30days/scripts/lib/planner.py | 313 | |
| LOW | skills/last30days/scripts/lib/planner.py | 517 | |
| LOW | skills/last30days/scripts/lib/planner.py | 707 | |
| LOW | skills/last30days/scripts/lib/reddit_keyless.py | 133 | |
| LOW | skills/last30days/scripts/lib/resolve.py | 142 | |
| LOW | skills/last30days/scripts/lib/env.py | 91 | |
| LOW | skills/last30days/scripts/lib/env.py | 403 | |
| LOW | skills/last30days/scripts/lib/render.py | 788 | |
| LOW | skills/last30days/scripts/lib/render.py | 1397 | |
| LOW | skills/last30days/scripts/lib/render.py | 1747 | |
| LOW | skills/last30days/scripts/lib/polymarket.py | 331 | |
| LOW | skills/last30days/scripts/lib/polymarket.py | 557 | |
| LOW | skills/last30days/scripts/lib/bird_x.py | 417 | |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 30 | |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 101 | |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 151 | |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 492 | |
| LOW | skills/last30days/scripts/lib/digg.py | 68 | |
| LOW | skills/last30days/scripts/lib/providers.py | 263 | |
| LOW | skills/last30days/scripts/lib/providers.py | 385 | |
| LOW | skills/last30days/scripts/lib/pipeline.py | 141 | |
| LOW | skills/last30days/scripts/lib/pipeline.py | 175 | |
| LOW | skills/last30days/scripts/lib/pipeline.py | 595 | |
| LOW | skills/last30days/scripts/lib/pipeline.py | 743 | |
| LOW | skills/last30days/scripts/lib/http.py | 47 | |
| LOW | skills/last30days/scripts/lib/fusion.py | 110 | |
| LOW | skills/last30days/scripts/lib/instagram.py | 109 | |
| LOW | skills/last30days/scripts/lib/instagram.py | 384 | |
| LOW | skills/last30days/scripts/lib/instagram.py | 466 | |
| LOW | skills/last30days/scripts/lib/tiktok.py | 60 | |
| LOW | skills/last30days/scripts/lib/tiktok.py | 333 | |
| LOW | skills/last30days/scripts/lib/tiktok.py | 405 | |
| LOW | skills/last30days/scripts/lib/github.py | 521 | |
| LOW | skills/last30days/scripts/lib/github.py | 778 | |
| LOW | skills/last30days/scripts/lib/github.py | 896 | |
| LOW | skills/last30days/scripts/lib/github.py | 922 | |
| LOW | skills/last30days/scripts/lib/reddit_public.py | 59 | |
| LOW | skills/last30days/scripts/lib/grounding.py | 194 | |
| LOW | skills/last30days/scripts/lib/reddit.py | 441 | |
| LOW | skills/last30days/scripts/lib/reddit.py | 572 | |
| LOW | skills/last30days/scripts/lib/xquik.py | 65 | |
| LOW | skills/last30days/scripts/lib/cookie_extract.py | 70 | |
| LOW | skills/last30days/scripts/lib/xai_x.py | 128 | |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 212 | |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 593 | |
| LOW | skills/last30days/scripts/lib/relevance.py | 95 | |
| LOW | skills/last30days/scripts/lib/chrome_cookies.py | 176 | |
| LOW | skills/last30days/scripts/lib/reddit_enrich.py | 71 | |
| LOW | skills/last30days/scripts/lib/reddit_enrich.py | 147 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | skills/last30days/scripts/test_device_auth.py | 40 | # Step 1: Start device flow |
| LOW | skills/last30days/scripts/test_device_auth.py | 67 | # Step 2: Poll for token |
| LOW | skills/last30days/scripts/test_device_auth.py | 106 | # Step 3: Fetch profile |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 428 | # Step 1: Start device flow |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 437 | # Step 2: Copy code to clipboard BEFORE opening browser |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 448 | # Step 3: Show code prominently, then open browser |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 467 | # Step 4: Poll for token (with periodic code reminders) |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 475 | # Step 4: Fetch API key |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 504 | # Step 1: Try PAT via gh CLI |
| LOW | skills/last30days/scripts/lib/setup_wizard.py | 532 | # Step 2: Fall back to device flow |
| LOW | skills/last30days/scripts/lib/instagram.py | 495 | # Step 0: Creator reels (high-signal, runs first) |
| LOW | skills/last30days/scripts/lib/instagram.py | 506 | # Step 1: Multi-query keyword search — run ScrapeCreators for each expanded query |
| LOW | skills/last30days/scripts/lib/instagram.py | 524 | # Step 2: Fetch captions for top N |
| LOW | skills/last30days/scripts/lib/instagram.py | 527 | # Step 3: Attach captions to items |
| LOW | skills/last30days/scripts/lib/tiktok.py | 458 | # Step 1: Multi-query keyword search — run ScrapeCreators for each expanded query |
| LOW | skills/last30days/scripts/lib/tiktok.py | 476 | # Step 2: Fetch captions for top N |
| LOW | skills/last30days/scripts/lib/tiktok.py | 479 | # Step 3: Attach captions to items |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 414 | # Step 1: Fetch the watch page HTML |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 423 | # Step 2: Extract captions URL from ytInitialPlayerResponse |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 476 | # Step 3: Fetch the VTT subtitle file |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 665 | # Step 1: Multi-query search — run yt-dlp for each expanded query |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 683 | # Step 2: Fetch transcripts for top videos by views. |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 700 | # Step 3: Attach transcripts and extract highlights. Mark captions_disabled |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 889 | # Step 1: Search |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 947 | # Step 2: Fetch transcripts for top videos |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | skills/last30days/scripts/lib/subproc.py | 37 | Run a subprocess with process-group cleanup on timeout. Spawns ``cmd`` inside its own process group via ``os.setsid |
| HIGH | skills/last30days/scripts/lib/http.py | 58 | Make an HTTP request and return JSON response. Args: method: HTTP method (GET, POST, etc.) url: Req |
| HIGH | skills/last30days/scripts/lib/http.py | 240 | Fetch a URL and return decoded text, or None on any failure. Keyless helper for Reddit RSS and shreddit HTML endpoi |
| HIGH | skills/last30days/scripts/lib/reddit_enrich.py | 41 | Fetch Reddit thread JSON data. Args: url: Reddit thread URL mock_data: Mock data for testing |
| HIGH | skills/last30days/scripts/lib/reddit_enrich.py | 203 | Enrich a Reddit item with real engagement data. Args: item: Reddit item dict mock_thread_data: Mock |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_polymarket.py | 101 | # Single word, should just return that word |
| MEDIUM | skills/last30days/scripts/lib/bird_x.py | 141 | """Get comprehensive Bird search status. |
| MEDIUM | skills/last30days/scripts/lib/github.py | 775 | # Project-mode search: fetch comprehensive data for specific repos |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | skills/last30days/scripts/lib/env.py | 79 | # Check if group or other can read (bits 0o044) |
| LOW | skills/last30days/scripts/lib/ui.py | 11 | # Check if we're in a real terminal (not captured by Claude Code) |
| LOW | skills/last30days/scripts/lib/bird_x.py | 305 | # Check if we got results |
| LOW | skills/last30days/scripts/lib/pipeline.py | 662 | # Check if X is rate-limited |
| LOW | skills/last30days/scripts/lib/quality_nudge.py | 170 | # Check if configured but errored (yt-dlp installed but failed this run) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | skills/last30days/scripts/lib/pipeline.py | 790 | # Create a retry subquery with the simplified core subject |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_youtube_yt.py | 93 | "Don't forget to subscribe and hit the bell. " |
| LOW | skills/last30days/scripts/lib/youtube_yt.py | 62 | r"^(hey |hi |what's up|welcome back|in today's video|don't forget to)", |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | skills/last30days/scripts/setup-keychain.sh | 8 | # Usage: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_planner_quiet_mode.py | 17 | topic="Acme Corp", |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | skills/last30days/scripts/setup-keychain.sh | 1 | #!/bin/bash |