@yejiming/dsh-data-agent 0.0.6 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,191 +1,187 @@
1
- # 数据Agent(Data Agent)· AI 帮你连数据库、写 SQL
1
+ # DSH Data Agent · 用对话分析数据
2
2
 
3
- [English](README.en.md) | **中文**
3
+ **中文** | [English](README.en.md)
4
4
 
5
- ![数据模式会话](assets/session.png)
5
+ <p align="center">
6
+ <img src="assets/dsh-data-agent-banner.png" alt="dsh-data-agent HERO图" width="100%">
7
+ </p>
8
+ <p align="center">
9
+ <img src="https://img.shields.io/github/v/release/omdsh-dev/dsh-data-agent?style=flat-square" alt="Version">
10
+ &nbsp;
11
+ <img src="https://img.shields.io/github/stars/omdsh-dev/dsh-data-agent?style=flat-square" alt="Stars">
12
+ &nbsp;
13
+ <img src="https://img.shields.io/npm/v/@yejiming%2Fdsh-data-agent?style=flat-square&label=npm" alt="npm">
14
+ &nbsp;
15
+ <img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License">
16
+ </p>
17
+ <p align="center">
18
+ <strong>让DeepSeek Harness连接数据库,用对话完成数据分析与商业洞察</strong><br>
19
+ <em>自然语言查询 · 自动执行SQL · 连续分析 · Web UI · dsh-tui · 只读保护</em>
20
+ </p>
6
21
 
7
- 用AI写过SQL的同学都有这种体验,AI现在写代码能力已经很强了,但SQL逻辑老写不对。**原因是AI并没有与数据库操作形成Agent Loop**,它只能根据静态指令生成SQL,却无法感知执行结果、无法根据报错或返回数据动态调优。
22
+ <p align="center">
8
23
 
