Metadata-Version: 2.4
Name: panzr
Version: 0.4.2
Summary: Armored Analytics in Your Terminal — 终端数据分析驾驶舱
Author-email: Song <song@example.com>
License: MIT
Keywords: cli,csv,data-analysis,duckdb,polars,sql,terminal,tui
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.10
Requires-Dist: duckdb>=1.0.0
Requires-Dist: openai>=1.0.0
Requires-Dist: plotext>=5.0.0
Requires-Dist: polars>=1.0.0
Requires-Dist: pyarrow>=14.0.0
Requires-Dist: rich>=13.0.0
Requires-Dist: textual>=0.52.0
Provides-Extra: compat
Requires-Dist: polars-runtime-compat>=1.0.0; extra == 'compat'
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Provides-Extra: full
Requires-Dist: harlequin; extra == 'full'
Requires-Dist: jq; extra == 'full'
Requires-Dist: visidata; extra == 'full'
Provides-Extra: harlequin
Requires-Dist: harlequin; extra == 'harlequin'
Provides-Extra: visidata
Requires-Dist: visidata; extra == 'visidata'
Description-Content-Type: text/markdown

# 🐼🔧 Panzr v0.4.2

**Armored Analytics in Your Terminal.** 终端里的装甲数据分析。

> Panzr 是你的终端数据分析驾驶舱。
> *"Your Terminal Data Cockpit."*

---

## 产品定位

Panzr 是一个 **TUI (Terminal User Interface)** 数据分析工具箱。底层整合 DuckDB、Polars、plotext 等成熟引擎，Panzr 本身只负责：菜单导航、参数拼装、流程串联、结果展示。

**v0.4.0** 新增：Header/Footer、全局右键复制、常用 SQL 规则、输出格式选择器、紧凑 UI。

---

## 功能矩阵

| Tab | 功能 | 底层引擎 |
|:---|:---|:---|
| 🔌 **连接** | 扫描目录、关键词搜索分组、多选加载、DuckDB View 注册 | DuckDB + Polars |
| 🔍 **探查** | Polars 管道 (筛选→排序→去重→选列), 懒加载, 三段式布局 | Polars Lazy |
| 📝 **SQL** | DuckDB 查询 + AI 对话 + 常用规则 + 导出, 可拖动分隔条 | DuckDB |
| 💬 **AI 对话** | 多轮 SQL 讨论, 上下文感知, 历史持久化, 底部面板切换 | DeepSeek LLM |
| 📊 **聚合** | 跨文件 GROUP BY, 多聚合函数, DuckDB 全量扫描 | DuckDB |
| 📈 **可视化** | 柱状图/折线图/散点图/直方图, 终端渲染 | plotext |
| 📋 **报告** | 一键数据诊断报告 (Data Profile) | DuckDB + Rich |

---

## 安装

```bash
pip install panzr
```

依赖: `textual` `duckdb` `polars` `plotext` `rich` `openai`

> 如果启动时报 AVX2 指令集错误（老 CPU / 虚拟机），请安装兼容版本:
> ```bash
> pip install panzr[compat]
> ```
> `panzr[compat]` 使用 `polars-runtime-compat` 替代 `polars`，无需 AVX2 指令集。

外部工具 (可选): `visidata` `harlequin` `jq`

### LLM 配置

```bash
export DEEPSEEK_API_KEY=sk-你的key
```

---

## 使用

```bash
panzr
# 自动加载目录
panzr --load ~/FinData/资金结算
# 加载 siku 插件
panzr --siku
```

### 典型工作流

```
扫描目录 → 多选分组 → DuckDB View 注册 (全量零内存)
  → SQL (AI 多轮对话或手写, 全量查询)
  → 聚合 (跨文件 GROUP BY)
  → 可视化
```

---

## 快捷键

