dsh-data-insight 0.1.0 → 0.1.2
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/CHANGELOG.md +39 -15
- package/README.md +89 -73
- package/package.json +61 -49
- package/scripts/setup-duckdb.sh +90 -0
- package/skills/data-insight-runbook/SKILL.md +7 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,39 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/) 约定。
|
|
4
|
-
|
|
5
|
-
## [
|
|
6
|
-
|
|
7
|
-
### 新增
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/) 约定。
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### 新增
|
|
8
|
+
- `prepublishOnly` 钩子:npm 发布前自动运行测试门禁。
|
|
9
|
+
|
|
10
|
+
## [0.1.2] - 2026-09-02
|
|
11
|
+
|
|
12
|
+
### 新增
|
|
13
|
+
- `package.json` 补充 `repository` / `bugs` / `homepage` 元数据。
|
|
14
|
+
- GitHub Actions CI(`.github/workflows/ci.yml`):ubuntu + windows 矩阵运行 csv-profile 契约测试。
|
|
15
|
+
- `.editorconfig`:统一缩进 / 换行 / 编码基线(PowerShell 脚本保持 CRLF)。
|
|
16
|
+
- README「排障」章节:DuckDB 只读模式、CLI 缺失、GBK 编码、脏数据核对、Mermaid 本地渲染。
|
|
17
|
+
- `test/fixtures/README.md`:三个 fixture 的场景与验证点说明。
|
|
18
|
+
|
|
19
|
+
## [0.1.1] - 2026-08-16
|
|
20
|
+
|
|
21
|
+
### 修复
|
|
22
|
+
- DuckDB 直连调用方式(SKILL.md / README):CSV/Parquet 无库查询去掉 `-readonly`——v1.5.5 实测不带库文件时 CLI 打开内存库,`-readonly` 会报 `Cannot launch in-memory database in read-only mode`;`-readonly` 保留用于库文件 / 远程库连接(实测 INSERT 等写语句被拦截)。
|
|
23
|
+
|
|
24
|
+
### 新增
|
|
25
|
+
- `scripts/setup-duckdb.sh`:macOS/Linux 安装脚本(brew / GitHub release / `~/.local/bin`),与 Windows 版 `setup-duckdb.ps1` 对齐。
|
|
26
|
+
- `test/csv-profile.test.mjs`:csv-profile CLI 契约测试(`node:test` 零依赖,10 例:分隔符探测 / 引号与转义 / 千分位 / 混合类型降级 / 残缺行 / `--limit` / BOM / 退出码),`npm test` 运行。
|
|
27
|
+
- runbook:CLI 缺失时引导运行对应平台的安装脚本。
|
|
28
|
+
|
|
29
|
+
## [0.1.0] - 2026-08-16
|
|
30
|
+
|
|
31
|
+
### 新增
|
|
32
|
+
- 主技能 `data-insight-runbook`:五阶段数据洞察流水线(受理 → 探查 → 指标 → 图表 → 报告),每阶段硬门槛。
|
|
33
|
+
- 四种数据源接入:CSV、粘贴表格、SQL 查询结果、DuckDB 直连(可选,强制只读)。
|
|
34
|
+
- 三通道图表规范(`docs/chart-spec.md`):Markdown 表格 + Mermaid + ASCII。
|
|
35
|
+
- 报告模板与严谨性检查清单(`docs/report-template.md`)。
|
|
36
|
+
- 零依赖 CSV 探查脚本 `scripts/csv-profile.mjs`。
|
|
37
|
+
- 可选 DuckDB CLI 安装脚本 `scripts/setup-duckdb.ps1`(winget / GitHub 直链,UTF-8 BOM)。
|
|
38
|
+
- 样例 CSV 与样例报告(`examples/`)。
|
|
39
|
+
- 发布与分发指南 `PUBLISHING.md`。
|
package/README.md
CHANGED
|
@@ -1,73 +1,89 @@
|
|
|
1
|
-
# dsh-data-insight
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
├──
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
# dsh-data-insight
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
[](https://github.com/topics/dsh-plugin)
|
|
5
|
+
[](https://dsh-index.xlings.org/packages/dsh-data-insight/)
|
|
6
|
+
[](CHANGELOG.md)
|
|
7
|
+
|
|
8
|
+
DSH(DeepSeek Harness)**数据洞察技能插件**:把原始数据变成「业务结论 + 指标数据 + 图表」的结构化 Markdown 分析报告。
|
|
9
|
+
|
|
10
|
+
纯指令型技能插件,零依赖、零构建。计算由宿主已提供的文件 / Shell 工具驱动的 LLM 完成,包内附带一个零依赖的 CSV 探查脚本与完整图表 / 报告规范。
|
|
11
|
+
|
|
12
|
+
## 功能
|
|
13
|
+
|
|
14
|
+
- **四种数据源**:CSV 文件、粘贴表格文本、SQL 查询结果、DuckDB 直连数据库(可选)。
|
|
15
|
+
- **五阶段流水线**(每阶段带硬门槛):输入受理 → 数据探查 → 指标计算 → 图表呈现 → 报告产出。
|
|
16
|
+
- **三类指标**:汇总统计、同环比(基准期规则写死)、TopN、异常值(Z-score / IQR)。
|
|
17
|
+
- **三通道图表**(全零依赖):Markdown 表格 + 数字 / Mermaid / ASCII 条形图。
|
|
18
|
+
- **严谨性保障**:结论必有数字支撑、事实与推断分离、口径可复现、不编造数据。
|
|
19
|
+
|
|
20
|
+
## 安装
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
dsh plugin --profile web add dsh-data-insight
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
或手动两步(在目标 profile 目录下):
|
|
27
|
+
|
|
28
|
+
1. `package.json` 的 `dependencies` 加 `"dsh-data-insight": "^0.1.1"`;
|
|
29
|
+
2. `dsh.profile.bundles` 数组加 `"dsh-data-insight"`。
|
|
30
|
+
|
|
31
|
+
重启 profile 后,技能 `data-insight-runbook` 出现在技能列表即可用。
|
|
32
|
+
|
|
33
|
+
## 使用
|
|
34
|
+
|
|
35
|
+
在会话中说「分析这份 CSV 出报告」「看看这个数据」「帮我算一下指标」并附上数据源(文件路径 / 粘贴表格 / DuckDB 连接),模型会加载 `data-insight-runbook` 并按五阶段执行。产物是一份 Markdown 报告,落盘到工作区。
|
|
36
|
+
|
|
37
|
+
### 快速示例
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
node scripts/csv-profile.mjs examples/sample-sales.csv
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
会输出 `examples/sample-sales.csv` 的探查报告(schema / 缺失 / 分布 / 异常),对应报告样例见 `examples/sample-report.md`。
|
|
44
|
+
|
|
45
|
+
## 目录结构
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
dsh-data-insight/
|
|
49
|
+
├── plugin/index.js # 插件入口:注册 skills/ 为技能根
|
|
50
|
+
├── cordis.patch.yml # bundle patch(dsh plugin add 时注入)
|
|
51
|
+
├── skills/data-insight-runbook/SKILL.md # 主技能:五阶段 runbook
|
|
52
|
+
├── docs/chart-spec.md # 三通道图表规范与示例
|
|
53
|
+
├── docs/report-template.md # 报告骨架 + 严谨性检查清单
|
|
54
|
+
├── scripts/csv-profile.mjs # 零依赖 CSV 探查脚本
|
|
55
|
+
├── scripts/setup-duckdb.ps1 # DuckDB CLI 安装脚本(Windows)
|
|
56
|
+
├── scripts/setup-duckdb.sh # DuckDB CLI 安装脚本(macOS/Linux)
|
|
57
|
+
└── examples/ # 样例 CSV + 样例报告
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## DuckDB 直连(可选)
|
|
61
|
+
|
|
62
|
+
默认零依赖;如需直连数据库,安装 [DuckDB](https://duckdb.org/) 单文件 CLI(加入 PATH)。可使用安装脚本:Windows `scripts/setup-duckdb.ps1`,macOS/Linux `scripts/setup-duckdb.sh`。
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
# CSV/Parquet 直接查:无库文件,不加 -readonly(v1.5.5 实测 -readonly 打不开内存库会报错)
|
|
66
|
+
duckdb -csv -c "SELECT * FROM read_csv_auto('data.csv') LIMIT 100"
|
|
67
|
+
# 库文件 / 远程库:连接串走环境变量,强制只读(POSIX shell 为 "$DATA_INSIGHT_DB_URL")
|
|
68
|
+
duckdb -readonly -csv -c "SELECT ... LIMIT 5000" "$env:DATA_INSIGHT_DB_URL"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
安全红线:连接库一律 `-readonly`(写语句会被拦截);连接串走环境变量 `DATA_INSIGHT_DB_URL`;查询默认 `LIMIT 5000`。
|
|
72
|
+
|
|
73
|
+
## 排障
|
|
74
|
+
|
|
75
|
+
- **DuckDB 报 `Cannot launch in-memory database in read-only mode`**:无库文件查询(CSV/Parquet)不要加 `-readonly`,见上方示例;`-readonly` 仅用于库文件 / 远程库。
|
|
76
|
+
- **`duckdb: command not found`**:CLI 未安装或不在 PATH,运行对应平台安装脚本(`scripts/setup-duckdb.ps1` / `setup-duckdb.sh`)后重开终端。
|
|
77
|
+
- **CSV 中文乱码**:优先 UTF-8(带 BOM 也能正确处理);GBK 编码文件先用 `iconv -f GBK -t UTF-8` 转码再探查。
|
|
78
|
+
- **指标结论与预期不符**:先用 `node scripts/csv-profile.mjs <file>` 看探查报告里的缺失值 / 重复行 / 异常值分布——样例数据实测中发现过单行脏数据驱动整体暴增、重复行抬高计数、缺失值拉低均值三类问题,探查阶段都能暴露。
|
|
79
|
+
- **Mermaid 图在本地 Markdown 预览不渲染**:`file://` 协议下 CDN 加载的 mermaid.js 受同源策略限制,用 Typora 等本地渲染编辑器打开,或参考 `docs/chart-spec.md` 换用 Markdown 表格 / ASCII 条形图通道。
|
|
80
|
+
|
|
81
|
+
## 参考文档
|
|
82
|
+
|
|
83
|
+
- `skills/data-insight-runbook/SKILL.md` — 完整流程与门槛
|
|
84
|
+
- `docs/chart-spec.md`、`docs/report-template.md` — 图表与报告规范
|
|
85
|
+
- `examples/` — 输入 / 输出样例
|
|
86
|
+
|
|
87
|
+
## 开源协议
|
|
88
|
+
|
|
89
|
+
[MIT](LICENSE)
|
package/package.json
CHANGED
|
@@ -1,49 +1,61 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-data-insight",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "DSH (DeepSeek Harness) data-insight skill plugin: turn raw data (CSV / pasted table / SQL results / DuckDB) into a structured Markdown report with business conclusions, metrics and charts.",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-data-insight",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "DSH (DeepSeek Harness) data-insight skill plugin: turn raw data (CSV / pasted table / SQL results / DuckDB) into a structured Markdown report with business conclusions, metrics and charts.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/duyanta123/dsh-data-insight.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/duyanta123/dsh-data-insight/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/duyanta123/dsh-data-insight#readme",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "node --test test/csv-profile.test.mjs",
|
|
17
|
+
"prepublishOnly": "npm test"
|
|
18
|
+
},
|
|
19
|
+
"main": "./plugin/index.js",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": "./plugin/index.js",
|
|
22
|
+
"./package.json": "./package.json"
|
|
23
|
+
},
|
|
24
|
+
"dsh": {
|
|
25
|
+
"bundle": {
|
|
26
|
+
"patch": "./cordis.patch.yml"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"plugin/index.js",
|
|
31
|
+
"cordis.patch.yml",
|
|
32
|
+
"skills/",
|
|
33
|
+
"docs/",
|
|
34
|
+
"scripts/",
|
|
35
|
+
"examples/",
|
|
36
|
+
"README.md",
|
|
37
|
+
"CHANGELOG.md",
|
|
38
|
+
"PUBLISHING.md",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"@deepseek-ai/dsh-skill-filesystem": "*"
|
|
43
|
+
},
|
|
44
|
+
"peerDependenciesMeta": {
|
|
45
|
+
"@deepseek-ai/dsh-skill-filesystem": {
|
|
46
|
+
"optional": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"keywords": [
|
|
50
|
+
"dsh",
|
|
51
|
+
"dsh-plugin",
|
|
52
|
+
"deepseek-harness",
|
|
53
|
+
"data-analysis",
|
|
54
|
+
"data-insight",
|
|
55
|
+
"analytics",
|
|
56
|
+
"report",
|
|
57
|
+
"csv",
|
|
58
|
+
"duckdb",
|
|
59
|
+
"skills"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# setup-duckdb.sh — 安装 DuckDB CLI(可选依赖,用于 dsh-data-insight 直连数据库路径;macOS / Linux)
|
|
3
|
+
#
|
|
4
|
+
# 用法:
|
|
5
|
+
# sh scripts/setup-duckdb.sh # 安装最新稳定版
|
|
6
|
+
# sh scripts/setup-duckdb.sh 1.5.5 # 指定版本
|
|
7
|
+
#
|
|
8
|
+
# 安装位置:$HOME/.local/bin/duckdb,并提示加入 PATH。
|
|
9
|
+
# 安全红线由 runbook 保证:连接库一律 -readonly,连接串走环境变量 DATA_INSIGHT_DB_URL。
|
|
10
|
+
|
|
11
|
+
set -eu
|
|
12
|
+
|
|
13
|
+
VERSION="${1:-}"
|
|
14
|
+
|
|
15
|
+
get_latest_version() {
|
|
16
|
+
v=$(curl -fsSL --max-time 20 https://duckdb.org/data/latest_stable_version.txt 2>/dev/null || true)
|
|
17
|
+
case "$v" in
|
|
18
|
+
[0-9]*.[0-9]*.[0-9]*) echo "$v" ;;
|
|
19
|
+
*) echo "1.5.5" ;;
|
|
20
|
+
esac
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
[ -z "$VERSION" ] && VERSION=$(get_latest_version)
|
|
24
|
+
echo "目标 DuckDB 版本:$VERSION"
|
|
25
|
+
|
|
26
|
+
INSTALL_DIR="$HOME/.local/bin"
|
|
27
|
+
EXE="$INSTALL_DIR/duckdb"
|
|
28
|
+
|
|
29
|
+
# 已安装且版本匹配则跳过
|
|
30
|
+
if [ -x "$EXE" ]; then
|
|
31
|
+
installed=$("$EXE" --version 2>/dev/null | head -n 1 || true)
|
|
32
|
+
case "$installed" in
|
|
33
|
+
"v$VERSION "*|*" $VERSION "*)
|
|
34
|
+
echo "已安装 DuckDB $VERSION($EXE)"
|
|
35
|
+
exit 0
|
|
36
|
+
;;
|
|
37
|
+
esac
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# ── 方案 1:macOS 用 Homebrew ────────────────────────────────────────────────
|
|
41
|
+
if command -v brew >/dev/null 2>&1; then
|
|
42
|
+
echo "尝试 brew 安装 duckdb ..."
|
|
43
|
+
if brew install duckdb; then
|
|
44
|
+
echo "brew 安装完成。验证:"
|
|
45
|
+
duckdb --version
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
echo "brew 安装未成功,回退到直接下载。" >&2
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# ── 方案 2:直接下载 GitHub release ─────────────────────────────────────────
|
|
52
|
+
OS=$(uname -s)
|
|
53
|
+
ARCH=$(uname -m)
|
|
54
|
+
case "$OS:$ARCH" in
|
|
55
|
+
Darwin:*) ASSET="duckdb_cli-osx-universal.zip" ;;
|
|
56
|
+
Linux:x86_64) ASSET="duckdb_cli-linux-amd64.zip" ;;
|
|
57
|
+
Linux:arm64|Linux:aarch64) ASSET="duckdb_cli-linux-arm64.zip" ;;
|
|
58
|
+
*)
|
|
59
|
+
echo "不支持的平台:$OS $ARCH。请手动安装:https://duckdb.org/docs/stable/clients/cli/overview" >&2
|
|
60
|
+
exit 1
|
|
61
|
+
;;
|
|
62
|
+
esac
|
|
63
|
+
|
|
64
|
+
URL="https://github.com/duckdb/duckdb/releases/download/v$VERSION/$ASSET"
|
|
65
|
+
mkdir -p "$INSTALL_DIR"
|
|
66
|
+
TMP=$(mktemp -d)
|
|
67
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
68
|
+
|
|
69
|
+
echo "下载 $URL ..."
|
|
70
|
+
curl -fSL --max-time 120 -o "$TMP/duckdb.zip" "$URL"
|
|
71
|
+
|
|
72
|
+
unzip -o "$TMP/duckdb.zip" -d "$TMP" >/dev/null
|
|
73
|
+
mv "$TMP/duckdb" "$EXE"
|
|
74
|
+
chmod +x "$EXE"
|
|
75
|
+
|
|
76
|
+
# ── PATH 提示(不擅改 shell 配置)──────────────────────────────────────────
|
|
77
|
+
case ":$PATH:" in
|
|
78
|
+
*":$INSTALL_DIR:"*) ;;
|
|
79
|
+
*)
|
|
80
|
+
echo "提示:$INSTALL_DIR 不在 PATH。请在 ~/.profile 或 ~/.zshrc 添加:"
|
|
81
|
+
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
|
|
82
|
+
;;
|
|
83
|
+
esac
|
|
84
|
+
|
|
85
|
+
echo "验证安装:"
|
|
86
|
+
"$EXE" --version
|
|
87
|
+
echo ""
|
|
88
|
+
echo "完成。用法示例(只读):"
|
|
89
|
+
echo " duckdb -csv -c \"SELECT * FROM read_csv_auto('data.csv') LIMIT 100\""
|
|
90
|
+
echo " duckdb -readonly -csv -c \"SELECT ... LIMIT 5000\" \"\$DATA_INSIGHT_DB_URL\""
|
|
@@ -124,14 +124,16 @@ description: 数据洞察报告:输入原始数据(CSV 文件 / 粘贴表格
|
|
|
124
124
|
- 若来自 SQL:记录来源查询(脱敏后写入附录),确认是否已聚合。
|
|
125
125
|
|
|
126
126
|
### DuckDB 直连
|
|
127
|
-
- **启用检测**:`duckdb --version` 可用才走直连;不可用时 CSV/粘贴仍全功能,直连路径明确告知「需安装 DuckDB
|
|
127
|
+
- **启用检测**:`duckdb --version` 可用才走直连;不可用时 CSV/粘贴仍全功能,直连路径明确告知「需安装 DuckDB(Windows:scripts/setup-duckdb.ps1,macOS/Linux:scripts/setup-duckdb.sh)」,并引导用户运行对应平台的安装脚本,不静默降级。
|
|
128
128
|
- **安全红线(必须遵守)**:
|
|
129
|
-
-
|
|
129
|
+
- 连接库文件 / 远程库时一律 `-readonly`(v1.5.5 实测会拦截 INSERT/CREATE 等写语句),禁止任何写库 / 建表 / 破坏性语句。
|
|
130
130
|
- 连接串走环境变量 `DATA_INSIGHT_DB_URL`,禁止把密码写进命令或报告。
|
|
131
131
|
- 查询加 `LIMIT`(默认 5000),列宽截断;超限提示分批。
|
|
132
|
-
- **调用方式(直接调 CLI,勿写 Node spawn 包装——规避沙箱子进程管道 EPERM
|
|
133
|
-
- CSV/Parquet
|
|
134
|
-
|
|
132
|
+
- **调用方式(直接调 CLI,勿写 Node spawn 包装——规避沙箱子进程管道 EPERM;已在 v1.5.5 实测)**:
|
|
133
|
+
- CSV/Parquet 直接查(无库文件,**不加 `-readonly`**——不带库文件时 CLI 打开内存库,`-readonly` 会报 `Cannot launch in-memory database in read-only mode`;仅执行 SELECT,无持久化写入):
|
|
134
|
+
`duckdb -csv -c "SELECT * FROM read_csv_auto('data.csv') LIMIT 100"`
|
|
135
|
+
- 库文件 / 远程库(`-readonly` 强制只读,连接串走环境变量):
|
|
136
|
+
`duckdb -readonly -csv -c "SELECT ... LIMIT 5000" "$env:DATA_INSIGHT_DB_URL"`(POSIX shell 为 `"$DATA_INSIGHT_DB_URL"`)
|
|
135
137
|
|
|
136
138
|
---
|
|
137
139
|
|