代码架构分析工具

napi 是一个完全离线的 CLI 工具,用于分析代码库的架构(依赖关系、复杂性和结构),并提供可视化和重构功能。

  • by nanoapi-io
  • TypeScript
  • 本地部署
  • 323 星标
  • 更新于
在 GitHub 查看 nanoapi-io/napi

使用说明

napi-面向人工智能时代的更好的软件架构

napi 是一个完全离线的CLI,用于分析代码库的架构-- 依赖关系、复杂性和结构——然后让你可视化和重构 无需将代码发送到任何地方。

它从源代码生成依赖清单,并将其存储在本地, 并直接从CLI提供交互式图形可视化工具。

特性

  • 🔍 相关性分析:映射您的每个文件、符号和依赖关系 自动代码库。
  • 🚨 审计:检测超过复杂性、大小或 耦合阈值。
  • 📊 交互式可视化工具:通过Cytoscape.js探索您的架构 在浏览器中本地提供的图形。
  • 📝 符号提取:将特定函数、类或符号提取到 用于重构的独立文件。
  • 🏷️ AI标签 (可选):使用OpenAI、Google或Anthropic模型 自动标签依赖关系。
  • ⚙️ CI/CD就绪:集成到任何管道中--生成清单 随着时间的推移,每一种推送和跟踪架构。
  • 🔒 完全离线:没有帐户,没有服务器,没有数据离开你的机器。

支持的语言

语言 状态
python✅ 支持
C✅ 支持
C✅ 支持
Java✅ 支持
C🚧 进行中
PHP 🚧 进行中
JS/TS 🚧 进行中

安装

Unix(macOS、Linux)

curl -fsSL https://raw.githubusercontent.com/nanoapi-io/napi/refs/heads/main/install_scripts/install.sh | bash

或者直接从以下网址下载二进制文件 GitHub发布.

视窗

使用 Windows 子系统 for Linux 经营纳帕。 本机Windows支持正在进行中。

快速开始

# 1. Initialize your project (creates .napirc)
napi init

# 2. Generate a dependency manifest
napi generate

# 3. Open the visualizer in your browser
napi view

就是这样。您的清单保存在本地 .napi/manifests/ 和那个 可视化工具在以下位置打开 http://localhost:3000.

CLI命令

napi init

交互式设置,创建 .napirc 项目中的配置文件 根。

提示您:

  • 语言 --Python、C#、C或Java
  • 包含/排除模式 --要分析哪些文件
  • 输出目录 --其中写入提取的符号
  • AI标签 (可选)--提供程序和并发设置
napi init

napi generate

分析您的代码库并生成依赖清单。宣言 捕获每个文件、符号、依赖关系和度量(行、复杂性、, 耦合)。

清单保存为JSON文件 .napi/manifests/ 使用命名模式 {timestamp}-{commitSha}.json.

# Interactive (prompts for branch/commit if not in git)
napi generate

# Non-interactive (for CI)
napi generate --branch main --commit-sha abc1234 --commit-sha-date 2026-01-01T00:00:00Z

选项:

  • --branch --Git分支名称(如果省略,则自动检测)
  • --commit-sha --Git提交哈希(如果省略,则自动检测)
  • --commit-sha-date --ISO 8601格式的提交日期(如果 省略)
  • --labelingApiKey --用于AI标记的API密钥(覆盖全局配置)

napi view

启动本地web服务器,并在您的 浏览器。

napi view
napi view --port 8080

查看器提供:

  • 清单列表 --按分支浏览所有本地存储的清单,提交, 和日期
  • 项目图 --使用Cytoscape.js的文件级依赖关系图
  • 文件图 --文件内的符号级视图(函数、类、符号等), 变量)
  • 符号图 --特定符号的传递依赖链
  • 文件资源管理器侧边栏 --浏览代码库结构
  • 审计警报 --文件/符号超过阈值的视觉指示器

napi extract

使用本地命令将代码库中的特定符号提取到单独的文件中 显示。

# Extract a function from a specific file
napi extract --symbol "src/auth/login.py|authenticate"

# Extract multiple symbols
napi extract --symbol "src/models.py|User" --symbol "src/models.py|Session"

# Use a specific manifest (defaults to latest)
napi extract --symbol "src/main.py|run" --manifestId 1712500000000-a1b2c3d

输出被写入 {outDir}/extracted-{timestamp}/.

napi set apiKey

为AI驱动的依赖项标记配置API密钥。密钥存储在 全局配置(不在您的项目中)。

napi set apiKey

提示:

  • 提供者 --谷歌、OpenAI或Anthropic
  • API密钥 --您的提供商API密钥

本地清单存储

所有清单都存储在 .napi/manifests/ 相对于你的项目根。 每个清单都是一个自包含的JSON文件:

{
  "id": "1712500000000-a1b2c3d",
  "branch": "main",
  "commitSha": "a1b2c3d4e5f6...",
  "commitShaDate": "2026-04-07T10:00:00Z",
  "createdAt": "2026-04-07T10:01:00Z",
  "manifest": {}
}

添加 .napi/ 给你的 .gitignore 或承诺跟踪架构历史 版本控制——由您选择。

CI/CD集成

每次推送时自动生成清单:

# .github/workflows/napi.yml
name: Generate Manifest
on: [push]
jobs:
  manifest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install napi
        run: curl -fsSL https://raw.githubusercontent.com/nanoapi-io/napi/refs/heads/main/install_scripts/install.sh | bash

      - name: Generate manifest
        run: napi generate --branch ${{ github.ref_name }} --commit-sha ${{ github.sha }} --commit-sha-date "$(git log -1 --format=%cI)"

配置参考

.napirc

由创建的项目级配置 napi init:

{
  "language": "python",
  "python": { "version": "3.10" },
  "project": {
    "include": ["src/**/*.py"],
    "exclude": [".git/**", "**/__pycache__/**", "napi_out/**"]
  },
  "outDir": "napi_out",
  "labeling": {
    "modelProvider": "openai",
    "maxConcurrency": 5
  }
}

全局配置

存储在操作系统配置目录中(~/.config/napi/config.json 在Linux上, ~/Library/Application Support/napi/config.json 在macOS上)。通过管理 napi set apiKey.

{
  "labeling": {
    "apiKeys": {
      "openai": "sk-...",
      "google": "AIza...",
      "anthropic": "sk-ant-..."
    }
  }
}

发展

需要 迪诺 v2.4+。

# Install dependencies
deno install --allow-scripts

# Run CLI in dev mode
deno task dev

# Run viewer dev server (hot-reload)
deno task dev:viewer

# Build viewer for production
deno task build:viewer

# Compile binary (includes viewer)
deno task compile

# Run tests
deno task test

# Lint
deno lint

# Format
deno fmt

贡献

我们欢迎社区的贡献。请阅读我们的 贡献指南 了解如何参与的详细信息。

许可证

napi 根据 可持续使用许可证.

延伸阅读

捐款

NanoAPI是一个开源项目。因此,我们认为这是不道德的 把捐款留给我们自己。相反,我们将如何处理 捐赠:

  • 捐款进入一个游泳池
  • 资金池中的资金将分配给贡献者
  • 年底,剩余的钱将捐给慈善机构 社区的选择

我们将定期发布有关池中有多少钱以及情况的更新 正在分发。