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或者直接从以下网址下载二进制文件 .
视窗
使用 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 initnapi 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是一个开源项目。因此,我们认为这是不道德的 把捐款留给我们自己。相反,我们将如何处理 捐赠:
- 捐款进入一个游泳池
- 资金池中的资金将分配给贡献者
- 年底,剩余的钱将捐给慈善机构
社区的选择
我们将定期发布有关池中有多少钱以及情况的更新 正在分发。
