# Code Repo Analyzer — Tech Stack & Stats (`wsgcjj/code-summary`) Actor

Analyze any public Git repository — detect tech stack, language distribution, directory structure, and generate a comprehensive summary. Perfect for AI agents evaluating codebases.

- **URL**: https://apify.com/wsgcjj/code-summary.md
- **Developed by:** [陈俊杰](https://apify.com/wsgcjj) (community)
- **Categories:** Developer tools, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Code Repository Analyzer (code-summary)

一个 Apify Actor，输入 GitHub 仓库 URL，输出完整的代码库结构分析摘要。

### 功能

- **技术栈检测** — 自动扫描 `package.json`、`requirements.txt`、`Cargo.toml`、`go.mod` 等 30+ 种配置文件，识别语言/框架/运行时
- **目录结构树** — 递归获取仓库前 3 层目录结构
- **文件类型分布** — 按扩展名统计文件数量，估算代码行数
- **语言分布** — 从 GitHub API 获取精确的语言字节占比
- **README 摘要** — 自动提取 README 前 200 词作为摘要（可选包含完整内容）
- **仓库元信息** — Star 数、Fork 数、License、Topics、创建/更新时间等

### 适用场景

- **AI 编码 Agent** — 快速评估一个代码库的技术构成和规模，决定是否值得深入
- **开发者** — 接手新项目前快速了解其结构和依赖
- **代码审计** — 获得项目全景视图

### 输入

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `repo_url` | string | ✅ | GitHub 公开仓库 URL，例如 `https://github.com/owner/repo` |
| `include_content` | boolean | ❌ | 是否在输出中包含完整 README 内容（默认 `false`） |
| `github_token` | string | ❌ | GitHub 个人访问令牌，用于提高 API 速率限制 |

### 输出

| 字段 | 类型 | 说明 |
|------|------|------|
| `name` | string | 完整仓库名（owner/repo） |
| `description` | string | 仓库描述 |
| `stars` | integer | Star 数量 |
| `forks` | integer | Fork 数量 |
| `language` | string | GitHub 检测的主要编程语言 |
| `topics` | array | 仓库标签 |
| `license` | string | SPDX 许可证标识 |
| `language_distribution` | array | 语言字节占比列表 |
| `tech_stack` | array | 检测到的配置文件列表 |
| `detected_frameworks` | array | 推断出的框架/运行时 |
| `dir_tree` | array | 目录结构树（前 3 层） |
| `file_stats` | object | 文件统计（总数、行数、扩展名分布） |
| `readme_summary` | string | README 摘要（前 200 词） |
| `readme_full` | string | 完整 README（仅当 `include_content=true`） |

### 使用示例

```python
## Apify API 调用
client = apify_client.ApifyClient("YOUR_API_TOKEN")
result = client.actor("code-summary").call(
    run_input={"repo_url": "https://github.com/nousresearch/hermes-function-calling"}
)
````

### 技术细节

- 使用 **GitHub REST API**（`api.github.com`）获取仓库元数据、语言分布和目录结构
- 使用 **GitHub Raw Content API**（`raw.githubusercontent.com`）检测配置文件
- 通过 **Git Trees API**（`recursive=1`）高效获取完整文件统计
- 完全基于 `httpx` 异步 HTTP 请求，无需 `gitpython`

### 环境变量

- `GITHUB_TOKEN` — 可选，用于提高 API 速率限制（从每小时 60 提升到 5000 次请求）

### 定价

每次运行 **$0.01**（pay-per-event）。

# Actor input Schema

## `repo_url` (type: `string`):

Public GitHub repository URL, e.g. https://github.com/owner/repo

## `include_content` (type: `boolean`):

If true, includes the full README content in the output (in addition to the summary).

## `github_token` (type: `string`):

Personal GitHub token for higher API rate limits. Falls back to GITHUB\_TOKEN env variable.

## Actor input object example

```json
{
  "include_content": false
}
```

# Actor output Schema

## `name` (type: `string`):

Full repository name (owner/repo)

## `description` (type: `string`):

Repository description from GitHub

## `stars` (type: `string`):

Number of GitHub stars

## `forks` (type: `string`):

Number of forks

## `open_issues` (type: `string`):

Number of open issues

## `language` (type: `string`):

Primary programming language detected by GitHub

## `topics` (type: `string`):

Repository topics/tags

## `license` (type: `string`):

SPDX license identifier

## `created_at` (type: `string`):

ISO 8601 creation timestamp

## `updated_at` (type: `string`):

ISO 8601 last update timestamp

## `default_branch` (type: `string`):

Default branch name (e.g. main, master)

## `language_distribution` (type: `string`):

Byte-level language distribution sorted by dominance

## `tech_stack` (type: `string`):

Well-known configuration files found in the repository root

## `detected_frameworks` (type: `string`):

Detected frameworks and runtimes inferred from config files

## `dir_tree` (type: `string`):

Repository directory structure (top 3 levels)

## `file_stats` (type: `string`):

File type distribution and code statistics

## `readme_summary` (type: `string`):

AI-extracted summary of the README (first ~200 words)

## `readme_full` (type: `string`):

Full README content (only if include\_content=true)

## `repo_url` (type: `string`):

The repository URL provided as input

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("wsgcjj/code-summary").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("wsgcjj/code-summary").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call wsgcjj/code-summary --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=wsgcjj/code-summary",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Code Repo Analyzer — Tech Stack & Stats",
        "description": "Analyze any public Git repository — detect tech stack, language distribution, directory structure, and generate a comprehensive summary. Perfect for AI agents evaluating codebases.",
        "version": "0.0",
        "x-build-id": "OSKQr6Dh2OSTbABJP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/wsgcjj~code-summary/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-wsgcjj-code-summary",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/wsgcjj~code-summary/runs": {
            "post": {
                "operationId": "runs-sync-wsgcjj-code-summary",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/wsgcjj~code-summary/run-sync": {
            "post": {
                "operationId": "run-sync-wsgcjj-code-summary",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "repo_url"
                ],
                "properties": {
                    "repo_url": {
                        "title": "Repository URL",
                        "pattern": "^https?:\\/\\/github\\.com\\/[^/]+\\/[^/]+",
                        "type": "string",
                        "description": "Public GitHub repository URL, e.g. https://github.com/owner/repo"
                    },
                    "include_content": {
                        "title": "Include Full README",
                        "type": "boolean",
                        "description": "If true, includes the full README content in the output (in addition to the summary).",
                        "default": false
                    },
                    "github_token": {
                        "title": "GitHub Token (optional)",
                        "type": "string",
                        "description": "Personal GitHub token for higher API rate limits. Falls back to GITHUB_TOKEN env variable."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