9
- 这个插件就是来填这个坑的。它复用DeepSeek Harness强大的Agent主循环能力,让AI连上数据库并获得实时反馈,同时删掉所有跟数据无关的上下文和工具,让AI专注于SQL生成和业务数据分析。
24
+ [项目简介](#项目简介) · [主要功能](#主要功能) · [快速安装](#快速安装) · [Web UI](#在web-ui中使用) · [dsh-tui](#在dsh-tui中使用) · [安全说明](#安全说明)
10
25
 
11
- 我利用DeepSeek Harness的Agent预设功能,定义了专用的数据模式预设。仅保留read、edit、write三个DSH自带的 tools,并自定义 sql-query / sql-write / sqlcmd 三个数据库 tools 替代 bash tool。
26
+ </p>
12
27
 
13
- 懂行的朋友一眼就能看出,这是借鉴了Pi Agent的设计,只使用最基本的工具。
28
+ ## 项目简介
14
29
 
15
- 用起来也很简单:在对话界面配好数据库连接,授权AI访问权限,然后就可以向AI提问,让AI帮你查询、更新、分析。
30
+ dsh-data-agent是DeepSeek Harness(DSH)的数据分析插件。连接数据库后,直接提出业务问题,DSH会自动查看库表、编写并执行SQL、根据真实结果继续分析,最终给出清晰的数据结论和商业洞察。插件同时支持Web UI与dsh-tui,无需修改DSH源码。
16
31
 
17
32
  ## 主要功能
18
33
 
19
- - **数据库连接管理**:按会话连接 MySQL / PostgreSQL / SQLite / Oracle / Hive / Impala(SQLite 走文件路径,Oracle 填服务名/SID,Hive/Impala 填默认库),连接状态驻留服务端内存,布局切换不丢;密码仅内存、经环境变量或 stdin 连接前缀传给客户端,绝不落盘。
34
+ - **通过对话完成数据分析**:直接用自然语言描述目标,DSH会理解问题、拆解分析步骤、查询真实数据并整理结论。你可以继续追问,分析会沿着当前上下文逐步深入。
35
+ - **自动寻找商业洞察**:不仅返回查询结果,还能帮助比较趋势、定位异常、识别高价值客户或商品,并把数据转化为便于业务决策的说明。
36
+ - **Web 分析报告(render-analysis)**:Web 界面中 Agent 可在普通工具调用里自主生成单图或 Dashboard 式综合分析报告(metric/line/bar/pie/scatter/table 视图),结果行提供内联预览与「查看分析」Modal;是否画图由 Agent 按问题判断,schema 探查、单标量等查询不会被强制生成图表。
37
+ - **完整兼容Web UI与dsh-tui**:喜欢可视化操作时,可以在Web界面连接数据库、浏览库表和查看结果,推荐使用[zhu1090093659/dsh-web-ui](https://github.com/zhu1090093659/dsh-web-ui);习惯键盘工作流时,可以在终端中使用同一“数据模式”,通过`/database`完成连接,然后直接开始对话分析,推荐使用[ccch1mneyyy/dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI)。两种界面都能使用数据Agent的核心能力。
38
+ - **连接常见业务数据库**:支持MySQL、PostgreSQL、SQLite、Oracle、Hive和Impala,可用于业务系统、分析库、本地数据文件及数仓场景。
39
+ - **DSH自动完成分析闭环**:DSH会根据当前问题查看表结构、编写SQL、执行查询,并结合报错或返回结果继续调整,而不是只生成一段未经验证的SQL。
40
+ - **专注数据任务的数据模式**:会话使用DSH原生`str_replace_editor`处理文件,并保留`sql-query`、`sql-write`、`sql-cmd`;Web额外提供`render-analysis`。`describe_image`、`ssh_*`等宿主或社区插件工具不会进入数据模式。
41
+ - **安全地使用真实数据**:支持只读模式和数据库只读账号;TUI密码会被隐藏,且不会作为表单草稿恢复。是否允许修改数据由你决定。
20
42
 
21
- ![数据库连接](assets/connection.png)
22
- - **数据库工作台**(内嵌于会话输入框上方):连接配置卡(连接成功后折叠为摘要行,可展开查看);库表浏览(点击「库表」按钮弹出 Modal:单击库展开表列表(可滚动),点击表查看结构);SQL 命令框(编辑并运行 SQL,非 agent 通道,结果等宽展示)。连接配置持久化到浏览器 localStorage,切换页面/重启自动回填并重连。开始对话后工作台自动变为左侧栏,对话记录与输入框在右侧。
43
+ ![数据库连接](assets/connection.png)
23
44
 
24
- ![数据库工作台](assets/tables.png)
25
- - **数据库 tools**:`sql-query` 执行只读 SQL 并返回结构化 `{ columns, rows, affectedRows, elapsedMs }`;`sql-write` 执行写/管理 SQL(单条自动提交,写语义明确);`sqlcmd` 保留原始终端输出。三者均在数据库客户端(mysql / psql / sqlite3 / sqlplus / beeline / impala-shell)执行;无 shell 层(argv 数组化 + SQL 走 stdin),超时自动终止进程树,输出有界截断,单次调用只允许一条 SQL。
26
- - **数据模式 预设**:新建会话可选「数据模式」——工具面为 `sql-query`/`sql-write`/`sqlcmd`/`read`/`write`/`edit`,项目其他工具(bash、grep、skill、todo、goal、web、subagent 等)全部缺席即禁用;非数据模式会话不渲染工作台,零影响。
45
+ Web UI还提供内嵌数据库工作台,可以浏览库表、查看字段结构,或临时运行SQL。开始对话后,工作台会自动移到侧栏,不打断分析过程。
27
46
 
28
- ![数据模式 预设](assets/settings.png)
29
- - **标准 agent loop**:data-agent 会话就是普通 DSH 会话,走标准 turn/step、流式输出、工具调度与持久化,零宿主改动。
47
+ ![数据库工作台](assets/tables.png)
48
+
49
+ 创建会话时选择“数据模式”,DSH就会以数据分析工作流处理后续问题。
50
+
51
+ ![数据模式预设](assets/settings.png)
30
52
 
31
53
  ## 快速安装
32
54
 
33
- 支持两种安装方式,均**无需本地构建**(构建产物 `lib/` 已提交进仓库,且不设
34
- `prepare`/`prepack` 脚本)。
55
+ Web UI和dsh-tui使用独立的DSH profile。只使用其中一种界面时,安装对应的一项;两个界面都使用时,请执行两条命令。
35
56
 
36
- ### 方式一:npm 安装(推荐)
57
+ ### 方式一:npm安装(推荐)
37
58
 
38
59
  ```sh
39
- # 从 npm 安装(首次使用会初始化该 profile)
40
60
  dsh plugin --profile web add @yejiming/dsh-data-agent
61
+ dsh plugin --profile dsh-tui add @yejiming/dsh-data-agent
41
62
  ```
42
63
 
43
- ### 方式二:GitHub 源码安装
64
+ ### 方式二:从GitHub安装
44
65
 
45
66
  ```sh
46
- # 从 GitHub 源码安装(仓库已提交构建产物 lib/,安装时无需构建)
47
67
  dsh plugin --profile web add github:omdsh-dev/dsh-data-agent
68
+ dsh plugin --profile dsh-tui add github:omdsh-dev/dsh-data-agent
48
69
  ```
49
70
 
50
- 安装后验证:
71
+ 插件会自动安装“数据模式”预设,无需本地构建。
51
72
 
52
- ```sh
53
- dsh --profile web --dump-config # 输出中应出现 data-agent 层
54
- ls $DSH_HOME/.agent-presets/data-agent/ # 应有 agent.cordis.yml + preset.yml(由插件自动安装)
55
- ```
73
+ ## 在Web UI中使用
56
74
 
57
- 启动 Web GUI
75
+ 启动Web UI
58
76
 
59
77
  ```sh
60
78
  dsh --profile web
61
79
  ```
62
80
 
63
- 在 Web GUI 中:新建会话 → 选择「数据模式」预设 → 输入框上方出现数据库工作台 → 填写连接信息(类型/主机/端口/用户/密码/库名;SQLite 填文件路径)→ 连接成功后浏览库表(单击库展开表、点击表看结构),或在 SQL 命令框直接运行 SQL → 开始对话后工作台移到左侧,在 Chat 让 AI「列出所有表并统计行数」或「写一条 SQL 查出近 30 天订单,保存到 orders.sql 并执行」。
81
+ 然后按下面的步骤操作:
82
+
83
+ 1. 新建会话并选择“数据模式”。
84
+ 2. 在数据库工作台填写连接信息。
85
+ 3. 连接成功后,直接在对话框中提出分析问题。
86
+ 4. 根据第一轮结果继续追问,让DSH缩小范围、比较维度或总结结论。
87
+
88
+ 例如,输入“分析最近30天订单变化,找出销售额下降最明显的地区和商品,并解释主要原因”,DSH会自行查看相关表、生成并执行查询,再根据真实结果完成分析。
89
+
90
+ ### Web 分析报告
64
91
 
65
- > 数据库客户端二进制要求:sqlite3 一般系统自带(macOS/Linux);mysql / psql / sqlplus / beeline / impala-shell 需部署方安装,且可在插件配置 `clients` 中覆盖命令名或绝对路径(缺失时连接报错会点名缺失的命令)。
92
+ Web UI 中,数据模式还提供 render-analysis 工具:Agent 会先用 sql-query 探查并核对事实,再自行判断可视化是否有帮助。判断需要画图时,一次工具调用会生成一份版本化分析报告:
93
+
94
+ - 报告包含 1-6 个只读数据集与 1-8 个视图(metric、line、bar、pie、scatter、table),同一数据集可被多个视图复用,聚合与 Top N 都写在 SQL 中;
95
+ - 简单问题生成单个主图(结果行内联预览),复杂问题生成紧凑摘要 + 「查看分析」按钮;
96
+ - 「查看分析」在大型 Modal 中展示本次报告的全部视图:紧凑指标带、全宽主图、双列辅助图与明细表,浅色/深色主题与窄屏单列自适应;
97
+ - 完整报告快照随会话日志持久化:刷新或历史回放不重新查询数据库,也不产生新的浏览器存储;
98
+ - 仅 Web 提供该工具;dsh-tui 的工具面保持不变,也不会加载图表或浏览器依赖。
99
+
100
+ ## 在dsh-tui中使用
101
+
102
+ 启动终端界面:
103
+
104
+ ```sh
105
+ dsh --profile dsh-tui
106
+ ```
66
107
 
67
- ## 架构
108
+ 在空白会话中切换到数据模式,然后连接数据库:
68
109
 
69
110
  ```text
70
- 浏览器 (apps/web) 宿主进程 (dsh --profile web)
71
- ┌─────────────────────────────┐ ┌──────────────────────────────────────┐
72
- │ 数据库工作台 (input.dock) │ fetch │ @yejiming/dsh-data-agent (宿主行) │
73
- │ · 连接配置 (6 类型) │ ───────▶ │ · /plugins/data-agent/* 路由 │
74
- │ · 库表浏览 + SQL 命令框 │ │ · 连接存储服务 dataAgentConnections │
75
- │ · hero 堆叠 / active 左栏 │ │ · 预设自安装 → $DSH_HOME/.agent-presets│
76
- └─────────────────────────────┘ └──────────────┬───────────────────────┘
77
- │ 同一进程
78
- data-agent 会话 (agent loop 全复用) ▼
79
- ┌──────────────────────────────────────────────────────────────────────────┐
80
- │ agent.cordis.yml (预设层,仅 3 行) │
81
- │ · persona → 数据工程师系统提示词 │
82
- │ · dsh-tool-fs → read / write / edit(项目自带) │
83
- │ · dsh-data-agent/tool → sql-query / sql-write / sqlcmd(本包工具半体) │
84
- └──────────────────────────────────────────────────────────────────────────┘
111
+ /preset data-agent
112
+ /database connect
85
113
  ```
86
114
 
87
- 一个 npm 包三个装载面、宿主两条行:
88
-
89
- | 面 | 入口 | 装载位置 |
90
- |---|---|---|
91
- | 服务端半体(连接存储/预设自安装) | `lib/index.js`(宿主行 `data-agent`) | 宿主组合:提供 `dataAgentConnections` 服务、预置连接、自安装预设;headless 也可用 |
92
- | 服务端半体(HTTP 路由) | `lib/routes.js`(宿主行 `data-agent-routes`,exports 子路径 `./routes`) | 宿主组合:仅在 webserver 存在时经嵌套 inject 注册路由(headless 无 webserver 时自动跳过) |
93
- | 工具半体 | `lib/tool.js`(exports 子路径 `./tool`) | 仅 data-agent 预设装载(`tool-sqlcmd` 行) |
94
- | 浏览器半体 | `lib/client.js`(package.json `dsh.client` 声明) | 浏览器:输入条带内嵌数据库工作台(`conversation.input.dock`) |
95
-
96
- 工具半体只消费宿主服务(`tools`、`subprocess`、`dataAgentConnections`),不提供服务,因此预设守卫无需 `isolate` realm。
97
-
98
- ## 配置
99
-
100
- 所有字段都有 loader 默认值;无库级默认值。宿主行 `data-agent`:
101
-
102
- | 键 | 说明 |
103
- |---|---|
104
- | `presetId` | 自安装的预设目录名(默认 `data-agent`) |
105
- | `installPreset` | 是否在启动时自安装预设(默认 true;已存在则跳过,保留用户编辑) |
106
- | `connectTimeoutMs` | /connect 连通性检查的端到端超时(默认 10000 毫秒) |
107
- | `introspectMaxTables` | 表清单上限(默认 500) |
108
- | `queryTimeoutMs` | 数据库 tools 单次查询超时(默认 30000 毫秒) |
109
- | `maxResultChars` | 数据库 tools 捕获输出上限(stdout/stderr 各自,默认 20000 字符) |
110
- | `readonly` | 只读护栏(默认 false):true 时数据库 tools 与 `/query` 仅放行读语句(SELECT/SHOW/DESCRIBE/EXPLAIN/PRAGMA 等),写语句直接拒绝 |
111
- | `clients` | 各数据库类型 CLI 客户端覆盖:`{ command?, args? }`,键为 `mysql` / `postgres` / `sqlite` / `oracle` / `hive` / `impala`(内置默认 mysql/psql/sqlite3/sqlplus/beeline/impala-shell) |
112
- | `connections` | 配置预置连接,键为 sessionId(`'*'` = 通配符默认,任何无自有连接的会话回落它;headless/keyless 运行与部署固定默认库场景)。**不含 password 字段**——密码只允许经 /connect 路由进入内存;可选 `readonly` 字段按连接锁定只读 |
113
-
114
- 工具行 `tool-sqlcmd`(data-agent 预设内)另有 `maxRows`(默认 100,强制生效:SELECT 未写 LIMIT 时自动追加,结构化结果解析时二次截断)与 `readonly`,`queryTimeoutMs` / `maxResultChars` / `clients` 与宿主行同名可配。
115
-
116
- 路由行 `data-agent-routes` 独立配置:`connectTimeoutMs` / `introspectMaxTables` / `maxResultChars` / `readonly` 与主行同名同默认;另有 `queryTimeoutMs`(/query 与元数据查询超时,默认 30000)与 `maxQueryChars`(/query 单条 SQL 长度上限,默认 65536)。
117
-
118
- ```yaml
119
- # cordis.patch.yml 或 profile 层覆盖示例
120
- - id: data-agent
121
- name: '@yejiming/dsh-data-agent'
122
- config:
123
- clients:
124
- mysql:
125
- command: /usr/local/bin/mysql-client
126
- # 通配符默认连接:任何未显式 /connect 的会话回落到该库(仅限无密码场景)
127
- connections:
128
- '*':
129
- type: sqlite
130
- database: /tmp/analytics.db
115
+ 连接表单会一次展示所有相关字段。使用Tab或Shift+Tab切换输入项;数据库类型和只读模式按Enter展开选项,使用方向键选择并再次按Enter确认。
116
+
117
+ 连接成功后,回到聊天输入框直接提出业务问题即可。常用的数据库命令还有:
118
+
119
+ ```text
120
+ /database status 查看当前连接
121
+ /database test 测试当前连接
122
+ /database disconnect 断开当前连接
131
123
  ```
132
124
 
133
- ## Headless / 一次性运行
125
+ 同一会话再次打开连接表单时,会恢复最近填写的数据库类型、地址、端口、用户、数据库和只读模式。密码始终隐藏且不会恢复。
126
+
127
+ ![dsh-tui数据分析](assets/tui.png)
128
+
129
+ ## 推荐的提问方式
130
+
131
+ 为了获得更有价值的分析,可以在问题中补充业务目标、时间范围和关注维度。例如:
134
132
 
135
- **重要**:`dsh run`(headless bundle)不装载 agent-presets roster,也不会为会话挂载预设——预设机制属于 web 面(apiproxy 在会话创建时 mount)。因此 **headless 会话无法使用 sql-query/sql-write/sqlcmd/read/write/edit 工具面**,数据库 tools 的验证与使用都在 web 面完成;headless 中如需数据库能力,只能靠宿主 base 自带工具(如 bash 直接调用客户端)。
133
+ ```text
134
+ 分析2026年第二季度各地区的销售额和毛利率变化,找出表现异常的地区,
135
+ 继续拆解到品类和核心客户,并给出三条可执行的业务建议。
136
+ ```
137
+
138
+ 你也可以让DSH保存分析过程或SQL,方便复查和复用:
136
139
 
137
- (注:插入 roster 行 + 禁用 base 工具行的 patch 组合无法在 headless 中复现预设工具面——agent 会得到一个零工具的空组合,模型无工具可调。如需 headless 冒烟,仅验证「连接配置预置 + 宿主工具可用」即可。)
140
+ ```text
141
+ 完成会员复购分析,把最终SQL保存到analysis/repurchase.sql,
142
+ 并用一段适合周报的文字总结主要发现。
143
+ ```
138
144
 
139
- `data-agent-routes` 行在无 webserver 的 profile 中经嵌套 inject 自动跳过,无需处理。
145
+ ## 使用前准备
140
146
 
141
- ## HTTP 接口
147
+ DSH运行查询时需要本机能够访问目标数据库,并安装相应的数据库客户端:
142
148
 
143
- 前缀 `/plugins/data-agent`(浏览器半体同源调用):
149
+ - SQLite通常已随macOS或Linux提供。
150
+ - MySQL需要`mysql`客户端。
151
+ - PostgreSQL需要`psql`客户端。
152
+ - Oracle、Hive和Impala需要各自的命令行客户端。
144
153
 
145
- | 方法/路径 | 说明 |
146
- |---|---|
147
- | `POST /connect` | body `{ sessionId, type, host?, port?, user?, database, password?, readonly? }`;校验 → 连通性验证(列出所有表)→ 成功才保存连接,返回 `{ ok, tables }`,失败返回 `{ ok: false, error }` 且不保存 |
148
- | `POST /disconnect` | body `{ sessionId }`;清除该会话连接 |
149
- | `GET /status?sessionId=` | `{ connected, summary? }`;summary 为脱敏连接概要(无密码,含 `readonly` 当连接显式设定时)+ 表清单 |
150
- | `GET /schemas?sessionId=` | `{ ok, schemas: string[] }`;库/数据库列表(sqlite 为 `['main']`) |
151
- | `GET /tables?sessionId=&schema=` | `{ ok, tables: string[] }`;某库的表列表(sqlite 忽略 schema 参数) |
152
- | `GET /describe?sessionId=&schema=&table=` | `{ ok, columns: [{ name, type, nullable? }] }`;表结构(sqlite 忽略 schema) |
153
- | `POST /query` | body `{ sessionId, sql }`;运行一条 SQL(工作台命令框,非 agent 通道),返回 `{ ok, result: { exitCode, stdout, stderr, truncated } }`;`sql` 长度上限 `maxQueryChars`;单次只允许一条语句;readonly 开启时拒绝写语句 |
154
+ 建议先准备一个只读数据库账号,让数据Agent在不修改业务数据的前提下完成探索和分析。
154
155
 
155
- schema/table 标识符仅允许 `[A-Za-z0-9_$]`(服务端白名单校验并转义引用,拒绝注入形字符)。
156
+ 如果出现`failed to mount`或提示找不到`@yejiming/dsh-data-agent`,通常是当前profile还没有安装插件。请确认Web UI和dsh-tui分别执行了对应的安装命令,然后重新启动DSH。
156
157
 
157
158
  ## 安全说明
158
159
 
159
- - **密码**:服务端仅存内存,传递通道按类型:mysql 经 `MYSQL_PWD`、postgres 经 `PGPASSWORD` 环境变量;oracle 经 sqlplus `connect user/pass@...` stdin 前缀、hive 经 beeline `!connect` stdin 前缀(均不进 argv);impala 默认不传密码(LDAP/kerberos 由部署侧 `clients` 覆盖)。`/status` 与连接存储的公开读取面均剥离密码。
160
- - **连接配置持久化**:工作台把连接配置(type/host/port/user/database)保存到浏览器 localStorage(键 `dsh-data-agent.connection.v1`),用于切换页面/重启后回填表单并自动重连一次。**密码默认不落盘**:仅当用户勾选「记住密码」时才持久化密码(明文 localStorage,本机单用户场景的显式 opt-in)。若需清除:浏览器控制台执行 `localStorage.removeItem('dsh-data-agent.connection.v1')`。
161
- - **无 shell 层**:`ctx.subprocess.spawn` 参数数组化,SQL 与连接前缀经 stdin 传入,不存在 shell 拼接注入面;元数据路由的 schema/table 标识符经收紧白名单 `[A-Za-z0-9_$]` 校验并按类型转义引用(反引号/双引号),拒绝 `#`、`--`、`;`、`'` 等注入形字符。
162
- - **SQL 执行权**:审批策略为 never 时,`sql-write`/`sqlcmd` 与 `/query` 的 DDL/DML 会直接执行——连接按 session 隔离,请自行评估数据面风险。可设 `readonly: true`(宿主/工具/路由三行同名,或 `/connect` 传 `readonly: true` 按连接锁定)强制只放行读语句(SELECT/SHOW/DESCRIBE/EXPLAIN/PRAGMA 等),作为误操作防护;对更强对手防护,仍建议配合数据库侧只读账号。每次数据库工具调用为独立客户端进程并自动提交,不支持跨调用事务。
163
- - **超时与上限**:查询超时、输出截断、表清单上限、读查询最大行数(`maxRows`)、/query 单条 SQL 长度均为配置项,无硬编码 tunables。
160
+ - 推荐使用数据库只读账号,并在连接表单中开启只读模式。
161
+ - Web UI和dsh-tui中的临时密码只用于当前连接;TUI只显示`*`,重新打开表单时不会恢复密码。
162
+ - 需要跨进程恢复认证时,可以使用DSH credential reference,避免在命令参数中输入明文密码。
163
+ - 未开启只读模式时,数据Agent可以按你的要求执行更新或管理语句。连接生产数据库前,请先确认账号权限和数据备份策略。
164
+ - 不同会话的数据库连接相互隔离,便于分别处理不同项目、客户或分析环境。
164
165
 
165
166
  ## 卸载与回滚
166
167
 
167
168
  ```sh
168
- dsh plugin --profile web remove @yejiming/dsh-data-agent # 移除依赖与对应层
169
- rm -rf $DSH_HOME/.agent-presets/data-agent # 手动删除自安装的预设
169
+ dsh plugin --profile web remove @yejiming/dsh-data-agent
170
+ dsh plugin --profile dsh-tui remove @yejiming/dsh-data-agent
171
+ rm -rf $DSH_HOME/.agent-presets/data-agent
170
172
  ```
171
173
 
172
- 连接为内存态,无持久化数据需要清理。
174
+ 卸载插件不会主动删除已经保存的非敏感连接信息。若需要彻底清理,请先备份,再删除DSH中对应的数据Agent存储记录。
173
175
 
174
176
  ## 本地开发
175
177
 
176
- 构建与测试:
177
-
178
178
  ```sh
179
- pnpm build # 清空并重建 lib/(tsdown:lib/index.js、lib/routes.js、lib/tool.js、lib/invariant.js、lib/client.js)+ tsc 声明
180
- pnpm test # vitest:连接存储 / CLI 模板 / sqlcmd 执行(mock subprocess)
179
+ pnpm install
180
+ pnpm build
181
+ pnpm test
181
182
  ```
182
183
 
183
- `lib/` 已提交进仓库,安装与调试(含 `dsh plugin add .`)都不需要先构建。重新
184
- 构建产物时直接 `pnpm install` 即可:`@deepseek-ai/*` 等依赖均已发布到 npm,
185
- 无需再从本地 DSH checkout 复制/链接 node_modules。`pnpm-workspace.yaml` 采用
186
- dsh 同款约定(`nodeLinker: hoisted`);pnpm 11 的供应链策略会拦截「发布不久」
187
- 的包与依赖构建脚本,仓库已预置 `minimumReleaseAgeExclude`(rc.6 全家桶)与
188
- `allowBuilds: esbuild`。
184
+ `lib/`已提交到仓库,因此通过npm或GitHub安装时无需自行构建。
189
185
 
190
186
  ## 许可
191
187
 
@@ -193,6 +189,6 @@ MIT
193
189
 
194
190
  ## 友情链接
195
191
 
196
- - [dshfind.com](https://dshfind.com):DeepSeek Harness 的中文学习与分享社区。读懂论文,写出插件,看见整个生态。
197
- - [dsh-web-ui](https://github.com/dsh-external/dsh-web-ui):DeepSeek Harness(DSH)Web UI 的插件与皮肤集合
198
- - [dsh-cc-tui](https://github.com/dsh-external/dsh-cc-tui):Claude Code 风格全屏交互终端插件
192
+ - [dshfind.com](https://dshfind.com):DeepSeek Harness中文学习与分享社区
193
+ - [dsh-web-ui](https://github.com/dsh-external/dsh-web-ui):DeepSeek Harness Web UI插件与皮肤集合
194
+ - [dsh-cc-tui](https://github.com/dsh-external/dsh-cc-tui):Claude Code风格的全屏终端界面