---
slug: "pi-dask"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/ssdiwu/pi-dask@main/README.md"
repo: "https://github.com/ssdiwu/pi-dask"
source_file: "README.md"
branch: "main"
---
# pi-dask

Pi 的结构化提问扩展。它把可枚举的用户决策收集为单选或复选答案；不负责决定该问什么，也不维护条件分支。

> 当前已实现首个 npm（Node 包注册表）版本；接口契约见 [`doc/接口契约.md`](https://github.com/ssdiwu/pi-dask/blob/HEAD/doc/接口契约.md)。

## 定位

- **npm 包名**：`pi-dask`
- **Pi 工具名**：`dask`
- **用户**：需要让 Pi 在终端内低摩擦收集结构化选择的人。

`dask` 负责“怎么收集选择”；决策树、问题顺序、推荐判断与收束属于调用方，例如 `507-grill`（决策树追问）。两者可以协作，但不互相依赖。

## 已确认边界

- 支持单选与复选；不提供独立自由文本题。
- 每题都提供“其他（自行填写）”，并以带来源的答案值与枚举选中项区分返回。
- 单选题为 2–5 项；复选题为 2–12 项。超出上限必须由调用方先分组、收敛或拆题。
- 调用方确认确需用户决策且问题已收敛为枚举选项后，应使用 `dask`，而不是在回复正文中列出编号选项；即使只有一道题也一样。开放式探索和调用方本应自行收口的工程细节不使用 `dask`。
- 调用时已知且互不依赖的问题应合并到一次调用；答案会改变其他问题是否出现、题意或选项的问题必须分开调用。
- 以逐题向导展示；多题交互会显示当前位置和全部题号，可用数字键 `1`～`9` 直跳对应题、用 `←` / `→` 切换相邻题，并保留各题草稿。第 10 题及以后仍可通过左右键访问。
- 最终展示答案摘要并确认提交；存在未回答题时会返回第一道未答题补答，不生成不完整结果。用户取消时以工具取消/错误结束，不返回部分答案。
- 不支持条件跳题；依赖前题答案的流程应由调用方分多次请求。

## 当前实现状态

- 当前版本：`0.0.3`。
- 根目录 `index.ts` 是公开入口，`package.json` 的 `main` 与 Pi 扩展清单均指向它，再映射到 `src/`。
- 已实现 TypeScript（类型脚本）包、接口校验、确定性向导状态机、dask 工具与 TUI（终端界面）适配。

## 安装与使用

```bash
pi install npm:pi-dask
```

安装后，Pi 会加载 `dask` 工具；调用方传入 `questions` 数组，确认后获得按题目顺序排列的结构化 `answers`。

## 明确不做

- 不提供独立自由文本题、长选项搜索、条件表单或问卷状态持久化。
- 不替代 `507-grill`（决策树追问）或任何目标/工作流扩展。

## 文档

从 [`doc/README.md`](https://github.com/ssdiwu/pi-dask/blob/HEAD/doc/README.md) 开始。项目术语见 [`doc/术语表.md`](https://github.com/ssdiwu/pi-dask/blob/HEAD/doc/术语表.md)。