| 快捷键 | 功能 |
|:---|:---|
| `Ctrl+Q` / `Ctrl+C` | 退出 Panzr |
| `Ctrl+T` | 下一个 Tab |
| `Ctrl+P` | 上一个 Tab |
| `Ctrl+Enter` | 执行 SQL 查询 |
| `Ctrl+Up` / `Ctrl+Down` | 调整 SQL 编辑器高度 |

### 鼠标操作

| 操作 | 功能 |
|:---|:---|
| 拖动分隔条 `═` | 调整编辑器与结果区比例 |
| 右键 (编辑器/输入框) | 全选 + 复制到系统剪贴板 |

---

## 项目结构

```
panzr/
├── app.py                    # 主 App + CSS + 快捷键
├── state.py                  # 全局数据上下文 (AppState)
├── startup_check.py          # 启动环境检测器
├── clipboard.py              # OSC 52 系统剪贴板
├── config/
│   └── sql-rules.json        # 常用 SQL 规则
├── engines/
│   ├── loader.py             # 文件扫描 + 分组
│   ├── duckdb_engine.py      # DuckDB 查询引擎
│   ├── harlequin_launcher.py # Harlequin 子进程启动
│   ├── llm.py                # LLM SQL 生成 + 多轮对话 (DeepSeek)
│   ├── history.py            # 查询历史 + 聊天记录持久化
│   └── exporter.py           # 导出
├── tabs/
│   ├── connect.py            # 连接 Tab (扫描+多选+DuckDB)
│   ├── explore.py            # 探查 Tab (Polars lazy 管道)
│   ├── query.py              # SQL Tab + AI 对话面板
│   ├── aggregate.py          # 聚合 Tab (DuckDB GROUP BY)
│   ├── vision.py             # 可视化 Tab (plotext)
│   └── report.py             # 报告 Tab (Rich)
└── widgets/
    ├── splitter.py            # 可拖动分隔条 (纵向/横向)
    ├── resizable.py           # Ctrl+Up/Down 调节高度 TextArea
    ├── ai_chat.py             # AI 多轮对话面板
    └── context_menu.py        # 右键菜单 (可复用)
```

---

## Changelog

### v0.4.2
- 🐛 修复 Textual 8.x `Key.ctrl` 属性移除导致的 `Ctrl+Enter` 崩溃
- ✨ 新增 `pyarrow` 依赖

### v0.4.1
- 🐛 修复老 CPU（缺 AVX2）安装标准 polars 后 SIGILL 崩溃的问题
- ✨ 新增 `panzr[compat]` 安装选项，使用 `polars-runtime-compat`
- ✨ 启动时自动检测 polars 兼容性并给出安装指引

### v0.4.0
- ✨ 新增 Header（版本号） + Footer（动态快捷键栏）
- ✨ 新增全局右键复制：DataTable/Tree/Select/Input 均支持
- ✨ 新增常用 SQL 规则按钮（`📋 常用`），读取 `panzr/config/sql-rules.json`
- ✨ 新增输出格式选择器（CSV/Parquet），统一为 `输出` 按钮
- ✨ 精简 SQL 页操作栏：合并为一行，去掉冗余按钮
- 🐛 修复 CLI 版本号解析（提取纯版本号）
- 🐛 修复 `importlib.resources` 打包后路径问题

### v0.3.0
- ✨ 新增 AI 多轮对话面板 (底部 Tab 切换, 上下文感知, 聊天记录持久化)
- ✨ 新增可拖动分隔条 (鼠标拖动调整编辑器高度)
- ✨ 新增 `Ctrl+Up`/`Ctrl+Down` 调节编辑器高度
- ✨ 新增右键全选复制 (OSC 52 系统剪贴板)
- ✨ 新增聊天记录本地持久化 (`~/.panzr/history.json`)
- 🐛 修复 LIMIT 500 追加时 SQL 末尾分号导致的语法错误

### v0.2.6
- DuckDB 成为唯一数据引擎、LLM 自然语言生成 SQL

---

## License

MIT
