Skip to content

项目结构

概览

gemini-cli 是一个 TypeScript monorepo 项目,使用 npm workspaces 管理多个包。

gemini-cli/
├── packages/           # 核心代码
│   ├── cli/           # CLI 界面
│   └── core/          # Agent 核心逻辑
├── docs/              # 用户文档
├── integration-tests/ # 集成测试
├── scripts/           # 构建脚本
└── bundle/            # 构建产物

核心包

packages/cli

CLI 界面层,负责:

  • 终端 UI 渲染(使用 Ink)
  • 用户输入处理
  • 命令系统(/help, /chat 等)
  • 配置和认证管理
packages/cli/
├── src/
│   ├── gemini.tsx        # 主入口
│   ├── AppContainer.tsx  # 应用容器
│   ├── commands/         # 命令实现
│   ├── ui/              # UI 组件
│   ├── config/          # 配置管理
│   └── services/        # CLI 服务
└── package.json

packages/core

Agent 核心,负责:

  • LLM API 交互
  • 工具系统
  • Agent 循环
  • 状态管理
packages/core/
├── src/
│   ├── core/            # 核心类
│   │   ├── client.ts    # GeminiClient - Agent 主循环
│   │   ├── geminiChat.ts # GeminiChat - API 交互
│   │   ├── turn.ts      # Turn/Event 类型
│   │   └── prompts.ts   # System Prompt
│   ├── tools/           # 工具实现
│   ├── services/        # 服务层
│   ├── agents/          # Agent 系统
│   └── utils/           # 工具函数
└── package.json

数据流

关键文件

Agent 核心

文件职责难度
core/client.tsAgent 主循环⭐⭐⭐
core/geminiChat.tsAPI 交互⭐⭐
core/turn.ts事件类型定义
core/prompts.tsSystem Prompt⭐⭐

工具系统

文件职责难度
tools/tool.ts工具接口
tools/read-file.ts读文件工具
tools/edit.ts编辑文件工具⭐⭐
tools/shell.tsShell 工具⭐⭐

服务层

文件职责难度
services/loopDetection.ts循环检测⭐⭐
services/chatCompression.ts对话压缩⭐⭐⭐
services/chatRecording.ts会话记录⭐⭐

推荐阅读顺序

入门路线(理解 Agent 基本原理)

1. core/turn.ts        - 理解事件类型
2. tools/tool.ts       - 理解工具接口
3. tools/read-file.ts  - 看一个简单工具的实现
4. core/geminiChat.ts  - 理解 API 交互
5. core/client.ts      - 理解 Agent 循环

进阶路线(深入理解)

1. core/prompts.ts           - System Prompt 设计
2. services/loopDetection.ts - 循环检测实现
3. services/chatCompression.ts - 对话压缩策略
4. tools/edit.ts             - 复杂工具实现
5. agents/                   - 多 Agent 系统

依赖关系

核心依赖:

  • @google/generative-ai - Gemini API SDK
  • ink - 终端 React 渲染
  • yargs - CLI 参数解析
  • zod - 类型验证

构建产物

构建后生成单个可执行文件:

bundle/gemini.js  # 包含所有依赖的单文件

使用 esbuild 打包,配置在 esbuild.config.js

小结

  • Monorepo 结构:cli(UI)+ core(逻辑)
  • Core 包是学习重点
  • 推荐从 turn.ts → tool.ts → client.ts 顺序阅读

下一步

了解了项目结构,接下来深入 Core 包的实现:Core 包解析 →

通过实际源码学习 AI Agent 开发