pi-ui-extend 0.1.55 → 0.1.57
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 +206 -259
- package/dist/app/constants.d.ts +2 -2
- package/dist/app/constants.js +2 -2
- package/dist/app/popup/menu-items-controller.js +3 -0
- package/dist/app/rendering/status-line-renderer.js +1 -0
- package/dist/app/session/session-event-controller.js +4 -0
- package/dist/app/session/tabs-controller.js +3 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/default-pix-config.js +1 -1
- package/dist/schemas/pix-schema.js +1 -1
- package/dist/theme.d.ts +1 -0
- package/dist/theme.js +2 -0
- package/external/pi-tools-suite/README.md +5 -5
- package/external/pi-tools-suite/package.json +3 -3
- package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +18 -18
- package/external/pi-tools-suite/src/async-subagents/core/config.ts +5 -5
- package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +53 -19
- package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +2 -2
- package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +2 -2
- package/external/pi-tools-suite/src/codex-reasoning-fix/index.ts +12 -13
- package/external/pi-tools-suite/src/dcp/index.ts +11 -0
- package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +15 -15
- package/external/pi-tools-suite/src/index.ts +4 -2
- package/external/pi-tools-suite/src/todo/index.ts +24 -28
- package/external/pi-tools-suite/src/todo/state/state-reducer.ts +1 -1
- package/external/pi-tools-suite/src/todo/tool/types.ts +2 -2
- package/package.json +5 -4
- package/schemas/pix.json +4 -0
package/README.md
CHANGED
|
@@ -1,384 +1,331 @@
|
|
|
1
1
|
# Pix
|
|
2
2
|
|
|
3
|
-
Pix is a
|
|
3
|
+
Pix is a terminal UI for the Pi coding agent. It uses the Pi agent and SDK, but replaces the default screen with a workspace-oriented interface: session tabs, compact tool calls, local shell commands, voice dictation, and a bundled `pi-tools-suite` extension pack.
|
|
4
4
|
|
|
5
|
-
The npm package is
|
|
5
|
+
The npm package is named `pi-ui-extend`; the installed command is `pix`.
|
|
6
6
|
|
|
7
7
|
## Highlights
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Pix keeps the same Pi agent engine and SDK, but replaces the default terminal experience with a faster, more interactive coding cockpit:
|
|
20
|
-
|
|
21
|
-
- **Tabs for real work.** Keep several workspace-scoped Pi sessions open in one terminal, switch between tasks instantly, and restore tab state after restart.
|
|
22
|
-
- **A readable tool-call UI.** Tool output is grouped into clickable rows, so long reads, patches, shell logs, and errors can be collapsed or expanded instead of flooding the conversation.
|
|
23
|
-
- **Local shell without leaving the chat.** Prefix a command with `!` to run it in an ephemeral in-chat shell block, or use `!!` for raw TTY programs.
|
|
24
|
-
- **Voice prompts.** Dictate prompts locally in Russian or English with Vosk; no cloud speech service is required.
|
|
25
|
-
- **Prompt drafting assistance.** Inline AI autocomplete suggests the next words while you type, and `/enhance` rewrites a rough draft into a clearer agent prompt.
|
|
26
|
-
- **Workspace safety net.** Pix tracks supported file mutations and lets you roll back the latest workspace change with `/undo`.
|
|
27
|
-
- **Clickable files and images.** File paths in the conversation become clickable links that open in Zed, including line and column when available; image labels can be opened in the system viewer.
|
|
28
|
-
- **Session power tools.** Search across saved sessions, fork from an earlier message, clone the current branch, rename sessions, export/import JSONL, or share a private gist.
|
|
29
|
-
- **Queued follow-ups.** Add the next prompt while the agent is still running; Pix sends it automatically when the current turn finishes.
|
|
30
|
-
- **Live status panels.** Built-in panels surface todo state, async sub-agent activity, model/context usage, and compression stats above the editor.
|
|
31
|
-
- **Renderer-aware extensions.** Pix extensions can draw rows above/below the input, show stackable toasts, open searchable popup menus, and react through an isolated event bus.
|
|
32
|
-
- **Nicer terminal ergonomics.** Mouse scrolling, PageUp/PageDown scrollback, tab attention, status lines, terminal-output buffering, Nerd Font icons, and fallback icon mode are handled by the Pix renderer.
|
|
9
|
+
- Work with multiple workspace sessions in tabs and resume them after restart.
|
|
10
|
+
- Read tool calls as compact rows; click a row to expand or collapse details.
|
|
11
|
+
- Run local shell commands from chat with `!command`, or full TTY programs with `!!command`.
|
|
12
|
+
- Dictate prompts locally with Vosk in Russian or English.
|
|
13
|
+
- Improve a draft prompt with `/enhance`.
|
|
14
|
+
- Undo the last supported workspace edit with `/undo`.
|
|
15
|
+
- Search, import, export, clone, fork, and resume saved sessions.
|
|
16
|
+
- See status widgets for todos, subagents, model selection, context usage, and compaction.
|
|
17
|
+
- Use extensions that can show toasts, menus, and above-input widgets.
|
|
33
18
|
|
|
34
19
|
## Requirements
|
|
35
20
|
|
|
36
|
-
- Node.js `>=22.19.0 <25
|
|
37
|
-
- A terminal with good Unicode support.
|
|
38
|
-
-
|
|
39
|
-
-
|
|
21
|
+
- Node.js `>=22.19.0 <25`.
|
|
22
|
+
- A terminal with good Unicode support.
|
|
23
|
+
- Recommended font: JetBrainsMono Nerd Font. If icons render as squares, use the fallback icon theme.
|
|
24
|
+
- On Linux, clipboard integration works best with one of: `wl-copy`, `xclip`, `xsel`, or `termux-clipboard-set`.
|
|
25
|
+
- For voice dictation, install one recorder: SoX (`rec`/`sox`), `ffmpeg`, or `arecord` on Linux.
|
|
40
26
|
|
|
41
|
-
|
|
27
|
+
## Install
|
|
42
28
|
|
|
43
|
-
|
|
29
|
+
Fastest start:
|
|
44
30
|
|
|
45
|
-
|
|
31
|
+
```bash
|
|
32
|
+
npx pi-ui-extend install
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then run Pix in your project:
|
|
46
36
|
|
|
47
37
|
```bash
|
|
48
|
-
|
|
38
|
+
npx pi-ui-extend --cwd /path/to/workspace
|
|
49
39
|
```
|
|
50
40
|
|
|
51
|
-
|
|
41
|
+
For regular use, install Pix globally from npm so the `pix` command is always available:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm install -g pi-ui-extend --ignore-scripts
|
|
45
|
+
```
|
|
52
46
|
|
|
53
|
-
|
|
47
|
+
Check your installation and environment:
|
|
54
48
|
|
|
55
49
|
```bash
|
|
56
50
|
pix install
|
|
57
|
-
# or report only:
|
|
58
|
-
pix install --check
|
|
59
51
|
```
|
|
60
52
|
|
|
61
|
-
|
|
53
|
+
To only print the report without changing anything:
|
|
62
54
|
|
|
63
|
-
|
|
55
|
+
```bash
|
|
56
|
+
pix install --check
|
|
57
|
+
```
|
|
64
58
|
|
|
65
|
-
|
|
66
|
-
- `~/.config/pi/pi-tools-suite.jsonc`: enable/configure your LSP servers under `lsp.servers` and adjust pi-tools-suite modules or sub-agent presets if needed.
|
|
67
|
-
- In Pix, run `/opencode-import` to import opencode accounts. For Antigravity OAuth accounts, run `/antigravity-import` or add another account with `/antigravity-add-account`.
|
|
59
|
+
The published package includes the compiled JavaScript, the `pix` launcher, docs, and the bundled `pi-tools-suite` extension. End users do not need to clone this repository or build TypeScript.
|
|
68
60
|
|
|
69
|
-
On startup, Pix
|
|
61
|
+
On startup, Pix also links the bundled `pi-tools-suite` into Pi's standard user extension directory:
|
|
70
62
|
|
|
71
63
|
```text
|
|
72
64
|
~/.pi/agent/extensions/pi-tools-suite
|
|
73
65
|
```
|
|
74
66
|
|
|
75
|
-
|
|
67
|
+
Pix will not overwrite a normal directory at that path. If the path is a symlink created by Pix, it is refreshed automatically.
|
|
68
|
+
|
|
69
|
+
## First run
|
|
76
70
|
|
|
77
|
-
|
|
71
|
+
Open the project you want the agent to work in:
|
|
78
72
|
|
|
79
73
|
```bash
|
|
80
74
|
pix --cwd /path/to/workspace
|
|
81
75
|
```
|
|
82
76
|
|
|
83
|
-
If `--cwd` is omitted, Pix uses the current directory
|
|
77
|
+
If `--cwd` is omitted, Pix uses the current directory:
|
|
84
78
|
|
|
85
|
-
|
|
79
|
+
```bash
|
|
80
|
+
cd /path/to/workspace
|
|
81
|
+
pix
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Useful startup flags:
|
|
85
|
+
|
|
86
|
+
- `--cwd <path>` — workspace for files, settings, resources, and agent sessions.
|
|
87
|
+
- `--no-session` — start a temporary in-memory session without persistence.
|
|
88
|
+
- `--model <provider/model[:thinking]>` — choose the startup model, for example:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pix --model anthropic/claude-sonnet-4-20250514:medium
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Accounts and models
|
|
86
95
|
|
|
87
|
-
|
|
88
|
-
- `--no-session`: run with an in-memory SDK session.
|
|
89
|
-
- `--model <provider/model[:thinking]>`: request a specific model, for example `anthropic/claude-sonnet-4-20250514:medium`.
|
|
96
|
+
Pix uses Pi providers and accounts. After installation, you can usually import or add accounts from inside Pix:
|
|
90
97
|
|
|
91
|
-
|
|
98
|
+
- `/opencode-import` — import opencode accounts.
|
|
99
|
+
- `/antigravity-import` — import Antigravity OAuth accounts.
|
|
100
|
+
- `/antigravity-add-account` — add another Antigravity account.
|
|
101
|
+
- `/model` — choose a model.
|
|
102
|
+
- `/thinking` — choose a thinking level: `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, or `auto`.
|
|
103
|
+
- `/scoped-models` — configure the model list used by the picker and quick switching.
|
|
92
104
|
|
|
93
|
-
|
|
105
|
+
## Common actions
|
|
106
|
+
|
|
107
|
+
### Send a prompt
|
|
108
|
+
|
|
109
|
+
Type your request and press `Enter`.
|
|
110
|
+
|
|
111
|
+
### Run a shell command
|
|
94
112
|
|
|
95
113
|
```text
|
|
96
|
-
|
|
114
|
+
!npm test
|
|
97
115
|
```
|
|
98
116
|
|
|
99
|
-
|
|
117
|
+
The command runs locally and appears in the UI as a transient block. This output is not saved into the SDK session.
|
|
100
118
|
|
|
101
|
-
|
|
119
|
+
While a command is running:
|
|
102
120
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
121
|
+
- `Enter` sends the current editor text to the process stdin.
|
|
122
|
+
- `Ctrl+C` interrupts the process.
|
|
123
|
+
|
|
124
|
+
### Run an interactive TTY command
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
!!top
|
|
107
128
|
```
|
|
108
129
|
|
|
109
|
-
|
|
130
|
+
Use `!!` for full-screen or interactive programs.
|
|
110
131
|
|
|
111
|
-
|
|
132
|
+
### Dictate a prompt
|
|
112
133
|
|
|
113
|
-
- `
|
|
114
|
-
-
|
|
115
|
-
- `PIX_SKIP_VERSION_CHECK=1`
|
|
134
|
+
- `Ctrl+G` starts or stops local dictation.
|
|
135
|
+
- Click the microphone/language widget on the right to toggle dictation or switch language.
|
|
116
136
|
|
|
117
|
-
|
|
137
|
+
On first use, Pix downloads small Vosk models:
|
|
118
138
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
# or
|
|
122
|
-
pi update
|
|
123
|
-
```
|
|
139
|
+
- Russian: `vosk-model-small-ru-0.22`
|
|
140
|
+
- English: `vosk-model-small-en-us-0.15`
|
|
124
141
|
|
|
125
|
-
|
|
142
|
+
Language and enabled models are configured in `~/.config/pi/pix.jsonc`.
|
|
126
143
|
|
|
127
|
-
|
|
144
|
+
### Undo the last supported edit
|
|
128
145
|
|
|
129
|
-
```
|
|
130
|
-
|
|
146
|
+
```text
|
|
147
|
+
/undo
|
|
131
148
|
```
|
|
132
149
|
|
|
133
|
-
|
|
150
|
+
Undo is available for supported Pix file mutations.
|
|
134
151
|
|
|
135
|
-
|
|
136
|
-
npm run link:pix
|
|
137
|
-
```
|
|
152
|
+
## Keyboard shortcuts
|
|
138
153
|
|
|
139
|
-
|
|
154
|
+
- `Enter` — send the prompt.
|
|
155
|
+
- `Ctrl+C` — stop the current agent response; if the agent is idle, exit Pix.
|
|
156
|
+
- `Ctrl+D` — exit when the input is empty.
|
|
157
|
+
- `Ctrl+L` — redraw the screen.
|
|
158
|
+
- `Ctrl+G` — start or stop voice dictation.
|
|
159
|
+
- `PageUp` / `PageDown` — scroll history.
|
|
160
|
+
- Mouse wheel — scroll history.
|
|
161
|
+
- Click a tool row — expand or collapse tool output.
|
|
140
162
|
|
|
141
|
-
|
|
142
|
-
|
|
163
|
+
Open the in-app shortcut help with:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
/hotkeys
|
|
143
167
|
```
|
|
144
168
|
|
|
145
|
-
|
|
169
|
+
## Slash commands
|
|
146
170
|
|
|
147
|
-
|
|
148
|
-
|
|
171
|
+
Type `/` to open the command picker. Commands with arguments can also be typed directly.
|
|
172
|
+
|
|
173
|
+
| Command | Purpose |
|
|
174
|
+
|---|---|
|
|
175
|
+
| `/settings` | Show current session settings, model, and theme. |
|
|
176
|
+
| `/model` | Choose a model or set `provider/model[:thinking]`. |
|
|
177
|
+
| `/thinking` | Choose a thinking level or `auto`. |
|
|
178
|
+
| `/scoped-models` | Configure models for the picker and quick switching. |
|
|
179
|
+
| `/enhance` | Improve the current draft prompt. |
|
|
180
|
+
| `/copy` | Copy the last assistant response. |
|
|
181
|
+
| `/name` | Rename the session or generate a name automatically. |
|
|
182
|
+
| `/session` | Show session stats: messages, tokens, and cost. |
|
|
183
|
+
| `/usage` | Show quota/account usage and context fill. |
|
|
184
|
+
| `/export [path]` | Export the session. Default is HTML; `.jsonl` exports JSONL. |
|
|
185
|
+
| `/import <path.jsonl>` | Import and continue a JSONL session. |
|
|
186
|
+
| `/share` | Share the session as a private GitHub gist; requires the `gh` CLI. |
|
|
187
|
+
| `/fork [entry-id]` | Fork the session from the latest or selected user message. |
|
|
188
|
+
| `/clone` | Duplicate the current session at the current position. |
|
|
189
|
+
| `/jump [query]` | Jump to a previous user message. |
|
|
190
|
+
| `/search <text>` | Search saved sessions. |
|
|
191
|
+
| `/resume [path\|query]` | Open another session. |
|
|
192
|
+
| `/new` | Start a new session in the current tab. |
|
|
193
|
+
| `/new_tab` | Start a new session in a new tab. |
|
|
194
|
+
| `/compact [instructions]` | Compact context with optional instructions. |
|
|
195
|
+
| `/reload` | Reload keybindings, extensions, skills, prompts, and themes. |
|
|
196
|
+
| `/update` | Check for Pix updates; install from the shell with `pix update`. |
|
|
197
|
+
| `/changelog` | Show the changelog for Pi packages. |
|
|
198
|
+
| `/quit`, `/exit` | Exit Pix. |
|
|
199
|
+
|
|
200
|
+
Extensions, prompt templates, and skills can add more commands to the same picker.
|
|
201
|
+
|
|
202
|
+
## Update
|
|
203
|
+
|
|
204
|
+
Check for updates inside Pix:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
/update
|
|
149
208
|
```
|
|
150
209
|
|
|
151
|
-
|
|
210
|
+
Check or install updates from the shell:
|
|
152
211
|
|
|
153
212
|
```bash
|
|
154
|
-
|
|
213
|
+
pix update --check
|
|
214
|
+
pix update
|
|
155
215
|
```
|
|
156
216
|
|
|
157
|
-
|
|
217
|
+
Force reinstall:
|
|
158
218
|
|
|
159
219
|
```bash
|
|
160
|
-
|
|
220
|
+
pix update --force
|
|
161
221
|
```
|
|
162
222
|
|
|
163
|
-
|
|
223
|
+
`pix update` updates the Pix npm package, pinned Pi SDK dependencies, renderer-owned extensions, and the bundled `pi-tools-suite`. On the next startup, Pix refreshes the extension symlink in `~/.pi/agent/extensions/pi-tools-suite`.
|
|
164
224
|
|
|
165
|
-
|
|
166
|
-
runs inside the Pi host process. Its `@earendil-works/*` peerDependencies must
|
|
167
|
-
match the host Pi SDK version exactly, or npm can resolve a stale copy in the
|
|
168
|
-
suite's own `node_modules` and cause a double-load (e.g. `0.75.4` in the suite
|
|
169
|
-
vs `0.79.4` in the host).
|
|
225
|
+
Update checks are disabled by any of these environment variables:
|
|
170
226
|
|
|
171
|
-
|
|
172
|
-
|
|
227
|
+
- `PI_OFFLINE=1`
|
|
228
|
+
- `PI_SKIP_VERSION_CHECK=1`
|
|
229
|
+
- `PIX_SKIP_VERSION_CHECK=1`
|
|
230
|
+
|
|
231
|
+
If Pi packages are installed separately and managed by Pi itself, update them separately:
|
|
173
232
|
|
|
174
233
|
```bash
|
|
175
|
-
|
|
176
|
-
|
|
234
|
+
pi update --extensions
|
|
235
|
+
pi update
|
|
177
236
|
```
|
|
178
237
|
|
|
179
|
-
`npm run check` runs `npm run sync:sdk-pin:check` first, so a stale pin fails
|
|
180
|
-
the check fast. Use `npm run sync:sdk-pin:check` on its own for a drift-only
|
|
181
|
-
report (non-zero exit on drift).
|
|
182
|
-
|
|
183
238
|
## Configuration
|
|
184
239
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
- `PIX_DISABLE_TERMINAL_OUTPUT_BUFFER=1` or `PIX_TERMINAL_OUTPUT_BUFFER=0`: disable Pix terminal output region buffering.
|
|
188
|
-
- `PIX_USE_FALLBACK_ICONS=1` or `PIX_ICON_THEME=fallback`: use plain fallback icons when Nerd Font glyphs are unavailable.
|
|
189
|
-
- `PIX_ICON_THEME=nerdFont`: force the Nerd Font icon theme.
|
|
190
|
-
|
|
191
|
-
Pix user configuration is read from:
|
|
240
|
+
User Pix config:
|
|
192
241
|
|
|
193
242
|
```text
|
|
194
243
|
~/.config/pi/pix.jsonc
|
|
195
244
|
```
|
|
196
245
|
|
|
197
|
-
|
|
246
|
+
Common settings:
|
|
198
247
|
|
|
199
248
|
```jsonc
|
|
200
249
|
{
|
|
201
|
-
"iconTheme": "fallback"
|
|
250
|
+
"iconTheme": "fallback",
|
|
251
|
+
"dictation": {
|
|
252
|
+
"language": "en"
|
|
253
|
+
}
|
|
202
254
|
}
|
|
203
255
|
```
|
|
204
256
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
- `Enter`: submit the prompt.
|
|
208
|
-
- `!command`: run a local shell command in an in-chat ephemeral block. Output is visible only in the local UI and is not saved to the SDK session.
|
|
209
|
-
- While a `!command` shell is running: `Enter` sends editor text to shell stdin; `Ctrl+C` interrupts the shell process.
|
|
210
|
-
- `!!command`: run a shell command in the raw interactive terminal for full-screen or TTY programs.
|
|
211
|
-
- `Ctrl+C`: exit Pix, or abort the running agent first.
|
|
212
|
-
- `Ctrl+D`: exit when the input line is empty.
|
|
213
|
-
- `Ctrl+L`: redraw.
|
|
214
|
-
- `Ctrl+G`: start or stop local Vosk voice input.
|
|
215
|
-
- `PageUp` / `PageDown`: scroll the conversation.
|
|
216
|
-
- Mouse wheel: scroll the conversation.
|
|
217
|
-
- Click a tool row: expand or collapse that tool result.
|
|
218
|
-
- Click the right-aligned microphone/language status widget: toggle voice input and switch Russian/English dictation.
|
|
219
|
-
|
|
220
|
-
## Slash commands
|
|
257
|
+
Bundled `pi-tools-suite` config:
|
|
221
258
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|---|---|---|
|
|
226
|
-
| `/settings` | — | Show current session, model, theme, and key settings. |
|
|
227
|
-
| `/model` | `[provider/model[:thinking]]` | Select the active model. Without arguments, opens the model picker. With a reference like `anthropic/claude-sonnet-4-20250514:medium`, sets the model and optional thinking level directly. |
|
|
228
|
-
| `/scoped-models` | `[refs…\|reset]` | Show or set the models used by the model selector and cycling. Pass one or more `provider/model[:thinking]` references separated by spaces or commas. Use `reset` to restore the default favorites. |
|
|
229
|
-
| `/thinking` | `[level\|auto]` | Select the thinking level. Without arguments, opens the thinking picker. Accepts an explicit level (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`) or `auto`, which chooses a supported level per prompt. |
|
|
230
|
-
| `/enhance` | — | Improve the current prompt draft using the prompt enhancer model. |
|
|
231
|
-
| `/export` | `[path]` | Export the session. Defaults to HTML. Pass a `.jsonl` path to export as JSONL. |
|
|
232
|
-
| `/import` | `<path.jsonl>` | Import and resume a session from a JSONL file. |
|
|
233
|
-
| `/share` | — | Share the session as a private GitHub gist (requires `gh` CLI). |
|
|
234
|
-
| `/copy` | — | Copy the last agent message to the clipboard. |
|
|
235
|
-
| `/name` | `[name]` | Set the session display name. Without arguments, generate one automatically using the session-title logic. |
|
|
236
|
-
| `/session` | — | Show session info: message counts, token usage, and cost. |
|
|
237
|
-
| `/usage` | — | Show local account quota usage and context window utilization. |
|
|
238
|
-
| `/changelog` | — | Show the Pi package changelog. |
|
|
239
|
-
| `/update` | `[--force\|--help]` | Check for Pix package updates. `/update` is check-only; run `pix update` in a shell to install. |
|
|
240
|
-
| `/hotkeys` | — | Show keyboard shortcuts. |
|
|
241
|
-
| `/fork` | `[entry-id]` | Fork the session from the latest or specified user-message entry. |
|
|
242
|
-
| `/clone` | — | Duplicate the current session at the current position. |
|
|
243
|
-
| `/jump` | `[query]` | Jump to a previous user message. Opens the message picker, optionally filtered by query. |
|
|
244
|
-
| `/search` | `<text>` | Search sessions for matching text and open a result in a new tab. |
|
|
245
|
-
| `/reload` | — | Reload keybindings, extensions, skills, prompts, and themes from disk. |
|
|
246
|
-
| `/resume` | `[path\|query]` | Resume a different session. Without arguments, opens the session picker. |
|
|
247
|
-
| `/new` | — | Start a fresh session in the current tab. |
|
|
248
|
-
| `/new_tab` | — | Open a fresh session in a new tab. |
|
|
249
|
-
| `/compact` | `[instructions]` | Manually compact the session context, optionally with custom instructions for the compaction. |
|
|
250
|
-
| `/quit`, `/exit` | — | Quit the renderer. |
|
|
251
|
-
|
|
252
|
-
Extensions, prompt templates, and skills may register additional slash commands that appear in the command picker alongside the built-in ones.
|
|
253
|
-
|
|
254
|
-
## Voice input
|
|
255
|
-
|
|
256
|
-
Pix can dictate into the prompt through local Vosk. The first start for each language downloads the small model into the gitignored `models/vosk/` directory inside this project:
|
|
259
|
+
```text
|
|
260
|
+
~/.config/pi/pi-tools-suite.jsonc
|
|
261
|
+
```
|
|
257
262
|
|
|
258
|
-
-
|
|
259
|
-
- English: `vosk-model-small-en-us-0.15`
|
|
263
|
+
Use it to enable and configure LSP servers, sub-agent presets, and tool-suite modules.
|
|
260
264
|
|
|
261
|
-
|
|
265
|
+
Useful environment variables:
|
|
262
266
|
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
267
|
+
- `PIX_USE_FALLBACK_ICONS=1` or `PIX_ICON_THEME=fallback` — use plain symbols instead of Nerd Font icons.
|
|
268
|
+
- `PIX_ICON_THEME=nerdFont` — force Nerd Font icons.
|
|
269
|
+
- `PIX_DISABLE_TERMINAL_OUTPUT_BUFFER=1` or `PIX_TERMINAL_OUTPUT_BUFFER=0` — disable the terminal output buffer region.
|
|
266
270
|
|
|
267
|
-
|
|
271
|
+
## Troubleshooting
|
|
268
272
|
|
|
269
|
-
|
|
273
|
+
### Node is too old
|
|
270
274
|
|
|
271
|
-
Pix
|
|
275
|
+
Pix requires Node.js `>=22.19.0 <25`. Upgrade Node with your version manager, for example:
|
|
272
276
|
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
PixExtensionUIContext,
|
|
277
|
-
PixMenuItem,
|
|
278
|
-
ToastKind,
|
|
279
|
-
ToastNotifier,
|
|
280
|
-
} from "pi-ui-extend/sdk";
|
|
281
|
-
import { TOAST_KINDS, isToastKind } from "pi-ui-extend/sdk";
|
|
277
|
+
```bash
|
|
278
|
+
nvm install 22
|
|
279
|
+
nvm use 22
|
|
282
280
|
```
|
|
283
281
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
### Toasts
|
|
287
|
-
|
|
288
|
-
Pix toasts are stackable by design: showing a new toast does not replace existing visible toasts. Each toast auto-hides independently after the renderer timeout.
|
|
282
|
+
or:
|
|
289
283
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
|
|
294
|
-
- `warning`
|
|
295
|
-
- `info`
|
|
284
|
+
```bash
|
|
285
|
+
mise install node@22.19.0
|
|
286
|
+
mise use -g node@22.19.0
|
|
287
|
+
```
|
|
296
288
|
|
|
297
|
-
|
|
289
|
+
### Icons are rendered as squares
|
|
298
290
|
|
|
299
|
-
|
|
300
|
-
export async function activate(ctx: { ui: PixExtensionUIContext }) {
|
|
301
|
-
ctx.ui.toast.success("Saved");
|
|
302
|
-
ctx.ui.toast.error("Build failed");
|
|
303
|
-
ctx.ui.toast.warning("Using fallback model");
|
|
304
|
-
ctx.ui.toast.info("Index refreshed");
|
|
291
|
+
Start Pix with fallback icons:
|
|
305
292
|
|
|
306
|
-
|
|
307
|
-
|
|
293
|
+
```bash
|
|
294
|
+
PIX_USE_FALLBACK_ICONS=1 pix
|
|
308
295
|
```
|
|
309
296
|
|
|
310
|
-
|
|
297
|
+
Or save the setting in `~/.config/pi/pix.jsonc`:
|
|
311
298
|
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
|
|
299
|
+
```jsonc
|
|
300
|
+
{
|
|
301
|
+
"iconTheme": "fallback"
|
|
302
|
+
}
|
|
315
303
|
```
|
|
316
304
|
|
|
317
|
-
###
|
|
318
|
-
|
|
319
|
-
Use `ctx.ui.aboveInput` to render extension-controlled rows above the prompt editor, in the same area where Pix shows built-in todo and subagents panels.
|
|
305
|
+
### Clipboard does not work on Linux
|
|
320
306
|
|
|
321
|
-
|
|
322
|
-
ctx.ui.aboveInput.set("my-extension/status", [
|
|
323
|
-
"My extension is watching files",
|
|
324
|
-
"Press /my-command for details",
|
|
325
|
-
]);
|
|
307
|
+
Install one of the clipboard helpers: `wl-copy`, `xclip`, `xsel`, or `termux-clipboard-set`, then run:
|
|
326
308
|
|
|
327
|
-
|
|
309
|
+
```bash
|
|
310
|
+
pix install --check
|
|
328
311
|
```
|
|
329
312
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
```ts
|
|
333
|
-
const widget: ExtensionWidgetFactory = (tui) => ({
|
|
334
|
-
render: () => ["Dynamic extension row"],
|
|
335
|
-
invalidate: () => tui.requestRender(),
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
ctx.ui.renderAboveInput("my-extension/dynamic", widget);
|
|
339
|
-
```
|
|
313
|
+
### Voice dictation does not work
|
|
340
314
|
|
|
341
|
-
|
|
315
|
+
Check that one recorder is installed: SoX, `ffmpeg`, or `arecord`. Then restart Pix and press `Ctrl+G`.
|
|
342
316
|
|
|
343
|
-
|
|
317
|
+
## For developers and extension authors
|
|
344
318
|
|
|
345
|
-
|
|
319
|
+
This README focuses on installing and using Pix as an end user. If you want to develop Pix itself or write renderer-aware extensions, see the source tree, `docs/`, and the exported SDK entrypoint:
|
|
346
320
|
|
|
347
321
|
```ts
|
|
348
|
-
|
|
349
|
-
{ value: "copy", label: "Copy", description: "Copy result" },
|
|
350
|
-
{ value: "open", label: "Open", description: "Open in editor" },
|
|
351
|
-
{ value: "delete", label: "Delete", description: "Remove item", variant: "error" },
|
|
352
|
-
], {
|
|
353
|
-
title: "Choose an action",
|
|
354
|
-
placeholder: "Filter actions",
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
if (choice === "copy") ctx.ui.toast.success("Copied");
|
|
322
|
+
import type { PixExtensionUIContext } from "pi-ui-extend/sdk";
|
|
358
323
|
```
|
|
359
324
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
## Release process
|
|
363
|
-
|
|
364
|
-
Maintainers publish a new npm version with:
|
|
325
|
+
Local development from a source checkout usually starts with:
|
|
365
326
|
|
|
366
327
|
```bash
|
|
367
|
-
npm
|
|
368
|
-
npm run
|
|
369
|
-
npm run
|
|
328
|
+
npm install --ignore-scripts
|
|
329
|
+
npm run dev -- --cwd /path/to/workspace
|
|
330
|
+
npm run check
|
|
370
331
|
```
|
|
371
|
-
|
|
372
|
-
The publish command requires a clean `master`, runs release checks, bumps the root package version, smoke-tests the packed tarball, and pushes the release tag. GitHub Actions publishes tagged releases to npm using the `NPM_TOKEN` repository secret.
|
|
373
|
-
|
|
374
|
-
For the full release checklist, see [docs/release.md](docs/release.md).
|
|
375
|
-
|
|
376
|
-
## Current limitations
|
|
377
|
-
|
|
378
|
-
Pix is actively evolving. Known gaps include:
|
|
379
|
-
|
|
380
|
-
- Text selection/copy support in the custom renderer.
|
|
381
|
-
- Full prompt editor parity with mature terminal editors.
|
|
382
|
-
- Dedicated session picker/fork UI.
|
|
383
|
-
- Dedicated model picker UI.
|
|
384
|
-
- Extension dialog rendering beyond SDK defaults.
|
package/dist/app/constants.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ResolvedToolRule } from "../config.js";
|
|
2
|
-
export declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
2
|
+
export declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
3
3
|
export declare const THINKING_MENU_MAX_ROWS: number;
|
|
4
|
-
export declare const PI_FAVORITE_MODEL_REFS: readonly ["amazon-bedrock/us.anthropic.claude-opus-4-6-v1", "anthropic/claude-opus-4-8", "openai/gpt-5.4", "azure-openai-responses/gpt-5.4", "openai-codex/gpt-5.
|
|
4
|
+
export declare const PI_FAVORITE_MODEL_REFS: readonly ["amazon-bedrock/us.anthropic.claude-opus-4-6-v1", "anthropic/claude-opus-4-8", "openai/gpt-5.4", "azure-openai-responses/gpt-5.4", "openai-codex/gpt-5.6-sol", "deepseek/deepseek-v4-pro", "google/gemini-3.1-pro-preview", "google-vertex/gemini-3.1-pro-preview", "github-copilot/gpt-5.4", "openrouter/moonshotai/kimi-k2.6", "vercel-ai-gateway/zai/glm-5.2", "xai/grok-4.20-0309-reasoning", "groq/openai/gpt-oss-120b", "cerebras/zai-glm-4.7", "zai/glm-5.2", "mistral/devstral-medium-latest", "minimax/MiniMax-M2.7", "minimax-cn/MiniMax-M2.7", "moonshotai/kimi-k2.6", "moonshotai-cn/kimi-k2.6", "huggingface/moonshotai/Kimi-K2.6", "fireworks/accounts/fireworks/models/kimi-k2p6", "together/moonshotai/Kimi-K2.6", "opencode/kimi-k2.6", "opencode-go/kimi-k2.6", "kimi-coding/kimi-for-coding", "cloudflare-workers-ai/@cf/moonshotai/kimi-k2.6", "cloudflare-ai-gateway/workers-ai/@cf/moonshotai/kimi-k2.6", "xiaomi/mimo-v2.5-pro", "xiaomi-token-plan-cn/mimo-v2.5-pro", "xiaomi-token-plan-ams/mimo-v2.5-pro", "xiaomi-token-plan-sgp/mimo-v2.5-pro"];
|
|
5
5
|
export declare const SLASH_COMMAND_MENU_MAX_ROWS = 6;
|
|
6
6
|
export declare const RESUME_MENU_MAX_ROWS = 20;
|
|
7
7
|
export declare const RESUME_MENU_INITIAL_SESSION_ROWS = 30;
|
package/dist/app/constants.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
export const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
2
|
+
export const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
3
3
|
export const THINKING_MENU_MAX_ROWS = THINKING_LEVELS.length + 1;
|
|
4
4
|
export const PI_FAVORITE_MODEL_REFS = [
|
|
5
5
|
"amazon-bedrock/us.anthropic.claude-opus-4-6-v1",
|
|
6
6
|
"anthropic/claude-opus-4-8",
|
|
7
7
|
"openai/gpt-5.4",
|
|
8
8
|
"azure-openai-responses/gpt-5.4",
|
|
9
|
-
"openai-codex/gpt-5.
|
|
9
|
+
"openai-codex/gpt-5.6-sol",
|
|
10
10
|
"deepseek/deepseek-v4-pro",
|
|
11
11
|
"google/gemini-3.1-pro-preview",
|
|
12
12
|
"google-vertex/gemini-3.1-pro-preview",
|
|
@@ -82,6 +82,7 @@ export class AppMenuItemsController {
|
|
|
82
82
|
level === "off" ? "disabled none no reasoning" : "reasoning thinking effort",
|
|
83
83
|
level === "minimal" ? "fast small" : "",
|
|
84
84
|
level === "xhigh" ? "extra highest maximum" : "",
|
|
85
|
+
level === "max" ? "maximum most" : "",
|
|
85
86
|
].filter(Boolean),
|
|
86
87
|
}));
|
|
87
88
|
return fuzzySearch(items, query).map((match) => ({
|
|
@@ -217,6 +218,8 @@ export class AppMenuItemsController {
|
|
|
217
218
|
return "High reasoning";
|
|
218
219
|
case "xhigh":
|
|
219
220
|
return "Extra high reasoning";
|
|
221
|
+
case "max":
|
|
222
|
+
return "Maximum reasoning";
|
|
220
223
|
}
|
|
221
224
|
}
|
|
222
225
|
}
|