Distilly — Distill how they think into reusable Skills for any Agent or Bot. Formerly Colleague Skill(原同事 Skill).
This report summarizes scanner evidence for titanwings/colleague-skill, a Python project with 25,472 GitHub stars. SynthScan examined 23,215 lines of code across 104 source files, recording 242 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 15.6 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 142 finding(s).
Are imports declared and package/API names verified? 43 finding(s).
Are wrappers, guards, and repeated structures necessary? 152 finding(s).
Which changes need focused human review? 242 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 242 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/skill_presets.py | 196 | def normalize_research_profile(character: str | None, research_profile: str | None) -> str: | CODE |
| LOW | tools/skill_presets.py | 213 | def get_research_profile_preset(character: str | None, research_profile: str | None = None) -> dict: | CODE |
| LOW | tools/skill_presets.py | 266 | def resolve_existing_storage_root( | CODE |
| LOW | tools/install_generated_skill_common.py | 52 | def render_installed_markdown(skill_dir: Path, artifact_name: str, command_name: str) -> str: | CODE |
| LOW | tools/slack_auto_collector.py | 398 | def fetch_messages_from_channel( | CODE |
| LOW | tools/install_openclaw_generated_skill.py | 12 | def default_openclaw_skills_dir() -> Path: | CODE |
| LOW | tools/feishu_browser.py | 35 | def get_default_chrome_profile() -> str: | CODE |
| LOW⚡ | tools/install_claude_generated_skill.py | 17 | def default_claude_skills_dir() -> Path: | CODE |
| LOW⚡ | tools/install_claude_generated_skill.py | 22 | def default_claude_commands_dir() -> Path: | CODE |
| LOW⚡ | tools/install_claude_generated_skill.py | 27 | def should_install_command_shim(system_name: str | None = None) -> bool: | CODE |
| LOW | tools/skill_schema.py | 171 | def read_existing_artifact_names(skill_dir: Path) -> dict[str, str]: | CODE |
| LOW | tools/skill_schema.py | 337 | def enrich_existing_skill_meta( | CODE |
| LOW | tools/dingtalk_auto_collector.py | 487 | def get_default_chrome_profile() -> str: | CODE |
| LOW | tools/research/merge_research.py | 40 | def collect_structured_section_metrics(text: str) -> dict: | CODE |
| LOW | tools/research/merge_research.py | 77 | def collect_source_weight_distribution(text: str) -> Counter: | CODE |
| LOW | tools/research/merge_research.py | 106 | def count_potential_long_quote_lines(text: str) -> int: | CODE |
| LOW | tools/research/quality_check.py | 63 | def extract_summary_percentage(summary_text: str, label: str) -> int: | CODE |
| LOW | tools/research/transcribe_audio.py | 80 | def transcribe_with_faster_whisper(audio_path: Path, model_name: str, language: Optional[str]) -> str: | CODE |
| LOW | tools/research/transcribe_audio.py | 116 | def transcribe_with_openai_whisper(audio_path: Path, model_name: str, language: Optional[str]) -> str: | CODE |
| LOW | tools/research/transcribe_audio.py | 143 | def transcribe_with_openai_api(audio_path: Path, language: Optional[str]) -> str: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 48 | def _assert_readme_support_contract(self, content: str, source: str) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 72 | def _assert_readme_quick_start( | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 99 | def test_root_skill_uses_distilly_entrypoint(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 140 | def test_readme_quick_start_and_install_detail_contract(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 203 | def test_repo_examples_live_under_skills_colleague(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 209 | def test_multilingual_readmes_list_hosts_without_invocation_tutorials(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 237 | def test_non_chinese_docs_call_the_product_lark(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 251 | def test_non_chinese_surfaces_do_not_mix_chinese_copy(self) -> None: | CODE |
| LOW | tests/test_skill_entrypoint_docs.py | 300 | def test_code_uses_new_names_with_explicit_legacy_fallbacks(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 26 | def test_slugify_produces_portable_kebab_case(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 31 | def test_create_skill_rejects_unsafe_slug_before_writing(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 44 | def test_legacy_path_segments_are_windows_safe(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 52 | def test_create_colleague_uses_portable_names_and_adds_engine_schema(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 128 | def test_create_relationship_uses_character_preset_metadata(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 162 | def test_create_skill_renders_chinese_chrome_when_language_is_zh_cn(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 190 | def test_work_only_skill_replaces_persona_handoff(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 270 | def test_create_celebrity_adds_research_dirs_and_toolchain(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 313 | def test_create_celebrity_budget_unfriendly_embeds_profile_config(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 352 | def test_create_celebrity_accepts_string_profile_from_runtime_meta(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 375 | def test_existing_dot_skill_metadata_keeps_legacy_engine_identifiers(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 406 | def test_update_preserves_names_from_legacy_meta_without_artifacts(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 445 | def test_update_rejects_traversal_in_stored_version_before_backup(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 470 | def test_update_regenerates_manifest_and_archives_artifacts(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 500 | def test_update_accepts_multiple_persona_corrections_in_one_payload(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 542 | def test_update_replaces_existing_markdown_sections_instead_of_appending_duplicates(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 616 | def test_backup_and_rollback_include_manifest(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 638 | def test_version_manager_can_still_resolve_legacy_colleagues_root(self) -> None: | CODE |
| LOW | tests/test_skill_writer.py | 659 | def test_character_prompt_bundles_exist(self) -> None: | CODE |
| LOW | tests/test_config_migration.py | 29 | def test_collectors_read_legacy_config_and_save_new_config_privately(self) -> None: | CODE |
| LOW | tests/test_install_generated_skill.py | 43 | def test_default_skills_dirs_cover_all_documented_hosts(self) -> None: | CODE |
| LOW | tests/test_install_generated_skill.py | 68 | def test_install_rewrites_only_the_legacy_copy_to_canonical_name(self) -> None: | CODE |
| LOW | tests/test_install_generated_skill.py | 96 | def test_install_rejects_ancestor_or_descendant_destinations(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 58 | def test_build_query_accepts_username_with_at_prefix(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 61 | def test_build_query_rejects_invalid_username(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 65 | def test_validate_limit_rejects_unbounded_collection(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 71 | def test_normalize_post_canonicalizes_url_and_metrics(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 79 | def test_normalize_post_truncates_long_form_text(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 88 | def test_normalize_post_accepts_current_normalized_contract(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 100 | def test_normalize_post_removes_terminal_control_characters(self) -> None: | CODE |
| LOW⚡ | tests/test_xquik_public_posts.py | 108 | def test_normalize_post_rejects_non_x_source_url(self) -> None: | CODE |
| 35 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/feishu_auto_collector.py | 64 | # ─── 配置 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 129 | # ─── Token ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 200 | # ─── 用户搜索 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 368 | # ─── 消息记录 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 666 | # ─── 文档采集 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 777 | # ─── 多维表格 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_auto_collector.py | 832 | # ─── 主流程 ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_mcp_client.py | 49 | # ─── 配置管理 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_mcp_client.py | 94 | # ─── MCP 调用封装 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_mcp_client.py | 153 | # ─── 功能函数 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/feishu_mcp_client.py | 257 | # ─── CLI ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 43 | # ─── 依赖检查 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 55 | # ─── 常量 ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 73 | # ─── 错误类型 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 87 | # ─── 配置管理 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 159 | # ─── Slack Client 封装(带速率限制重试)───────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 239 | # ─── 用户搜索 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 331 | # ─── 频道发现 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 396 | # ─── 消息采集 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 493 | # ─── 主采集流程 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/slack_auto_collector.py | 652 | # ─── CLI 入口 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 50 | # ─── 配置 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 94 | # ─── Token ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 144 | # ─── 用户搜索 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 217 | # ─── 文档采集 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 369 | # ─── 多维表格 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 485 | # ─── 消息记录(浏览器方案)──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/dingtalk_auto_collector.py | 673 | # ─── 主流程 ─────────────────────────────────────────────────────────────────── | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/feishu_browser.py | 148 | if (cells.length === 0) return null; | CODE |
| HIGH | tools/feishu_browser.py | 164 | row.push(grid[r] && grid[r][c] ? grid[r][c] : ''); | CODE |
| HIGH | tools/feishu_browser.py | 166 | rows.push(row); | CODE |
| HIGH | tools/feishu_browser.py | 264 | results.push({{ sender, content, time }}); | CODE |
| HIGH | tools/feishu_browser.py | 320 | print("错误:请先安装 Playwright:pip install playwright && playwright install chromium", file=sys.stderr) | STRING |
| HIGH | tools/dingtalk_auto_collector.py | 91 | print(" pip3 install playwright && playwright install chromium") | CODE |
| HIGH | tools/dingtalk_auto_collector.py | 512 | "请运行:pip3 install playwright && playwright install chromium\n" | CODE |
| HIGH | tools/dingtalk_auto_collector.py | 630 | results.push({{ sender, content, time }}); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/install_codex_skill.py | 4 | CODE | |
| LOW | tools/feishu_auto_collector.py | 42 | CODE | |
| LOW | tools/install_generated_skill.py | 4 | CODE | |
| LOW | tools/version_manager.py | 9 | CODE | |
| LOW | tools/skill_presets.py | 9 | CODE | |
| LOW | tools/install_codex_generated_skill.py | 4 | CODE | |
| LOW | tools/install_generated_skill_common.py | 4 | CODE | |
| LOW | tools/feishu_mcp_client.py | 34 | CODE | |
| LOW | tools/feishu_mcp_client.py | 42 | CODE | |
| LOW | tools/install_hermes_skill.py | 4 | CODE | |
| LOW | tools/slack_auto_collector.py | 33 | CODE | |
| LOW | tools/feishu_parser.py | 19 | CODE | |
| LOW | tools/install_openclaw_generated_skill.py | 4 | CODE | |
| LOW | tools/feishu_browser.py | 24 | CODE | |
| LOW | tools/feishu_browser.py | 28 | CODE | |
| LOW | tools/install_claude_generated_skill.py | 4 | CODE | |
| LOW | tools/skill_schema.py | 6 | CODE | |
| LOW | tools/dingtalk_auto_collector.py | 27 | CODE | |
| LOW | tools/dingtalk_auto_collector.py | 515 | CODE | |
| LOW | tools/install_openclaw_skill.py | 4 | CODE | |
| LOW | tools/skill_writer.py | 9 | CODE | |
| LOW | tools/research/merge_research.py | 13 | CODE | |
| LOW | tools/research/quality_check.py | 4 | CODE | |
| LOW | tools/research/xquik_public_posts.py | 4 | CODE | |
| LOW | tools/research/srt_to_transcript.py | 4 | CODE | |
| LOW | tools/research/transcribe_audio.py | 30 | CODE | |
| LOW | tests/test_skill_writer.py | 1 | CODE | |
| LOW | tests/test_config_migration.py | 1 | CODE | |
| LOW | tests/test_install_generated_skill.py | 1 | CODE | |
| LOW | tests/test_xquik_public_posts.py | 1 | CODE | |
| LOW | tests/test_install_claude_generated_skill.py | 1 | CODE | |
| LOW | tests/test_cli_lifecycle.py | 1 | CODE | |
| LOW | tests/test_research_tools.py | 1 | CODE | |
| LOW | tests/test_install_openclaw_and_codex.py | 1 | CODE | |
| LOW | tests/test_install_hermes_skill.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SKILL.md | 843 | ### Step 0: Confirm the character family | COMMENT |
| LOW | SKILL.md | 860 | ### Step 1: Basic Info Collection | COMMENT |
| LOW | SKILL.md | 881 | ### Step 2: Source Material Import | COMMENT |
| LOW | SKILL.md | 1139 | ### Step 3: Analyze Source Material | COMMENT |
| LOW | SKILL.md | 1324 | ### Step 4: Generate and Preview | COMMENT |
| LOW | SKILL.md | 1352 | ### Step 5: Write Files | COMMENT |
| LOW⚡ | tools/feishu_auto_collector.py | 847 | # Step 1: 搜索用户 | COMMENT |
| LOW⚡ | tools/feishu_auto_collector.py | 853 | # Step 2: 采集消息记录 | COMMENT |
| LOW⚡ | tools/feishu_auto_collector.py | 864 | # Step 3: 采集文档 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 602 | # Step 1: 搜索用户 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 612 | # Step 2: 找共同频道 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 617 | # Step 3: 采集消息 | COMMENT |
| LOW⚡ | tools/dingtalk_auto_collector.py | 690 | # Step 1: 搜索用户 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 698 | # Step 2: 文档 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 709 | # Step 3: 多维表格 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 720 | # Step 4: 消息记录(浏览器方案) | STRING |
| LOW⚡ | prompts/celebrity/persona_builder.md | 158 | ### Step 1: Classify the Question | COMMENT |
| LOW⚡ | prompts/celebrity/persona_builder.md | 164 | ### Step 2: Research Dimensions | COMMENT |
| LOW⚡ | prompts/celebrity/persona_builder.md | 173 | ### Step 3: Apply Framework | COMMENT |
| LOW⚡ | prompts/celebrity/persona_builder.md | 178 | ### Step 4: Calibrate Confidence | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tools/feishu_auto_collector.py | 861 | except Exception as e: | CODE |
| LOW⚡ | tools/feishu_auto_collector.py | 872 | except Exception as e: | CODE |
| LOW | tools/feishu_auto_collector.py | 466 | except Exception: | CODE |
| LOW | tools/feishu_auto_collector.py | 477 | except Exception: | CODE |
| LOW | tools/feishu_auto_collector.py | 540 | except Exception: | CODE |
| LOW | tools/feishu_auto_collector.py | 551 | except Exception: | CODE |
| LOW | tools/email_parser.py | 63 | except Exception: | CODE |
| LOW | tools/email_parser.py | 88 | except Exception: | CODE |
| LOW | tools/email_parser.py | 97 | except Exception: | CODE |
| LOW | tools/email_parser.py | 108 | except Exception: | CODE |
| LOW | tools/feishu_mcp_client.py | 207 | except Exception: | CODE |
| LOW | tools/slack_auto_collector.py | 628 | except Exception as e: | CODE |
| LOW | tools/feishu_browser.py | 64 | except Exception as e: | CODE |
| LOW | tools/feishu_browser.py | 105 | except Exception: | CODE |
| LOW | tools/feishu_browser.py | 123 | except Exception: | CODE |
| LOW | tools/feishu_browser.py | 137 | except Exception: | CODE |
| LOW | tools/feishu_browser.py | 206 | except Exception as e: | STRING |
| LOW | tools/dingtalk_auto_collector.py | 318 | except Exception: | CODE |
| LOW | tools/dingtalk_auto_collector.py | 531 | except Exception as e: | CODE |
| LOW | tools/dingtalk_auto_collector.py | 581 | except Exception as e: | CODE |
| LOW⚡ | tools/dingtalk_auto_collector.py | 706 | except Exception as e: | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 717 | except Exception as e: | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 730 | except Exception as e: | STRING |
| LOW | tools/skill_writer.py | 461 | except Exception: | CODE |
| LOW | tools/research/transcribe_audio.py | 211 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/feishu_auto_collector.py | 477 | except Exception: | CODE |
| HIGH | tools/feishu_auto_collector.py | 551 | except Exception: | CODE |
| HIGH | tools/dingtalk_auto_collector.py | 318 | except Exception: | CODE |
| HIGH | tools/research/xquik_public_posts.py | 354 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tools/feishu_auto_collector.py | 847 | # Step 1: 搜索用户 | COMMENT |
| LOW⚡ | tools/feishu_auto_collector.py | 853 | # Step 2: 采集消息记录 | COMMENT |
| LOW⚡ | tools/feishu_auto_collector.py | 864 | # Step 3: 采集文档 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 602 | # Step 1: 搜索用户 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 612 | # Step 2: 找共同频道 | COMMENT |
| LOW⚡ | tools/slack_auto_collector.py | 617 | # Step 3: 采集消息 | COMMENT |
| LOW⚡ | tools/dingtalk_auto_collector.py | 690 | # Step 1: 搜索用户 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 698 | # Step 2: 文档 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 709 | # Step 3: 多维表格 | STRING |
| LOW⚡ | tools/dingtalk_auto_collector.py | 720 | # Step 4: 消息记录(浏览器方案) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/feishu_auto_collector.py | 240 | CODE | |
| LOW | tools/feishu_auto_collector.py | 418 | CODE | |
| LOW | tools/feishu_auto_collector.py | 489 | CODE | |
| LOW | tools/feishu_auto_collector.py | 569 | CODE | |
| LOW | tools/feishu_auto_collector.py | 779 | CODE | |
| LOW | tools/email_parser.py | 70 | CODE | |
| LOW | tools/feishu_mcp_client.py | 155 | CODE | |
| LOW | tools/feishu_mcp_client.py | 259 | CODE | |
| LOW | tools/feishu_browser.py | 71 | CODE | |
| LOW | tools/feishu_browser.py | 85 | CODE | |
| LOW | tools/dingtalk_auto_collector.py | 225 | CODE | |
| LOW | tools/dingtalk_auto_collector.py | 394 | CODE | |
| LOW | tools/dingtalk_auto_collector.py | 499 | CODE | |
| LOW | tools/research/merge_research.py | 40 | CODE | |
| LOW | tests/test_skill_writer.py | 659 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_research_tools.py | 107 | ## agentic protocol | COMMENT |
| MEDIUM | tests/test_research_tools.py | 225 | ## agentic protocol | COMMENT |