pi-devops-tools

内容来源:README.md(说明文档) · 原始地址 · 查看安装指南

原始内容

pi-devops-tools

pi 的数据库工作区扩展 — 在终端里查询 MySQL 数据库、管理表关系。

功能

  • /db 命令 — 交互式数据库工作区,支持多个子命令
  • SQL 查询 — 只读查询(SELECT、SHOW、DESCRIBE、EXPLAIN),结果自动格式化;无 LIMIT 的 SELECT 自动封顶(默认 100,可按连接配置)
  • AI 写操作db_mutate 工具支持 INSERT/UPDATE/DELETE/REPLACE,每次需人工在 TUI 弹窗中确认
  • 实时表结构 — 直接查询 information_schema,始终最新
  • 查询历史 — 所有查询本地记录,支持关键词搜索
  • 收藏查询 — 保存常用 SQL 模板,一键执行
  • 表关系图 — 注册外键关系,BFS 自动联表查询
  • 跨库查询 — 同一 MySQL 实例上的库可直接 db.table JOIN,无需切换
  • 状态栏 — 在 pi 底部状态栏显示当前数据库上下文
  • 状态持久化 — 工作区状态跨会话保持

安装

Node.js 环境

pi 扩展运行需要 Node.js ≥ 20。如果你的 pi 尚未安装 Node.js 运行环境,pi 会在首次使用时提示安装。

验证:

pi node -- --version   # 应输出 v20.x 或更高

安装扩展

从 npm 安装(推荐):

pi install npm:pi-devops-tools

从 GitHub 安装:

pi install git:github.com/zavier/pi-devops-tools

本地开发

git clone git@github.com:zavier/pi-devops-tools.git
pi install ./pi-devops-tools

配置

~/.pi/database/connections.yaml 中配置数据库连接(用户级全局配置,跨项目共享):

connections:
  prod-readonly:
    environment: prod
    type: mysql
    host: db-prod.internal
    port: 3306
    username: readonly
    password: ${DB_PASSWORD}
    defaultDatabase: app_db
    queryLimit: 50
  staging:
    environment: staging
    type: mysql
    host: 127.0.0.1
    port: 3307
    username: root
    password: ${STAGING_DB_PASSWORD}
  • environmenttypehost 必填;type 目前仅支持 mysql
  • port 默认 3306username 默认 root
  • password 支持 ${环境变量} 替换
  • defaultDatabase 可选 — 首次 /db switch 到该连接时自动选用
  • queryLimit 可选 — 无 LIMIT 的 SELECT 自动追加的行数上限(默认 100
  • /db switchenvironment 分组展示连接

命令

/db

显示工作区面板,查看当前连接状态、可用连接和子命令。

/db

/db add

交互式 wizard 添加新数据库连接:选择环境 → 连接名 → host/port → 用户名/密码 → 默认数据库。 写入 connections.yaml 后自动 hot-reload,无需重启。

/db add

/db switch

交互式流程:选择环境 → 选择连接 → 选择数据库。

/db switch

/db tables

列出当前数据库中的所有表。

/db tables

/db schema [表名]

查看表结构(列、索引)。结果以 markdown 表格形式渲染并持久展示在聊天中。不带参数时显示可搜索的表列表。

/db schema users

/db query [表名|SQL]

查询数据。三种方式:

/db query                       → 交互选择:选表 + WHERE,或输入完整 SQL
/db query users                 → 选表模式(已知表名),输入 WHERE 条件
/db query SELECT * FROM users WHERE status = 'active'  → 直接执行 SQL

参数是表名还是 SQL 由框架自动判断 — 命中已知表名走选表模式,以 SELECT/SHOW/DESCRIBE/EXPLAIN 开头则直接执行。

结果根据终端宽度自适应选择最佳展示格式(水平表格 → 转置 → 垂直键值对),ctrl+o 可展开查看全部行。

全 NULL 列、值全相同的列会被折叠并给出摘要提示。

/db history [关键词]

搜索查询历史。不带关键词显示最近 20 条记录。

/db history
/db history users

/db favorite

管理收藏的 SQL 模板。不带参数列出当前数据库的收藏,支持直接执行、编辑后执行或删除。

/db favorite              → 列出当前数据库收藏
/db favorite add          → 交互式添加收藏(名称 + SQL + 描述)
/db favorite add <名称> <SQL>   → 直接添加,省略交互

收藏按数据库分组(全局收藏对所有数据库可见)。

/db relations

管理表关联关系。不带参数列出已注册的关系。

/db relations             → 列出关系,选择后可删除
/db relations add         → 交互式注册关系:选源表 → 源列 → 目标表 → 目标列 → 类型
/db relations remove      → 选择删除已注册的关系
/db relations discover    → 从 MySQL 外键约束自动发现并导入(可选 AI 分析补充)
/db relations er-diagram [表名]   → 以该表为中心生成 mermaid ER 图

注册关系后,AI 会通过 db_register_relation 工具辅助完成 discover → 分析 → 注册的工作流。

LLM 工具

扩展注册了 7 个工具(6 个只读 + 1 个写操作),AI 可以直接调用而无需用户输入 /db 命令:

工具名 类型 描述
db_query 只读 执行只读 SQL 查询(与 /db query 相同的安全限制)
db_list_databases 只读 列出已配置的连接及数据库 — 用于发现可用的连接/库名
db_list_tables 只读 列出指定数据库的所有表(实时查询)
db_table_schema 只读 查看指定表的结构(列、索引)
db_list_relations 只读 列出已注册的表关系 — AI 可用于自行编写 JOIN
db_register_relation 只读 注册表关联关系(discover → AI 分析 → 注册闭环)
db_mutate 执行 INSERT/UPDATE/DELETE/REPLACE,每次弹出确认弹窗需人工批准

只读工具遵循与用户命令相同的只读保护:只能执行 SELECT/SHOW/DESCRIBE/EXPLAIN,DELETE/DROP/UPDATE 等写操作会被拒绝。db_querydb_list_tablesdb_table_schema 支持可选的 connection/database 参数以跨库/跨连接查询。

db_mutate 用于数据修改:DDL(CREATE/DROP/ALTER/TRUNCATE)被硬性拒绝,UPDATE/DELETE 无 WHERE 时会显示警告。每次调用弹出 overlay 确认弹窗(Enter 确认 / Esc 取消),不可跳过。

数据存储

所有状态存储在 ~/.pi/database/ 下:

文件 用途
workspace.json 当前环境/数据库选择
state.db 查询历史、收藏、表关系的 SQLite 存储
connections.yaml 连接定义

环境要求

  • Node.js ≥ 20
  • pi ≥ 0.80
  • better-sqlite3(自动安装)
  • mysql2(自动安装)

License

MIT