SimplyLiz/CodeMCP

GitHub: SimplyLiz/CodeMCP

CKB 将代码库转化为可查询的知识库,为 AI 助手、CLI 和 HTTP API 提供符号导航、影响分析和架构映射等代码智能服务。

Stars: 90 | Forks: 10

# CKB — Code Knowledge Backend **了解您的代码。安全地进行更改。充满信心地交付。** [![npm version](https://img.shields.io/npm/v/@tastehub/ckb.svg)](https://www.npmjs.com/package/@tastehub/ckb) [![网站](https://img.shields.io/badge/website-codeknowledge.dev-teal.svg)](https://codeknowledge.dev) [![文档](https://img.shields.io/badge/docs-codeknowledge.dev-blue.svg)](https://codeknowledge.dev/docs) [![LIP](https://img.shields.io/crates/v/lip-cli.svg?label=LIP&color=orange)](https://crates.io/crates/lip-cli) [![LIP 文档](https://img.shields.io/badge/LIP-docs-blue.svg)](https://lip-sigma.vercel.app/docs) CKB 将您的代码库转化为可查询的知识库。提出问题、了解影响、寻找负责人、检测死代码——这一切都可以通过 CLI、API 或 AI 助手来完成。 ## 瞬间解答棘手问题 | 问题 | 无 CKB | 有 CKB | |----------|-------------|----------| | "如果我更改这个,会破坏什么?" | 用 Grep 碰运气 | 带有风险评分的精确影响范围 | | "谁应该审查这个 PR?" | 靠 git blame 猜测 | 数据驱动的审查者建议 | | "这段代码还在用吗?" | 删掉看看会不会出错 | 带置信度评分的死代码检测 | | "我应该运行哪些测试?" | 全部运行(30分钟) | 仅运行受影响的测试(2分钟) | | "这个系统是如何工作的?" | 读代码读上几小时 | 即刻查询架构 | | "谁拥有这段代码?" | 手动搜索 CODEOWNERS | 带漂移检测的所有权归属 | | "是否有暴露的密钥?" | 手动 grep 搜索模式 | 使用 26 种模式进行自动扫描 | ## 您可以做什么 🔍 **理解** — 语义搜索、调用图、用法追踪、架构图 ⚡ **分析** — 影响分析、风险评分、热点检测、耦合分析 🛡️ **保护** — 受影响测试检测、破坏性变更警告、PR 风险评估 🔐 **安全** — 密钥检测、凭据扫描、安全敏感代码识别 👥 **协作** — 所有权查询、审查者建议、架构决策 (ADR) 📊 **改进** — 死代码检测、技术债务跟踪、文档覆盖率 🚀 **复合操作** — 单次调用工具(`explore`、`understand`、`prepareChange`)可减少 60-70% 的 AI 工具调用 🔗 **集成** — CLI、HTTP API、用于 AI 工具的 MCP、CI/CD 流水线、自定义脚本 ## 立即体验 ``` # 查看你的 codebase 中的风险 ckb hotspots --format=human # 检查发生了什么更改以及哪些可能会出现故障 ckb diff-summary --format=human # 扫描暴露的 secrets ckb audit --format=human # 一目了然地检查架构 ckb arch --format=human # 检查系统状态 ckb status ``` ## 无处不在 | AI 助手 | CI/CD | 您的工具 | |---------------|-------|------------| | Claude Code, Cursor, Windsurf, VS Code, Grok | GitHub Actions, GitLab CI | CLI, HTTP API, 脚本 | 通过智能预设**减少 83% 的 token**——仅加载您需要的工具。 ``` # 一条命令即可连接到 Claude Code ckb setup ``` ## 了解更多 | 资源 | 描述 | |----------|-------------| | 📖 **[功能指南](https://github.com/SimplyLiz/CodeMCP/wiki/Features)** | 包含示例的完整功能列表 | | 💬 **[提示词指南](https://github.com/SimplyLiz/CodeMCP/wiki/Prompt-Cookbook)** | 针对实际问题的真实提示词 | | 🔌 **[集成指南](https://github.com/SimplyLiz/CodeMCP/wiki/Integration-Guide)** | 在您自己的工具和脚本中使用 CKB | | ⚡ **[影响分析](https://github.com/SimplyLiz/CodeMCP/wiki/Impact-Analysis)** | 影响范围、受影响的测试、PR 风险 | | 🔧 **[CI/CD 集成](https://github.com/SimplyLiz/CodeMCP/wiki/CI-CD-Integration)** | GitHub Actions、GitLab CI 模板 | ## 快速开始 ### 选项 1: npm(推荐) ``` # 全局安装 npm install -g @tastehub/ckb # 或者直接使用 npx 运行(无需安装) npx @tastehub/ckb init ``` ### 选项 2: Homebrew (macOS/Linux) ``` brew tap SimplyLiz/ckb brew install ckb ``` ### 选项 3: 从源码构建 ``` git clone https://github.com/SimplyLiz/CodeMCP.git cd CodeMCP go build -o ckb ./cmd/ckb ``` ### 设置 ``` # 1. 在你的项目中初始化 cd /path/to/your/project ckb init # or: npx @tastehub/ckb init # 2. 生成 SCIP index(可选但推荐) ckb index # auto-detects language and runs appropriate indexer # 3. 连接到 Claude Code ckb setup # creates .mcp.json automatically # 或者手动: claude mcp add --transport stdio ckb -- npx @tastehub/ckb mcp ``` **启动时显示的 Token 效率:** ``` CKB MCP Server v9.0.0 Active tools: 14 / 76 (18%) Estimated context: ~1k tokens Preset: core ``` 现在 Claude 可以回答如下问题: - *"什么调用了 HandleRequest 函数?"* - *"如何从 API 访问到 ProcessPayment?"* - *"如果我更改 UserService,影响范围有多大?"* - *"谁拥有 internal/api 模块?"* - *"这段遗留代码还在使用吗?"* ## 为什么选择 CKB? | 无 CKB | 有 CKB | |-------------|----------| | AI 使用 grep 匹配模式 | AI 进行语义导航 | | "我找到了 47 个 Handler 的匹配项" | "HandleRequest 被 3 个路由通过 CheckoutService 调用" | | 猜测影响程度 | 带风险评分的明确影响范围 | | 阅读整个文件以获取上下文 | 准确获取相关内容 | | "这是谁负责的?" → 搜索 CODEOWNERS | 即时所有权归属与审查者建议 | | "更改这个安全吗?" → 听天由命 | 热点趋势 + 影响分析 | ## 三种使用方式 | 接口 | 最适用场景 | |-----------|----------| | **[MCP](https://github.com/SimplyLiz/CodeMCP/wiki/MCP-Integration)** | AI 辅助开发 — Claude、Cursor、Windsurf、VS Code、OpenCode、Grok | | **[CLI](https://github.com/SimplyLiz/CodeMCP/wiki/User-Guide)** | 从终端快速查找、脚本编写 | | **[HTTP API](https://github.com/SimplyLiz/CodeMCP/wiki/API-Reference)** | IDE 插件、CI 集成、自定义工具 | ## 索引的工作原理 CKB 使用 **SCIP 索引**来理解您的代码。可以将其想象成一个数据库,它知道每个函数定义的位置、谁调用了它,以及所有事物是如何连接的。 ### 基础知识 ``` # 1. 生成 index(自动检测语言) ckb index # 2. 检查你的 index 是否为最新 ckb status ``` 如果没有索引,CKB 仍然可以使用 tree-sitter 解析(基础模式)工作,但有了索引,您可以获得: - 跨文件引用(“谁调用了这个函数?”) - 精确的影响分析 - 调用图导航 ### 语言支持 并非所有语言都处于同等地位。CKB 根据索引器的成熟度将语言划分为**质量层级**: | 层级 | 质量 | 语言 | |------|---------|-----------| | **Tier 1** | 完整支持,包含所有功能 | Go | | **Tier 2** | 完整支持,存在少量边缘情况 | TypeScript, JavaScript, Python | | **Tier 3** | 基础支持,调用图可能不完整 | Rust, Java, Kotlin, C++, Ruby, Dart | | **Tier 4** | 实验性支持 | C#, PHP | **主要限制:** - **增量索引**仅支持 Go。其他语言需要完全重新索引。 - **TypeScript monorepos** 可能需要 `--infer-tsconfig` 标志 - **C/C++** 需要 `compile_commands.json` - **Python** 在激活的虚拟环境中效果最佳 运行 `ckb doctor --tier standard` 以检查您的语言工具是否已正确安装。 有关索引器安装、已知问题和完整功能矩阵,请参阅 **[语言支持](https://github.com/SimplyLiz/CodeMCP/wiki/Language-Support)**。 ### 保持索引最新 当您进行提交时,索引会变得陈旧。CKB 提供了多种保持最新的方法: | 方法 | 命令 | 何时使用 | |--------|---------|-------------| | 手动 | `ckb index` | 一次性更新、脚本 | | 监视模式 | `ckb index --watch` | 开发期间自动刷新 | | MCP 监视 | `ckb mcp --watch` | AI 会话期间自动刷新 | | CI webhook | `POST /api/v1/refresh` | 从 CI/CD 触发 | **AI 会话的快速启动:** ``` ckb mcp --watch # Auto-reindexes every 30s when stale ``` **检查陈旧状态:** ``` ckb status # 显示:"5 commits behind HEAD" 或 "Up to date" ``` 对于 Go 项目,CKB 使用**增量索引**——仅处理更改的文件,从而使更新非常迅速。 有关完整文档,请参阅 **[索引管理指南](https://github.com/SimplyLiz/CodeMCP/wiki/Index-Management)**。 ## 功能 | 功能 | 描述 | |---------|-------------| | [**复合操作**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#compound-operations) | `explore`、`understand`、`prepareChange` — 单次调用即可减少 60-70% AI 开销的工具 | | [**代码导航**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#code-navigation--discovery) | 语义搜索、调用图、追踪用法、查找入口点 | | [**影响分析**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#impact-analysis--safety) | 影响范围、风险评分、受影响的测试、破坏性变更 (`compareAPI`) | | [**架构**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#architectural-understanding) | 模块概览、ADR、依赖图、来源说明 | | [**所有权**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#ownership--review) | CODEOWNERS + git blame、审查者建议、漂移检测 | | [**代码质量**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#code-quality--risk) | 死代码检测 (`findDeadCode`)、耦合分析、复杂度 | | [**安全**](https://github.com/SimplyLiz/CodeMCP/wiki/Security) | 密钥检测、凭据扫描、白名单 | | [**文档**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#documentation-intelligence) | 文档-符号链接、陈旧检测、覆盖率指标 | | [**多仓库**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#multi-repo--federation) | 联邦、API 契约、远程索引服务 | | [**运行时**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#runtime-intelligence) | OpenTelemetry 集成、观察到的用法、生产环境死代码 | | [**流式传输**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#streaming) | 针对 `findReferences`、`searchSymbols` 的 SSE 流式传输,提供实时进度 | | [**自动化**](https://github.com/SimplyLiz/CodeMCP/wiki/Features#automation--cicd) | 守护进程模式、监视模式、webhook、增量索引 | 📖 **[完整功能指南](https://github.com/SimplyLiz/CodeMCP/wiki/Features)** — 包含示例的详细文档 📋 **[更新日志](https://github.com/SimplyLiz/CodeMCP/blob/main/CHANGELOG.md)** — 版本历史 ## PR 审查 CKB 审查可在 5 秒内运行 20 项质量检查——包括密钥、破坏性变更、死代码、复杂度、测试缺口、Bug 模式等。零 token 消耗,零 API 调用。 当您的 AI 助手(Claude Code、Cursor、Windsurf)审查 PR 时,它会首先调用 CKB 并在大约 1k 个 token 内获得结构化分析。然后它只会读取重要的文件——在大型 PR 上可**节省 50-80% 的 token**。 ``` ckb review --base=main # Human-readable review ckb review --base=main --ci # CI mode (exit codes) ckb review --base=main --post=123 # Post as PR comment ``` 在没有 LLM 的 CI 环境中也可运行: ``` - run: npx @tastehub/ckb review --base=main --ci --format=sarif > review.sarif ``` | | 无 CKB | 有 CKB | |---|---|---| | 100 文件 PR 上的 LLM token | ~200k | ~50k | | LLM 读取的文件 | 全部 | ~10(CKB 标记的文件) | | 是否检查密钥/破坏性变更/死代码 | 否 | 是(所有文件) | 📖 [**它如何帮助 AI 审查**](docs/marketing/ckb-review/how-it-helps-llm.md) · [**基准测试**](docs/marketing/ckb-review/benchmarks.md) · [**CI 集成**](docs/marketing/ckb-review/ci-integration.md) · [**快速开始**](docs/marketing/ckb-review/quickstart.md) ## CLI ``` ckb status # System health (with remediation suggestions) ckb search Handler # Find symbols ckb diff-summary # Analyze what changed ckb hotspots # Risky areas ckb arch # Architecture overview ckb ownership # File/path ownership ckb mcp # Start MCP server ``` **v9.0 复合操作(通过 MCP):** ``` # 这些 tools 将多个查询组合成单次调用 explore # Area exploration: symbols, dependencies, hotspots understand # Symbol deep-dive: refs, callers, explanation prepareChange # Pre-change analysis: impact, tests, risk batchGet # Fetch up to 50 symbols at once batchSearch # Run up to 10 searches at once ``` 📖 **[用户指南](https://github.com/SimplyLiz/CodeMCP/wiki/User-Guide)** — 所有 CLI 命令和选项 ## HTTP API ``` # 启动 HTTP server ckb serve --port 8080 # 示例调用 curl http://localhost:8080/health curl http://localhost:8080/status curl "http://localhost:8080/search?q=NewServer" curl http://localhost:8080/architecture curl "http://localhost:8080/ownership?path=internal/api" curl http://localhost:8080/hotspots # Index Server Mode (v7.3) - 将 indexes 提供给远程 clients ckb serve --port 8080 --index-server --index-config config.toml # Index server endpoints curl http://localhost:8080/index/repos curl http://localhost:8080/index/repos/company%2Fcore-lib/meta curl "http://localhost:8080/index/repos/company%2Fcore-lib/symbols?limit=100" curl "http://localhost:8080/index/repos/company%2Fcore-lib/search/symbols?q=Handler" # Upload endpoints(带有压缩 + auth) curl -X POST http://localhost:8080/index/repos \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ckb_xxx" \ -d '{"id":"my-org/my-repo","name":"My Repo"}' gzip -c index.scip | curl -X POST http://localhost:8080/index/repos/my-org%2Fmy-repo/upload \ -H "Content-Encoding: gzip" \ -H "Authorization: Bearer ckb_xxx" \ --data-binary @- # Token 管理(index server 管理员) ckb token create --name "ci-upload" --scope upload # Create API key ckb token list # List all tokens ckb token revoke ckb_xxx # Revoke a token ckb token rotate ckb_xxx # Rotate (new secret, same ID) ``` ## MCP 集成 CKB 可与任何兼容 MCP 的 AI 编码工具配合使用。
Claude Code ``` # 为当前项目自动配置 npx @tastehub/ckb setup # 或者全局添加适用于所有项目 npx @tastehub/ckb setup --global ``` 或手动添加到 `.mcp.json`: ``` { "mcpServers": { "ckb": { "command": "npx", "args": ["@tastehub/ckb", "mcp"] } } } ```
Cursor 添加到 `~/.cursor/mcp.json`(全局)或 `.cursor/mcp.json`(项目): ``` { "mcpServers": { "ckb": { "command": "npx", "args": ["@tastehub/ckb", "mcp"] } } } ```
Windsurf 添加到 `~/.codeium/windsurf/mcp_config.json`: ``` { "mcpServers": { "ckb": { "command": "npx", "args": ["@tastehub/ckb", "mcp"] } } } ```
VS Code 添加到您的 VS Code `settings.json` 中: ``` { "mcp": { "servers": { "ckb": { "type": "stdio", "command": "npx", "args": ["@tastehub/ckb", "mcp"] } } } } ```
OpenCode 添加到项目根目录中的 `opencode.json`: ``` { "mcp": { "ckb": { "type": "local", "command": ["npx", "@tastehub/ckb", "mcp"], "enabled": true } } } ```
Grok ``` # 为当前项目自动配置 npx @tastehub/ckb setup --tool=grok # 或者全局添加 npx @tastehub/ckb setup --tool=grok --global ``` 或手动添加到 `.grok/settings.json`(项目)或 `~/.grok/user-settings.json`(全局): ``` { "mcpServers": { "ckb": { "name": "ckb", "transport": "stdio", "command": "npx", "args": ["@tastehub/ckb", "mcp"] } } } ```
Claude Desktop Claude Desktop 没有项目上下文,因此您必须指定仓库路径。 **自动设置**(推荐): ``` cd /path/to/your/repo ckb setup --tool=claude-desktop ``` **手动配置** — 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) 或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows): ``` { "mcpServers": { "ckb": { "command": "npx", "args": ["-y", "@tastehub/ckb", "mcp"], "env": { "CKB_REPO": "/path/to/your/repo" } } } } ``` `CKB_REPO` 环境变量告诉 CKB 要分析哪个仓库。Claude Desktop 一次只能处理一个仓库。
Windows 在上述配置中使用 `cmd /c` 包装器: ``` { "mcpServers": { "ckb": { "command": "cmd", "args": ["/c", "npx", "@tastehub/ckb", "mcp"] } } } ```
预设(Token 优化) CKB 提供了 80 多种工具,但大多数会话只需要其中的一部分。使用预设可以减少高达 83% 的 token 开销: ``` # 列出所有可用的 presets 及 tool 数量和 token 估算 ckb mcp --list-presets # 默认值:core preset(14 个基本 tools) ckb mcp # 针对特定工作流的 presets ckb mcp --preset=core # 14 tools - search, explain, impact (default) ckb mcp --preset=review # 19 tools - core + diff, ownership ckb mcp --preset=refactor # 19 tools - core + coupling, dead code ckb mcp --preset=federation # 28 tools - core + cross-repo ckb mcp --preset=docs # 20 tools - core + doc-symbol linking ckb mcp --preset=ops # 25 tools - core + jobs, webhooks, metrics ckb mcp --preset=full # 80+ tools - all tools (legacy) ``` 在 MCP 配置中: ``` { "mcpServers": { "ckb": { "command": "npx", "args": ["@tastehub/ckb", "mcp", "--preset=review"] } } } ``` AI 可以在会话中途使用 `expandToolset` 工具动态扩展工具集。
## 底层原理 CKB 编排了多个代码智能后端: - **SCIP** — 精确的、预索引的符号数据(最快) - **LSP** — 实时语言服务器查询 - **Git** — Blame、历史记录、变更分析、所有权 - **LIP** — 用于最近邻搜索和重新排序的语义嵌入守护程序(可选,推荐) 结果会被智能合并,并针对 LLM 上下文限制进行压缩。 持久化知识可跨会话保留: - **模块注册表** — 边界、职责、标签 - **所有权注册表** — CODEOWNERS + 带时间衰减的 git blame - **热点追踪器** — 带趋势分析的历史快照 - **决策日志** — 带全文搜索的 ADR ## 谁应该使用 CKB? - **使用 AI 助手的开发者** — 赋予您的 AI 工具超能力 - **拥有大型代码库的团队** — 高效应对复杂性 - **任何进行重构的人** — 在更改之前了解影响 - **代码审查者** — 全面了解更改情况 - **技术负责人** — 随时追踪架构健康状况 ## 局限性(实话实说) **CKB 的强项:** - 静态代码导航——查找定义、引用、调用图 - 用于安全重构的影响分析 - 所有权查询(CODEOWNERS + git blame) - 架构和模块理解 **CKB 无法提供帮助的方面:** - 动态分派/运行时行为(请使用调试器) - 未被索引的生成代码 - 代码生成、代码检查或格式化 - 跨仓库调用(请使用[联邦](https://github.com/SimplyLiz/CodeMCP/wiki/Federation)) 📖 **[实际限制](https://github.com/SimplyLiz/CodeMCP/wiki/Practical-Limits)** — 关于准确性、盲区以及何时应信任结果的完整指南 ## 文档 请参阅 **[完整文档 Wiki](https://github.com/SimplyLiz/CodeMCP/wiki)** 了解: - [快速开始](https://github.com/SimplyLiz/CodeMCP/wiki/Quick-Start) — 分步安装 - [提示词指南](https://github.com/SimplyLiz/CodeMCP/wiki/Prompt-Cookbook) — 针对实际问题的真实提示词 - [语言支持](https://github.com/SimplyLiz/CodeMCP/wiki/Language-Support) — SCIP 索引器和支持层级 - [实际限制](https://github.com/SimplyLiz/CodeMCP/wiki/Practical-Limits) — 准确性说明、盲区 - [用户指南](https://github.com/SimplyLiz/CodeMCP/wiki/User-Guide) — CLI 命令和最佳实践 - [索引管理](https://github.com/SimplyLiz/CodeMCP/wiki/Index-Management) — 索引的工作原理、自动刷新方法 - [增量索引](https://github.com/SimplyLiz/CodeMCP/wiki/Incremental-Indexing) — 针对 Go 项目的快速索引更新 - [文档-符号链接](https://github.com/SimplyLiz/CodeMCP/wiki/Doc-Symbol-Linking) — 文档中的符号检测、陈旧检查 - [身份验证](https://github.com/SimplyLiz/CodeMCP/wiki/Authentication) — API token、作用域、速率限制 - [MCP 集成](https://github.com/SimplyLiz/CodeMCP/wiki/MCP-Integration) — Claude Code 设置、80 多种工具 - [API 参考](https://github.com/SimplyLiz/CodeMCP/wiki/API-Reference) — HTTP API 文档 - [守护进程模式](https://github.com/SimplyLiz/CodeMCP/wiki/Daemon-Mode) — 常驻服务、调度器、Webhook - [配置](https://github.com/SimplyLiz/CodeMCP/wiki/Configuration) — 包含 MODULES.toml 在内的所有选项 - [架构](https://github.com/SimplyLiz/CodeMCP/wiki/Architecture) — 系统设计和组件 - [安全](https://github.com/SimplyLiz/CodeMCP/wiki/Security) — 密钥检测、凭据扫描 - [遥测](https://github.com/SimplyLiz/CodeMCP/wiki/Telemetry) — 运行时可观测性、死代码检测 - [联邦](https://github.com/SimplyLiz/CodeMCP/wiki/Federation) — 跨仓库查询 - [CI/CD 集成](https://github.com/SimplyLiz/CodeMCP/wiki/CI-CD-Integration) — GitHub Actions、PR 分析 ## 环境要求 **使用 npm(推荐):** - Node.js 16+ - Git **从源码构建:** - Go 1.21+ - Git **可选(用于增强分析):** - 适用于您所用语言的 SCIP 索引器 (scip-go、scip-typescript 等) — 运行 `ckb index` 自动安装 - [LIP v2.0](https://lip-sigma.vercel.app) 语义嵌入守护程序(需要 Rust/cargo)— 强烈建议安装以获得最佳搜索质量([文档](https://lip-sigma.vercel.app/docs)、[crates.io](https://crates.io/crates/lip-cli)): cargo install lip-cli lip daemon --socket ~/.local/share/lip/lip.sock ## 许可证 **免费用于:** - 个人使用 - 开源项目 - 年收入低于 $25k 的初创公司和小型企业 年收入达到或超过 $25k 的组织**需要商业许可证**。有关团队版和企业版计划,请参阅[定价](https://codeknowledge.dev/pricing),或查看 [LICENSE](LICENSE) 了解完整条款。
标签:AI编程助手, EVTX分析, HTTP API, IP 地址批量处理, LNA, MCP服务端, MITM代理, NPM包, OSV-Scalibr, Rust, StruQ, 云安全监控, 云资产清单, 代码分析, 代码安全审查, 代码所有权, 代码搜索, 代码智能, 代码知识库, 代码质量管理, 凭证管理, 可视化界面, 威胁情报, 安全扫描, 对抗攻击, 开发者工具, 影响分析, 敏感信息检测, 日志审计, 时序注入, 架构映射, 死代码检测, 测试影响分析, 用户代理, 符号导航, 网络安全审计, 网络安全研究, 网络流量审计, 调用图, 逆向工程, 静态分析, 风险评分