dojops/dojops
GitHub: dojops/dojops
DojOps 是一款企业级 AI DevOps 自动化引擎,通过 AI 智能生成、验证并安全执行基础设施与 CI/CD 配置,同时提供安全扫描、合规审计和完整的治理能力。
Stars: 13 | Forks: 0
DojOps AI DevOps 自动化引擎
企业级 AI DevOps 自动化。
通过结构化输出强制、沙箱执行、审批工作流和哈希链审计跟踪,安全地生成、验证并执行基础设施与 CI/CD 配置。
快速开始 ·
功能特性 ·
仪表盘 ·
CLI 参考 ·
API 参考 ·
架构 ·
文档 ·
贡献指南
## 为什么选择 DojOps?
1. **手动 IaC 效率低下** —— 从零开始编写 Terraform、Kubernetes 和 CI/CD 配置耗时数小时。团队在样板代码上花费的时间往往多于架构设计。
2. **AI 生成的配置存在安全隐患** —— LLM 会生成看似合理但未经验证的输出。若缺乏模式强制和执行控制,AI 生成的基础设施将构成风险隐患。
3. **团队对 AI 驱动的变更缺乏可见性** —— 当 AI 生成配置时,缺乏审计跟踪、审批关卡,也无法从部分失败中恢复。合规团队无法对无法核实的内容进行签字确认。
## 快速开始
### 前置条件
- **Node.js** >= 20(若使用容器镜像则需 **Docker**)
### 安装
```
# npm (推荐)
npm i -g @dojops/cli
# Homebrew (macOS / Linux)
brew tap dojops/tap && brew install dojops
# Shell 脚本
curl -fsSL https://raw.githubusercontent.com/dojops/dojops/main/install.sh | sh
# Docker
docker run --rm -it ghcr.io/dojops/dojops "Create a Terraform config for S3"
```
详细说明、升级/卸载及故障排除请参阅 [docs/installation.md](docs/installation.md)。
### Shell 自动补全
```
dojops completion install # auto-detects your shell
```
或手动生成:`dojops completion bash|zsh|fish`
### 配置与运行
```
# 1. 配置您的 provider
dojops config # Interactive wizard
# 或者:dojops provider add openai --token sk-... # 直接设置
# 2. 生成您的第一个 config
dojops "Create a Kubernetes deployment for nginx with 3 replicas"
```
或直接设置环境变量:
```
export DOJOPS_PROVIDER=openai # openai | anthropic | ollama | deepseek | gemini | github-copilot
export OPENAI_API_KEY=sk-... # your API key
dojops "Create a Terraform config for S3 with versioning"
```
## DojOps 工作原理
### 简单模式 —— 无状态 CLI
```
dojops "Create a Terraform config for S3 with versioning"
dojops "Create a Dockerfile for a Node.js Express app"
dojops debug ci "ERROR: tsc failed with exit code 1..."
dojops analyze diff --file plan.diff
```
DojOps 将请求路由至相应的专家 Agent,通过 Zod schema 强制执行结构化 JSON 输出,并返回经过验证的配置。
### 企业模式 —— 完整生命周期
```
dojops init # Initialize project state + scan repo
dojops check # LLM-powered DevOps config quality check
dojops plan "Create CI/CD for Node app" # Decompose into task graph
dojops validate # Validate plan against schemas
dojops apply # Execute with approval workflow
dojops apply --resume # Resume partially-failed plans
dojops history verify # Verify audit log integrity
dojops history show
# Inspect per-task results
```
计划将被持久化,执行过程在沙箱中进行,每个操作都记录在带有哈希链完整性的审计日志中,部分失败可在不重新执行已完成任务的情况下恢复。
### Web 仪表盘
```
dojops serve # Start at http://localhost:3000
dojops serve --port=8080 # Custom port
```
仪表盘提供了具有深色工业终端美学风格的视觉界面,涵盖所有 DojOps 功能 —— 生成配置、分解计划、调试 CI 日志、分析基础设施差异、浏览 Agent、查看执行历史以及监控可观测性指标(概览、安全发现、审计链完整性)。
## 功能特性
### 智能
- **17 个内置专家 Agent + 自定义 Agent** —— ops-cortex、terraform、kubernetes、CI/CD、security、Docker、cloud architecture、networking、database、GitOps、compliance、CI debugger、appsec、shell scripting、Python、observability 以及 DevSecOps reviewer —— 均采用加权关键词置信度评分。可通过 `dojops agents create` 创建您自己的自定义 Agent(LLM 生成或手动配置)
- **CI 调试** —— 粘贴 CI 日志,即可获得包含错误类型、根本原因、受影响文件以及带置信度评分建议修复的结构化诊断
- **基础设施差异分析** —— 针对基础设施变更的风险等级、成本影响、安全隐患、回滚复杂性及可操作建议
- **DevOps 配置检查器** —— 对检测到的 DevOps 文件进行 LLM 驱动的质量分析,包含成熟度评分(0-100)、按严重性排序的发现以及缺失文件建议
- **6 个 LLM 提供商** —— OpenAI、Anthropic、Ollama(本地)、DeepSeek、Google Gemini、GitHub Copilot —— 支持通过提供商 API 动态选择模型,并支持 temperature 透传以实现确定性复现
### 工具
- **13 个内置 DevOps 模块** —— GitHub Actions、Terraform、Kubernetes、Helm、Ansible、Docker Compose、Dockerfile、Nginx、Makefile、GitLab CI、Prometheus、Systemd、Jenkinsfile
- **声明式工具元数据** —— `.dops` 模块声明 `scope`(写入边界)、`risk`(LOW/MEDIUM/HIGH 自我分类)、`execution`(确定性/幂等标志)、`update` 策略、`context` 块(v2:技术上下文、输出指导、最佳实践、Context7 库)以及可选的 `icon` URL 用于市场展示。Scope 强制执行在运行时拒绝越界写入
- **自定义模块系统** —— 使用自定义 `.dops v2` 模块扩展 DojOps。将模块放入 `~/.dojops/modules/` 或 `.dojops/modules/`,即可自动对所有命令可用。使用 `dojops modules init ` 脚手架搭建新模块。模块隔离强制执行验证命令白名单(允许 33 个二进制文件)、`child_process` 权限门控以及路径遍历防护
- **更新现有配置** —— 工具自动检测现有配置文件,将其传递给 LLM 并附带“更新/保留”指令,并在覆盖前创建 `.bak` 备份。同时支持自动检测和显式 `existingContent` 输入
- **Schema 验证** —— 每个模块的输入在执行前均通过 Zod schema 验证
- **深度验证** —— 验证默认通过外部验证器(terraform validate、hadolint、kubectl dry-run)在写入文件前运行。缺少的验证工具将通过工具链自动安装。使用 `--skip-verify` 禁用
- **幂等 YAML 输出** —— YAML 键按字母顺序排序(GitHub Actions 使用常规键顺序),以实现确定性、对 diff 友好的输出
- **结构化输出** —— 提供商原生 JSON 模式(OpenAI `response_format`、Anthropic prefill、Ollama `format`、Gemini `responseMimeType`)
### 执行
- **任务规划器** —— LLM 驱动的目标分解,生成具有依赖关系的任务图,并采用拓扑执行(Kahn 算法)
- **风险感知规划** —— 计划根据工具类型和关键词分析(IAM、production、secrets、RBAC)自动分类为 LOW / MEDIUM / HIGH 风险。HIGH 风险计划即使使用 `--yes` 也需要显式确认
- **验证流水线** —— 在生成与执行之间的 `verify()` 步骤,使用外部工具(terraform validate、hadolint、kubectl dry-run)和内置结构 linter(GitHub Actions、GitLab CI)验证输出。默认启用;使用 `--skip-verify` 跳过
- **漂移感知** —— 对有状态工具(Terraform、Kubernetes、Helm、Ansible)进行应用前警告,提醒用户在应用本地配置更改前验证远程状态
- **Git 脏检查** —— 当工作树中存在未提交的更改时,`apply` 会发出警告。使用 `--force` 跳过
- **原子文件写入** —— 所有文件写入采用临时文件 + 重命名的方式以确保崩溃安全(无部分写入)
- **DevOps 写入白名单** —— 默认情况下,仅允许写入 DevOps 文件(CI 配置、Dockerfile、Terraform、K8s manifest 等)。防止 LLM 生成的代码篡改应用程序源码。使用 `--allow-all-paths` 绕过
- **沙箱执行** —— `SandboxedFs` 将文件操作限制在策略允许的路径内,并设有单文件大小限制(默认 1MB)、执行超时(默认 30s)及原子写入。这些防护措施统一适用于内置工具和自定义工具
- **策略引擎** —— `ExecutionPolicy` 控制写入权限、允许/拒绝路径、DevOps 白名单、环境变量、超时、文件大小限制及验证开关
- **审批工作流** —— 在任何写入操作之前,支持自动批准、自动拒绝或带 diff 预览的交互式回调
- **失败恢复** —— `dojops apply --resume` 跳过已完成的任务并重试失败的任务
- **确定性重放** —— `dojops apply --replay` 强制 temperature=0,并验证提供商、模型和自定义工具系统提示是否与计划的执行上下文匹配,以在相同提供商和模型条件下实现确定性执行
- **计划快照冻结** —— 计划在创建时捕获 DojOps 版本、策略哈希和工具版本。版本漂移在应用时检测(正常模式下警告,`--replay` 模式下阻断)
### 可观测性
- **指标仪表盘** —— 概览(计划、成功率、执行时间、关键问题)、安全(严重性分布、发现趋势、主要问题、扫描历史)和审计(链完整性、状态分布、命令分布、时间线)—— 支持 30 秒自动刷新
- **哈希链审计日志** —— 防篡改 JSONL 审计跟踪,通过 `dojops history verify` 进行 SHA-256 链完整性验证。JSONL 格式兼容 SIEM 接入(Splunk、ELK、Datadog)
- **Token 使用分析** —— `dojops tokens` 按提供商和命令跟踪 LLM token 使用情况,提供每日和总计摘要
- **机会检测** —— `dojops insights` 分析项目历史,从效率、安全、质量和成本类别中挖掘可操作的洞察
- **错误模式学习** —— 自动进行错误指纹识别、去重和跨所有命令的出现次数跟踪。重复出现的模式会在 `dojops insights` 中展示
- **项目记忆** —— `dojops memory` 存储持久化的项目笔记,支持基于关键词的搜索和 RAG 风格注入到 LLM 上下文以实现更智能的生成
- **执行锁定** —— 基于 PID 的锁文件防止并发修改,并自动清理过期锁
- **富终端 UI** —— 交互式提示、旋转器、样式化面板、语义化日志级别 —— 由 `@clack/prompts` 驱动
- **Doctor 诊断** —— `dojops doctor` 显示系统健康状况及项目指标摘要(计划、成功率、扫描次数、审计链完整性)。无论项目上下文如何,始终显示已安装的工具
### 平台
- **REST API** —— 21 个端点通过 HTTP 暴露所有功能,具有 Zod 请求验证、API v1 版本控制(`/api/v1/` 前缀及向后兼容的 `/api/` 别名)
- **Web 仪表盘** —— 单页应用,具有深色终端美学风格、5 个标签页(概览、安全、审计、Agent、历史)、Toast 通知、响应式布局
- **指标 API** —— 5 个 GET 端点(`/api/metrics`、`/overview`、`/security`、`/audit`、`/tokens`),由 `MetricsAggregator` 按需读取 `.dojops/` 数据提供支持
- **配置文件** —— 用于在提供商/环境之间切换的命名配置文件
## 架构
```
@dojops/cli CLI entry point + rich TUI (@clack/prompts)
@dojops/api REST API (Express) + web dashboard + factory functions
@dojops/module-registry Module registry + custom module system + custom agent discovery
@dojops/planner TaskGraph decomposition + topological executor
@dojops/executor SafeExecutor: sandbox + policy engine + approval + audit log
@dojops/runtime 13 built-in DevOps modules as .dops v2 files (DopsRuntime)
@dojops/scanner 10 security scanners (npm-audit, pip-audit, trivy, gitleaks, checkov, hadolint,
shellcheck, trivy-sbom, trivy-license, semgrep) + remediation
@dojops/context Context7 documentation augmentation for v2 tools
@dojops/session Chat session management + memory + context injection
@dojops/core LLM abstraction + 6 providers + 17 built-in specialist agents + CI debugger + infra diff + DevOps checker
@dojops/sdk BaseModule abstract class with Zod validation + optional verify() + file-reader utilities
+ atomicWriteFileSync + restoreBackup
```
### 包依赖流
```
cli -> api -> module-registry -> runtime -> core -> sdk
-> planner -> executor
-> scanner
-> context -> core
-> session -> core
```
完整架构详情请参阅 [docs/architecture.md](docs/architecture.md)。
## CLI 参考
### 命令
#### 生成与规划
| 命令 | 描述 |
| -------------------------------- | ----------------------------------------------------------- |
| `dojops ` | 生成 DevOps 配置(默认命令) |
| `dojops generate ` | 显式生成(与默认相同) |
| `dojops plan ` | 将目标分解为依赖感知的任务图 |
| `dojops plan --execute ` | 规划 + 带审批工作流执行 |
| `dojops apply []` | 执行已保存的计划 |
| `dojops apply --skip-verify` | 跳过外部配置验证(默认开启) |
| `dojops apply --resume` | 恢复部分失败的计划 |
| `dojops apply --retry` | 与 `--resume` 配合使用时重试失败任务 |
| `dojops apply --replay` | 确定性重放:temp=0,验证环境匹配 |
| `dojops apply --dry-run` | 预览更改而不写入文件 |
| `dojops apply --force` | 跳过 git 脏检查、HIGH 风险关卡及重放验证 |
| `dojops apply --allow-all-paths` | 绕过 DevOps 文件写入白名单 |
| `doops validate []` | 根据 schema 验证计划 |
| `dojops explain []` | LLM 以通俗语言解释计划 |
#### 诊断与分析
| 命令 | 描述 |
| ---------------------------- | ----------------------------------------------------- |
| `dojops check` | LLM 驱动的 DevOps 配置质量检查(评分 0-100) |
| `dojops check --fix` | 通过 LLM 自动修复 HIGH/CRITICAL 发现 |
| `dojops debug ci ` | 诊断 CI/CD 日志失败(根本原因、修复建议) |
| `dojops analyze diff --file` | 分析基础设施差异(风险、成本、安全) |
| `dojops scan` | 安全扫描:漏洞、依赖、IaC、机密信息 |
| `dojops scan --security` | 仅运行安全扫描器 (trivy, gitleaks) |
| `dojops scan --deps` | 仅运行依赖审计 (npm, pip) |
| `dojops scan --iac` | 仅运行 IaC 扫描器 (checkov, hadolint) |
| `dojops scan --sbom` | 生成带哈希跟踪的 SBOM (CycloneDX) |
| `dojops scan --license` | 运行许可证合规扫描器 (trivy-license) |
| `dojops scan --fix` | 生成并应用 LLM 驱动的修复方案 |
| `dojops scan --compare` | 与之前的扫描报告对比发现 |
| `dojops review [files...]` | DevSecOps 审查:工具验证 + LLM 分析 |
| `dojops review --context7` | 结合 Context7 文档增强进行审查 |
#### 交互式
| 命令 | 描述 |
| ---------------------------- | ------------------------------------------------------ |
| `dojops chat` | 交互式多轮 AI DevOps 会话 |
| `dojops chat --session=NAME` | 恢复或创建命名会话 |
| `dojops chat --resume` | 恢复最近的会话 |
| `dojops chat --agent=NAME` | 将对话固定到专家 Agent |
| `dojops chat --message=TEXT` | 发送单条消息并退出(可脚本化,也可用 `-m`) |
Chat 支持斜杠命令:`/exit`、`/agent `、`/plan `、`/apply`、`/scan`、`/history`、`/clear`、`/save`。
#### Agent 与模块
| 命令 | 描述 |
| --------------------------------- | ---------------------------------------------------------- |
| `dojops agents list` | 列出所有 Agent(内置 + 自定义) |
| `dojops agents info ` | 显示 Agent 详情(支持部分名称匹配) |
| `dojops agents create ` | 创建自定义 Agent(LLM 生成) |
| `dojops agents create --manual` | 交互式创建自定义 Agent |
| `dojops agents remove ` | 移除自定义 Agent |
| `dojops modules list` | 列出已发现的自定义模块(全局 + 项目) |
| `dojops modules validate ` | 验证自定义模块清单 |
| `dojops modules init ` | 脚手架搭建 v2 `.dops` 模块(可选 AI 生成) |
| `dojops modules publish ` | 将 .dops 模块发布到 DojOps Hub |
| `dojops modules install ` | 从 DojOps Hub 安装 .dops 模块 |
| `dojops modules search ` | 在 DojOps Hub 中搜索模块 |
| `dojops toolchain list` | 列出系统工具链二进制文件及安装状态 |
| `dojops toolchain install ` | 将二进制文件下载到工具链 (~/.dojops/toolchain/) |
| `dojops toolchain remove ` | 移除工具链二进制文件 |
| `dojops toolchain clean` | 移除所有工具链二进制文件 |
| `dojops inspect []` | 检查配置和/或会话状态(默认:两者) |
#### 历史与审计
| 命令 | 描述 |
| ------------------------------- | --------------------------------------------------------------------- |
| `dojops history list` | 查看执行历史 |
| `dojops history show ` | 显示计划详情及每任务结果 |
| `dojops history verify` | 验证审计日志哈希链完整性 |
| `dojops history audit` | 列出审计日志条目 |
| `dojops history repair` | 修复断裂的审计日志哈希链 |
| `dojops clean []` | 移除计划产生的生成产物 |
| `dojops rollback ` | 回滚已应用的计划(删除创建的文件 + 恢复 .bak 备份) |
#### 提供商管理
| 命令 | 描述 |
| ------------------------------------------ | ---------------------------------------------- |
| `dojops provider` | 列出所有提供商及状态(别名:`list`) |
| `dojops provider add [--token KEY]` | 添加/配置提供商 token |
| `dojops provider remove ` | 移除提供商 token |
| `dojops provider default ` | 设置默认提供商 |
| `dojops provider switch` | 交互式选择器切换默认提供商 |
| `dojops provider --as-default ` | 设置默认提供商(快捷方式) |
#### 配置与服务器
| 命令 | 描述 |
| ----------------------------------- | ----------------------------------------------------------------------------------------- |
| `dojops config` | 配置提供商、模型、token(交互式) |
| `dojops config show` | 显示当前配置 |
| `dojops config profile create NAME` | 将当前配置保存为命名配置文件 |
| `dojops config profile use NAME` | 切换到命名配置文件 |
| `dojops config profile list` | 列出所有配置文件 |
| `dojops auth login` | 通过 LLM 提供商认证 |
| `dojops auth status` | 显示已保存的 token 和默认提供商 |
| `dojops serve [--port=N]` | 启动 API 服务器 + Web 仪表盘 |
| `dojops serve --no-auth` | 启动不带 API key 认证的服务器(仅限本地开发) |
| `dojops serve --tls-cert --tls-key` | 在 API 服务器上启用 HTTPS/TLS |
| `dojops serve credentials` | 为仪表盘/API 认证生成 API key |
| `dojops init` | 初始化 `.dojops/` + 全面仓库扫描(11 种 CI 平台、IaC、脚本、安全) |
| `dojops tokens` | 显示 LLM token 使用分析(按提供商、每日、总计) |
| `dojops insights [category]` | 从项目历史中挖掘可操作的洞察(`--all` 显示完整列表) |
| `dojops memory list` | 列出持久化项目笔记(`--category` 过滤) |
| `dojops memory add ` | 添加项目笔记(`--category`、`--keywords`) |
| `dojops memory remove ` | 移除项目笔记 |
| `dojops memory search ` | 按关键词搜索笔记 |
| `dojops config backup` | 将当前配置保存为带时间戳的备份 |
| `dojops config restore [file]` | 从备份恢复配置 |
| `dojops config apply ` | 从 YAML/JSON 文件导入配置 |
| `dojops config export ` | 将当前配置导出到文件 |
| `dojops status` | 系统健康诊断 + 项目指标(别名:`doctor`) |
| `dojops upgrade` | 检查并安装 CLI 更新(`--check` 仅检查) |
### 全局选项
| 选项 | 描述 |
| ------------------- | ------------------------------------------------------------------------------------- |
| `--provider=NAME` | LLM 提供商:`openai`、`anthropic`、`ollama`、`deepseek`、`gemini`、`github-copilot` |
| `--model=NAME` | LLM 模型覆盖 |
| `--temperature=N` | LLM 温度(0-2)用于确定性复现 |
| `--profile=NAME` | 使用命名配置文件 |
| `--module=NAME` | 强制指定 `generate`、`plan` 或 `apply` 使用的模块(绕过 Agent 路由) |
| `--file, -f FILE` | 从文件读取提示(`.md`、`.txt`);可与内联提示组合使用 |
| `--output=FORMAT` | 输出格式:`table`(默认)、`json`、`yaml` |
| `--verbose` | 详细输出 |
| `--debug` | 带堆栈跟踪的调试级输出 |
| `--quiet` | 抑制非必要输出 |
| `--no-color` | 禁用彩色输出 |
| `--non-interactive` | 禁用交互式提示 |
| `--yes` | 自动批准所有确认(隐含 `--non-interactive`) |
| `--help, -h` | 显示帮助消息 |
### 退出码
| 代码 | 含义 |
| ---- | ------------------------------------ |
| 0 | 成功 |
| 1 | 一般错误 |
| 2 | 验证错误 |
| 3 | 需要批准 |
| 4 | 锁冲突(并发操作) |
| 5 | 无 `.dojops/` 项目 |
| 6 | 检测到 HIGH 安全风险发现 |
| 7 | 检测到 CRITICAL 安全风险发现 |
### 示例
```
# 生成 config
dojops "Create a Terraform config for S3"
dojops "Write a Kubernetes deployment for nginx"
dojops "Set up monitoring with Prometheus"
# 更新现有 config (自动检测现有文件,创建 .bak 备份)
dojops "Add caching to the GitHub Actions workflow"
dojops "Add a Redis service to docker-compose"
dojops "Add S3 bucket to the existing Terraform config"
# 从文件读取 prompt
dojops --file requirements.md
dojops --file spec.txt "Use Terraform" # inline prompt + file content
dojops plan -f infrastructure-spec.md
# 规划并执行
dojops plan "Set up CI/CD for a Node.js app"
dojops plan --execute --yes "Create CI for Node app"
dojops apply --skip-verify # skip external validation (on by default)
dojops apply --dry-run
dojops apply --resume --yes
dojops apply --replay # Deterministic replay (temp=0, validate env)
# 诊断和分析
dojops debug ci "ERROR: tsc failed with exit code 1..."
dojops analyze diff --file plan.diff
dojops explain last
# DevOps 质量检查
dojops check
dojops check --output json
# 安全扫描
dojops scan
dojops scan --security
dojops scan --fix --yes
dojops scan --compare
# 交互式聊天
dojops chat
dojops chat --session myproject --agent terraform
# Toolchain 管理 (系统二进制文件)
dojops toolchain install terraform
dojops toolchain install kubectl
# 自定义 module 管理
dojops modules list
dojops modules init my-module # .dops scaffold (AI-powered when provider is configured)
dojops modules validate my-module
# 在 DojOps Hub 中搜索 module
dojops modules search docker
dojops modules search terraform --limit 5
dojops modules search k8s --output json
# 从 DojOps Hub (https://hub.dojops.ai) 发布并安装 module
dojops modules publish my-module.dops --changelog "Initial release"
dojops modules install nginx-config
dojops modules install nginx-config --version 1.0.0 --global
# 强制指定 module (绕过 agent 路由)
dojops --module=terraform "Create an S3 bucket with versioning"
dojops --module=kubernetes "Create a deployment for nginx"
dojops --module=terraform plan "Set up S3 with CloudFront"
# 自定义 agent
dojops agents create "an SRE specialist for incident response"
dojops agents create --manual
dojops agents list
dojops agents info sre # partial name match
dojops agents remove sre-specialist
# Provider 管理
dojops provider # List all providers
dojops provider add openai --token sk-... # Add a provider
dojops provider add anthropic --token sk-ant-... # Add another
dojops provider switch # Interactive picker
dojops provider default anthropic # Set default directly
# 管理
dojops doctor
dojops history list
dojops history verify
dojops serve --port=8080
dojops config profile create staging
```
## 安全与合规
DojOps 为 AI 驱动的基础设施变更实施了深度防御策略:
| 层级 | 机制 |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **输出强制** | 所有 LLM 响应通过提供商原生模式约束为 JSON schema |
| **工具隔离** | 验证命令白名单(33 个二进制文件)、`child_process` 权限强制执行、路径遍历防护 |
| **Schema 验证** | 每个工具输入和 LLM 输出在执行前均根据 Zod schema 验证 |
| **深度验证** | 默认进行外部工具验证:`terraform validate`、`hadolint`、`kubectl --dry-run=client` —— 在文件写入前。`--skip-verify` 可禁用 |
| **策略引擎** | `ExecutionPolicy` 控制写入权限、允许/拒绝路径、环境变量、超时、文件大小限制 |
| **审批工作流** | 可配置处理器:自动批准、自动拒绝或带 diff 预览的交互式回调 |
| **沙箱执行** | `SandboxedFs` 将文件操作限制在策略允许的路径内,具有原子写入和审计日志 |
| **加密保管库** | 用于 API token 的 AES-256-GCM 加密机密保管库,采用 scrypt 密钥派生。取代明文 token 存储 |
| **审计跟踪** | 仅追加 JSONL,采用 SHA-256 哈希链(seq + previousHash + hash)。通过 `dojops history verify` 进行篡改检测 |
| **执行锁定** | 基于 PID 的锁文件防止并发修改,并自动清理过期锁 |
## 工具
| 工具 | 序列化 | 输出文件 | 验证器 |
| -------------- | ------------------ | ----------------------------------- | -------------------- |
| GitHub Actions | YAML | `.github/workflows/ci.yml` | --- |
| Terraform | HCL | `main.tf`, `variables.tf` | `terraform validate` |
| Kubernetes | YAML | K8s manifest | `kubectl --dry-run` |
| Helm | YAML | `Chart.yaml`, `values.yaml | `helm lint` |
| Ansible | YAML | `{name}.yml` | `ansible-playbook` |
| Docker Compose | YAML | `docker-compose.yml` | --- |
| Dockerfile | Dockerfile 语法 | `Dockerfile`, `.dockerignore` | `hadolint` |
| Nginx | Nginx 配置 | `nginx.conf` | --- |
| Makefile | Make 语法 (制表符) | `Makefile` | --- |
| GitLab CI | YAML | `.gitlab-ci.yml` | --- |
| Prometheus | YAML | `prometheus.yml`, `alert-rules.yml` | --- |
| Systemd | INI | `{name}.service` | --- |
| Jenkinsfile | Groovy DSL | `Jenkinsfile` | --- |
所有 13 个内置模块均为 `packages/runtime/modules/` 中的 `.dops v2` 文件,由 `DopsRuntime` 处理 —— 直接通过 LLM 生成原始文件内容。模块自动检测并更新现有配置文件,同时创建 `.bak` 备份。所有文件写入均为原子操作(临时文件 + 重命名)。
## 专家 Agent
DojOps 包含 17 个内置 Agent,并支持用户自定义 Agent。自定义 Agent 通过 `dojops agents create` 创建,并以 markdown README 文件形式存储 —— 无需修改源代码。
| Agent | 领域 | 关键能力 |
| ------------------------ | ----------------------- | -------------------------------------------------------------------- |
| ops-cortex | 编排 | 任务分解、跨领域路由、依赖排序 |
| terraform-specialist | 基础设施 | HCL、模块、状态管理、工作空间、成本优化 |
| kubernetes-specialist | 容器编排 | Deployment、Helm、RBAC、自动扩缩容、服务网格 |
| cicd-specialist | CI/CD | GitHub Actions、GitLab CI、Jenkins、构建优化、流水线 |
| security-auditor | 安全 | 漏洞扫描、机密管理、IAM、威胁建模 |
| observability-specialist | 可观测性 | Prometheus、Grafana、Datadog、追踪、SLO、告警 |
| docker-specialist | 容器化 | 多阶段构建、镜像优化、镜像仓库、BuildKit |
| cloud-architect | 云架构 | AWS/GCP/Azure 设计、成本优化、迁移策略 |
| network-specialist | 网络 | DNS、负载均衡器、VPN、CDN、服务网格、防火墙规则 |
| database-specialist | 数据存储 | PostgreSQL、MySQL、Redis、DynamoDB、复制、备份 |
| gitops-specialist | GitOps | ArgoCD、Flux、漂移检测、Sealed Secrets、渐进式交付 |
| compliance-auditor | 合规 | SOC2、HIPAA、PCI-DSS、GDPR、策略即代码 (OPA/Rego) |
| ci-debugger | CI 调试 | 日志分析、根因诊断、不稳定测试检测 |
| appsec-specialist | 应用安全 | OWASP Top 10、SAST/DAST、代码审查、渗透测试方法论 |
| shell-specialist | Shell 脚本 | Bash/POSIX、ShellCheck、错误处理、自动化 |
| python-specialist | Python 脚本 | 类型提示、pytest、poetry、async、CLI 工具 |
| devsecops-reviewer | DevOps 审查 | 配置审查、版本验证、废弃语法、安全审计 |
## API 参考
### 端点
| 方法 | 路径 | 描述 |
| -------- | ------------------------ | ---------------------------------------------------- |
| `GET` | `/api/health` | 提供商信息、工具列表、metricsEnabled 标志 |
| `POST` | `/api/generate` | Agent 路由的 LLM 生成 |
| `POST` | `/api/plan` | 将目标分解为任务图 |
| `POST` | `/api/debug-ci` | 诊断 CI 日志失败 |
| `POST` | `/api/diff` | 分析基础设施差异 |
| `POST` | `/api/scan` | 运行安全扫描 (all, security, deps, iac, sbom) |
| `POST` | `/api/review` | DevSecOps 审查:工具验证 + LLM 分析 |
| `POST` | `/api/chat` | 向会话发送聊天消息 |
| `POST` | `/api/chat/sessions` | 创建新聊天会话 |
| `GET` | `/api/chat/sessions` | 列出所有聊天会话 |
| `GET` | `/api/chat/sessions/:id` | 按 ID 获取聊天会话 |
| `DELETE` | `/api/chat/sessions/:id` | 删除聊天会话 |
| `GET` | `/api/agents` | 列出专家 Agent |
| `GET` | `/api/history` | 执行历史 |
| `GET` | `/api/history/:id` | 单条历史记录 |
| `DELETE` | `/api/history` | 清除历史 |
| `GET` | `/api/metrics` | 完整仪表盘指标(概览 + 安全 + 审计) |
| `GET` | `/api/metrics/overview` | 计划/执行/扫描聚合 |
| `GET` | `/api/metrics/security` | 扫描发现、严重性趋势、主要问题 |
| `GET` | `/api/metrics/audit` | 审计链完整性、命令分布 |
| `GET` | `/api/metrics/tokens` | LLM token 使用跟踪 |
### 示例
```
# 生成 config
curl -X POST http://localhost:3000/api/generate \
-H "Content-Type: application/json" \
-d '{"prompt": "Create a Kubernetes deployment for nginx", "temperature": 0.7}'
# 分解 plan
curl -X POST http://localhost:3000/api/plan \
-H "Content-Type: application/json" \
-d '{"goal": "Set up CI/CD for a Node.js app", "execute": false}'
# 调试 CI 日志
curl -X POST http://localhost:3000/api/debug-ci \
-H "Content-Type: application/json" \
-d '{"log": "ERROR: npm ERR! ERESOLVE unable to resolve dependency tree"}'
# 分析 infrastructure 差异
curl -X POST http://localhost:3000/api/diff \
-H "Content-Type: application/json" \
-d '{"diff": "+ resource \"aws_s3_bucket\" \"main\" { bucket = \"my-bucket\" }"}'
```
## 配置
### 支持的提供商
| 提供商 | `DOJOPS_PROVIDER` | 必需环境变量 | 默认模型 |
| -------------- | ----------------- | --------------------- | ---------------------------- |
| OpenAI | `openai` | `OPENAI_API_KEY` | `gpt-4o-mini` |
| Anthropic | `anthropic` | `ANTHROPIC_API_KEY` | `claude-sonnet-4-5-20250929` |
| Ollama | `ollama` | _(无 --- 本地)_ | `llama3` |
| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek-chat` |
| Gemini | `gemini` | `GEMINI_API_KEY` | `gemini-2.5-flash` |
| GitHub Copilot | `github-copilot` | _(OAuth 设备流程)_ | `gpt-4o` |
### 模型选择
每个提供商都有合理的默认配置,但您可以选择提供商支持的任何模型:
```
dojops config # Interactive: fetches models, shows picker
dojops config --model=gpt-4o # Set directly
dojops --model=deepseek-reasoner "..." # One-off override
```
### 配置优先级
```
Provider: --provider > $DOJOPS_PROVIDER > config > openai
Model: --model > $DOJOPS_MODEL > config > provider default
Temperature: --temperature > $DOJOPS_TEMPERATURE > config > undefined (provider default)
Token: $OPENAI_API_KEY / $ANTHROPIC_API_KEY / ... > config token
```
### 配置文件
```
dojops config profile create staging # Save current config as "staging"
dojops config profile use staging # Switch to staging profile
dojops config profile list # List all profiles
dojops --profile=staging "Create S3..." # One-off profile override
```
## 开发
### 前置条件
- **Node.js** >= 20
- **pnpm** >= 8
- **TypeScript** >= 5.4
### 设置
```
git clone https://github.com/dojops/dojops.git
cd dojops
pnpm install
pnpm build
```
### 命令
```
pnpm build # Build all packages via Turbo
pnpm dev # Dev mode (no caching)
pnpm test # Run all 2649 tests
pnpm lint # ESLint across all packages
pnpm format # Prettier write
pnpm format:check # Prettier check (CI)
# 按 package
pnpm --filter @dojops/core test
pnpm --filter @dojops/api build
pnpm --filter @dojops/runtime lint
# 本地运行 (无全局安装)
pnpm dojops -- "Create a Terraform config for S3"
pnpm dojops -- serve --port=8080
```
### 项目结构
```
packages/
cli/ CLI entry point + TUI (@clack/prompts)
api/ REST API (Express) + web dashboard
module-registry/ Module registry + custom module system + custom agent discovery
core/ LLM providers (6) + specialist agents (17 built-in) + CI debugger + infra diff + DevOps checker
planner/ Task graph decomposition + topological executor
executor/ SafeExecutor + policy engine + approval workflows + audit log
runtime/ 13 built-in DevOps modules as .dops v2 files (DopsRuntime)
scanner/ 10 security scanners + LLM-powered remediation
context/ Context7 documentation augmentation for v2 tools
session/ Chat session management + memory + context injection
sdk/ BaseModule abstract class + Zod re-export + verification types + file-reader utilities
```
### 测试覆盖率
| 包 | 测试数 |
| ------------------------- | -------- |
| `@dojops/runtime` | 656 |
| `@dojops/cli` | 575 |
| `@dojops/core` | 541 |
| `@dojops/module-registry` | 277 |
| `@dojops/api` | 244 |
| `@dojops/scanner` | 110 |
| `@dojops/executor` | 81 |
| `@dojops/sdk` | 55 |
| `@dojops/planner` | 40 |
| `@dojops/session` | 38 |
| `@dojops/context` | 32 |
| **总计** | **2649** |
## 发布
所有包均在 `@dojops` 作用域下发布:
```
npm login
pnpm publish-packages # Build + publish in dependency order
```
发布顺序:`sdk` -> `core` -> `context` -> `executor` -> `planner` -> `runtime` -> `module-registry` -> `scanner` -> `session` -> `api` -> `cli`
## 隐私与遥测
DojOps 不收集遥测数据。除了向您配置的 LLM 提供商发送请求外,没有任何项目数据离开您的机器。所有生成的配置、审计日志和扫描报告均存储在您本地的 `.dojops/` 目录中。
## 贡献
欢迎贡献!请参阅 [贡献指南](docs/contributing.md) 了解开发设置、编码规范以及如何添加新工具和 Agent。系统设计模式请参阅 [docs/architecture.md](docs/architecture.md)。
1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/my-feature`)
3. 进行更改并编写测试
4. 运行 `pnpm test && pnpm lint` 进行验证
5. 提交 Pull Request
## 许可证
[MIT](LICENSE)标签:DLL 劫持, EC2, GNU通用公共许可证, IaC, LLM, MITM代理, Node.js, TypeScript, Unmanaged PE, 人工智能, 人工智能安全, 代码生成, 仪表盘, 企业级, 动态调试, 合规性, 大语言模型, 安全审批, 安全插件, 审计日志, 工作流自动化, 渗透测试工具, 用户模式Hook绕过, 自动化引擎, 自动化攻击, 请求拦截