Metadata-Version: 2.4
Name: panzr
Version: 0.5.2
Summary: Armored Analytics in Your Terminal — 终端数据分析驾驶舱
Author-email: SongWupei <songwupei@163.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-plotext>=1.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'
Provides-Extra: viz
Requires-Dist: matplotlib>=3.5; extra == 'viz'
Description-Content-Type: text/markdown

# 🐼🔧 Panzr v0.5.2

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

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

---

## 产品定位

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

---

## 功能矩阵

| Tab | 功能 | 底层引擎 |
|:---|:---|:---|
| 🔌 **连接** | 扫描目录、分组多选、逐文件勾选加载、DuckDB View 注册 | DuckDB + Polars |
| 🔍 **探查** | Polars 管道 (筛选→排序→去重→选列), 左侧数据目录, 懒加载 | Polars Lazy |
| 📝 **SQL** | DuckDB 查询 + AI 生成 + 常用规则 + 收藏 + 报告 + 出图, 可隐藏目录 | DuckDB + AI |
| 📊 **可视化** | Grid 多图表 + AI 生成 + plotext/matplotlib 双引擎 + 对话面板 | textual-plotext + matplotlib |
| 📋 **报告** | 一键数据诊断报告, 多数据源支持 | DuckDB + Rich |

---

## 安装

```bash
pip install panzr
```

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

可选: `matplotlib`（导出高清 PNG 图表）

> 如果启动时报 AVX2 指令集错误（老 CPU / 虚拟机），请安装兼容版本:
> ```bash
> pip install panzr[compat]
> ```

### LLM 配置

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

---

## 使用

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

---

## 快捷键

| 快捷键 | 功能 |
|:---|:---|
| `Ctrl+Q` / `Ctrl+C` | 退出 |
| `Ctrl+Right` | 下一 Tab |
| `Ctrl+Left` | 上一 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/prompt/chat)
│   ├── report-prompt.md      # 报告 AI 管理视角 Prompt
│   └── report-template.md    # 报告 Markdown 模板
├── engines/
│   ├── loader.py             # 文件扫描 + 分组
│   ├── duckdb_engine.py      # DuckDB 查询引擎
│   ├── harlequin_launcher.py # Harlequin 子进程启动
│   ├── llm.py                # LLM (DeepSeek) SQL/图表/文本生成
│   ├── history.py            # 查询/图表/对话历史持久化
│   ├── exporter.py           # 导出 (CSV/JSON/Parquet/MD)
│   └── rules.py              # 共享规则系统
├── tabs/
│   ├── connect.py            # 连接 Tab (扫描+左右分栏多选+DuckDB)
│   ├── explore.py            # 探查 Tab (Polars lazy 管道 + 左侧目录)
│   ├── query.py              # SQL Tab + AI 对话 + 常用规则 + 收藏 + 报告
│   ├── vision.py             # 可视化 Tab (Grid 多图表 + AI + 双引擎)
│   └── report.py             # 报告 Tab (多数据源数据诊断)
└── widgets/
    ├── splitter.py            # 可拖动分隔条
    ├── resizable.py           # Ctrl+Up/Down 调节高度 TextArea
    ├── ai_chat.py             # AI 多轮对话面板
    └── context_menu.py        # 右键菜单
```

---

## 数据目录

```
~/.panzr/
├── history.json              # 查询/图表/对话历史
├── rules.json                # 用户收藏规则
├── charts/                   # matplotlib 高清图表
├── reports/                  # Markdown 查询报告
└── data/                     # CSV/Parquet 数据导出
```

---

## Changelog

### v0.5.2
- 🐛 修复加载文件后状态信息不显示
- 🐛 视觉历史 prompt 不回填 AI 输入框
- 🐛 补上 `textual-plotext` 依赖声明
- ✨ 加载文件逐组显示进度
- ✨ matplotlib 可选依赖 `panzr[viz]`

### v0.5.0
- ✨ 连接 Tab 左右分栏：分组 + 文件多选
- ✨ SQL Tab 常用规则支持 sql/prompt/chat 三种类型，⭐ 收藏 + 删除
- ✨ SQL Tab 报告生成：AI 管理视角 + 数据源 schema + 完整数据诊断，模板可配置
- ✨ 可视化 Grid 多图表布局，支持 6 个图表同时显示
- ✨ 可视化 textual-plotext 原生彩色渲染 + matplotlib PNG 导出双引擎
- ✨ 可视化 AI 对话面板 + 常用规则 + 历史 + 收藏
- ✨ 探查 Tab 左侧数据目录，可隐藏
- ✨ SQL Tab 左侧数据目录可隐藏
- ✨ SQL → 可视化一键出图，多查询结果不覆盖
- ✨ 全局右键复制覆盖所有控件类型
- ✨ 历史记录按 SQL/可视化 Tab 分离
- ✨ 收藏规则按 SQL/可视化 Tab 分离
- ✨ 报告/导出文件统一到 ~/.panzr/{reports,data,charts}/
- ✨ src 布局 + pytest 测试拆分
- 🗑 下线聚合 Tab（功能并入常用规则）
- 🐛 修复右键复制、Ctrl+P 冲突、中文 Widget ID、SQL 占位符等 Bug

### 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 页操作栏：合并为一行，去掉冗余按钮

---

## License

MIT
