pi-ui-extend 0.1.66 → 0.1.67
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 +345 -209
- package/assets/screenshots/pix-adaptive-todo.png +0 -0
- package/assets/screenshots/pix-adaptive-todo.svg +34 -0
- package/assets/screenshots/pix-command-menu.png +0 -0
- package/assets/screenshots/pix-command-menu.svg +49 -0
- package/assets/screenshots/pix-overview.png +0 -0
- package/assets/screenshots/pix-overview.svg +34 -0
- package/assets/screenshots/pix-subagents.png +0 -0
- package/assets/screenshots/pix-subagents.svg +34 -0
- package/assets/screenshots/pix-tabs.png +0 -0
- package/assets/screenshots/pix-tabs.svg +34 -0
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -1,332 +1,468 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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.
|
|
1
|
+
<div align="center">
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
# Pix
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
**A workspace-first terminal UI for [Pi](https://github.com/badlogic/pi-mono) — built for real coding sessions, not terminal log archaeology.**
|
|
8
6
|
|
|
9
|
-
|
|
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.
|
|
7
|
+
Tabs, readable tool activity, session navigation, local voice input, an interactive shell, and a bundled toolkit for repository-scale agent work.
|
|
18
8
|
|
|
19
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/pi-ui-extend)
|
|
10
|
+
[](https://www.npmjs.com/package/pi-ui-extend)
|
|
11
|
+
[](https://github.com/dnaroid/pix/actions/workflows/check.yml)
|
|
12
|
+
[](#requirements)
|
|
20
13
|
|
|
21
|
-
|
|
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.
|
|
14
|
+
</div>
|
|
26
15
|
|
|
27
|
-
|
|
16
|
+

|
|
28
17
|
|
|
29
|
-
|
|
18
|
+
## Start in two commands
|
|
30
19
|
|
|
31
20
|
```bash
|
|
32
21
|
npx pi-ui-extend install
|
|
22
|
+
npx pi-ui-extend --cwd .
|
|
33
23
|
```
|
|
34
24
|
|
|
35
|
-
|
|
25
|
+
The setup command checks the icon font, the `pi` CLI, and clipboard support. The second command opens the current project in Pix without requiring a global Pix install.
|
|
36
26
|
|
|
37
|
-
|
|
38
|
-
npx pi-ui-extend --cwd /path/to/workspace
|
|
39
|
-
```
|
|
27
|
+
> Already installed globally? Run `pix --cwd .`.
|
|
40
28
|
|
|
41
|
-
|
|
29
|
+
## Why Pix?
|
|
42
30
|
|
|
43
|
-
|
|
44
|
-
npm install -g pi-ui-extend --ignore-scripts
|
|
45
|
-
```
|
|
31
|
+
Pi provides the agent runtime, models, tools, skills, extensions, and persistent sessions. Pix keeps that SDK-native foundation and replaces the stock interface with a renderer designed around long, tool-heavy coding work.
|
|
46
32
|
|
|
47
|
-
|
|
33
|
+
- **See the work, not the noise.** Thinking and tool calls are compact rows that expand on demand. Mutating tools, searches, failures, todos, and sub-agents are visually distinct.
|
|
34
|
+
- **Keep projects organized.** Tabs are scoped to the working directory and survive restarts. Search, resume, fork, clone, jump through, import, export, share, or delete sessions without leaving the terminal.
|
|
35
|
+
- **Stay in flow.** Run quick commands with `!`, open a raw interactive terminal with `!!`, paste images, follow file links, dictate in English or Russian, and improve a prompt before sending it.
|
|
36
|
+
- **Know what the agent is doing.** The status area exposes model, thinking level, context, usage, workspace, todos, sub-agents, voice state, and prompt actions — with mouse targets where useful.
|
|
37
|
+
- **Bring a serious toolkit.** Pix ships with `pi-tools-suite`: 17 integrated modules for indexed repository discovery, AST edits, LSP diagnostics, parallel agents, durable todos, context compression, web access, provider accounts, and more.
|
|
38
|
+
- **Use the models you want.** Pix runs on Pi's provider ecosystem and supports model switching, scoped model lists, per-model thinking levels, usage views, autocomplete, and fallback-aware helper workflows.
|
|
48
39
|
|
|
49
|
-
|
|
50
|
-
pix install
|
|
51
|
-
```
|
|
40
|
+
Pix is not a separate agent protocol or an RPC wrapper around Pi. It runs on the Pi SDK, so the runtime, session format, extensions, skills, prompts, and tools remain part of the same ecosystem.
|
|
52
41
|
|
|
53
|
-
|
|
42
|
+
## The interface
|
|
54
43
|
|
|
55
|
-
|
|
56
|
-
pix install --check
|
|
57
|
-
```
|
|
44
|
+
### A workspace, not a transcript
|
|
58
45
|
|
|
59
|
-
|
|
46
|
+
- **Persistent tabs** for independent tasks in the same project.
|
|
47
|
+
- **Lazy session loading** so restoring a workspace does not eagerly start every runtime.
|
|
48
|
+
- **Compact activity rows** with configurable previews, colors, expansion, and output filtering.
|
|
49
|
+
- **Dedicated todo and sub-agent panels** instead of dumping orchestration state into chat.
|
|
50
|
+
- **Mouse-aware navigation** for tabs, status actions, scrolling, expandable blocks, menus, links, and the scrollbar.
|
|
51
|
+
- **Rich terminal content** including Markdown, code blocks, diffs, file links, images, toasts, widgets, dialogs, and custom extension UI.
|
|
52
|
+
- **Dark and light themes**, configurable model colors, and Nerd Font icons with graceful fallbacks.
|
|
60
53
|
|
|
61
|
-
|
|
54
|
+

|
|
62
55
|
|
|
63
|
-
|
|
64
|
-
~/.pi/agent/extensions/pi-tools-suite
|
|
65
|
-
```
|
|
56
|
+
### Commands are searchable
|
|
66
57
|
|
|
67
|
-
|
|
58
|
+
Type `/` to open the command picker. Continue typing to filter built-in commands and commands contributed by extensions.
|
|
68
59
|
|
|
69
|
-
|
|
60
|
+

|
|
70
61
|
|
|
71
|
-
|
|
62
|
+
### Agent activity stays readable
|
|
72
63
|
|
|
73
|
-
|
|
74
|
-
pix --cwd /path/to/workspace
|
|
75
|
-
```
|
|
64
|
+
Pix gives different kinds of work different visual weight:
|
|
76
65
|
|
|
77
|
-
|
|
66
|
+
- thinking can remain collapsed until you need it;
|
|
67
|
+
- reads and searches show concise previews;
|
|
68
|
+
- edits and patches are expanded by default;
|
|
69
|
+
- long shell output can show its tail while the command runs;
|
|
70
|
+
- failures remain visible;
|
|
71
|
+
- tool rows can be expanded or collapsed with the mouse;
|
|
72
|
+
- todo and sub-agent state is rendered as structured UI.
|
|
78
73
|
|
|
79
|
-
|
|
80
|
-
cd /path/to/workspace
|
|
81
|
-
pix
|
|
82
|
-
```
|
|
74
|
+
All of this is configurable per exact tool name or wildcard such as `repo_*` and `ast_*`.
|
|
83
75
|
|
|
84
|
-
|
|
76
|
+
**Adaptive plans keep dependencies, blockers, ownership, and the active step visible:**
|
|
85
77
|
|
|
86
|
-
|
|
87
|
-
- `--no-session` — start a temporary in-memory session without persistence.
|
|
88
|
-
- `--model <provider/model[:thinking]>` — choose the startup model, for example:
|
|
78
|
+

|
|
89
79
|
|
|
90
|
-
|
|
91
|
-
pix --model anthropic/claude-sonnet-4-20250514:medium
|
|
92
|
-
```
|
|
80
|
+
**Parallel sub-agents report live status without taking over the main session:**
|
|
93
81
|
|
|
94
|
-
|
|
82
|
+

|
|
95
83
|
|
|
96
|
-
|
|
84
|
+
## Bundled: pi-tools-suite
|
|
97
85
|
|
|
98
|
-
|
|
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.
|
|
86
|
+
On startup, Pix tries to link the bundled suite into the active Pi agent directory (normally `~/.pi/agent/extensions/pi-tools-suite`). An existing non-symlink installation is preserved. Suite modules are designed to work without Pix-specific UI where they are loaded; suite-spawned sub-agents intentionally use an isolated, minimal extension set.
|
|
104
87
|
|
|
105
|
-
|
|
88
|
+
| Capability | Included modules | What it adds |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| Parallel work | `async-subagents` | Isolated asynchronous agents, presets, model fallback routing, result artifacts, `/ultrawork`, and `/hyperplan`. |
|
|
91
|
+
| Repository intelligence | `repo-discovery` | Indexed architecture, structure, AST, semantic search, symbol explanation, and dependency/caller tools when the repository has an `.indexer-cli` index. |
|
|
92
|
+
| Structural code changes | `ast-grep` | Language-aware AST search, rewrite previews, and explicit AST mutation tools. |
|
|
93
|
+
| Fast feedback | `lsp`, `comment-checker` | Project-trusted language-server diagnostics and a guard against low-quality AI-style code comments. |
|
|
94
|
+
| Durable planning | `todo` | Hierarchical todos with blockers, owners, persistence, scoped resumes, and per-task thinking levels. |
|
|
95
|
+
| Context control | `dcp` | Explicit compression and context pruning for long sessions, including sidecar state. |
|
|
96
|
+
| Local web access | `web-search` | Web search and page extraction through a local Ollama instance. |
|
|
97
|
+
| Providers and quotas | `antigravity-auth`, `opencode-import`, `usage` | Antigravity OAuth/account failover, OpenCode credential import, and multi-provider usage views. |
|
|
98
|
+
| Reusable workflows | `prompt-commands`, `skill-installer`, `session-name` | Prompt-command CRUD, skill installation/export, and session naming. |
|
|
99
|
+
| Model compatibility | `coding-discipline`, `model-tools`, `codex-reasoning-fix` | Model-specific discipline and vision lookup, compatibility aliases, and a Codex reasoning payload workaround. |
|
|
106
100
|
|
|
107
|
-
|
|
101
|
+
Every module can be disabled. Optional integrations only activate when their requirements are available — for example, repository tools require an index, web tools require local Ollama web search, and LSP servers must be configured and trusted.
|
|
108
102
|
|
|
109
|
-
|
|
103
|
+
Suite configuration is loaded from:
|
|
110
104
|
|
|
111
|
-
|
|
105
|
+
1. `~/.config/pi/pi-tools-suite.jsonc`
|
|
106
|
+
2. `$PI_CONFIG_DIR/pi-tools-suite.jsonc`, when set
|
|
107
|
+
3. the nearest project `.pi/pi-tools-suite.jsonc`
|
|
112
108
|
|
|
113
|
-
|
|
114
|
-
!npm test
|
|
115
|
-
```
|
|
109
|
+
Later files override earlier ones. Disable modules with `disabledModules`, `PI_TOOLS_SUITE_DISABLED_MODULES`, or disable the entire suite with `PI_TOOLS_SUITE_DISABLED=1`. DCP settings are intentionally user-scoped and belong in the shared user configuration.
|
|
116
110
|
|
|
117
|
-
|
|
111
|
+
## What you can build with it
|
|
118
112
|
|
|
119
|
-
|
|
113
|
+
| Workflow | Pix advantage |
|
|
114
|
+
| --- | --- |
|
|
115
|
+
| Explore an unfamiliar repository | Start with an indexed architecture map, search behavior semantically, inspect symbols, and trace dependencies without flooding context with entire files. |
|
|
116
|
+
| Run a large refactor | Combine repository discovery, AST-aware changes, LSP feedback, workspace undo, and a structured todo plan. |
|
|
117
|
+
| Investigate several hypotheses | Launch focused sub-agents in parallel, keep working, and inspect compact result artifacts when they finish. |
|
|
118
|
+
| Carry a task across many sessions | Persist tabs and todos, search session history, fork from an earlier message, and compress old context without losing the active objective. |
|
|
119
|
+
| Work across providers | Switch models and thinking levels, scope the model picker, import supported accounts, inspect quotas, and use fallback-aware sub-agent presets. |
|
|
120
|
+
| Keep your hands in the terminal | Run quick shell commands inline, use a full interactive TTY when needed, paste images, dictate prompts, and open file links directly. |
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
- `Ctrl+C` interrupts the process.
|
|
122
|
+
## Install
|
|
123
123
|
|
|
124
|
-
###
|
|
124
|
+
### Requirements
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
- **Node.js `>=22.19.0 <25`**
|
|
127
|
+
- macOS, Linux, or Windows terminal with 256-color support
|
|
128
|
+
- npm or another way to run the published npm package
|
|
129
|
+
- provider credentials supported by Pi, unless you only use locally configured models
|
|
129
130
|
|
|
130
|
-
|
|
131
|
+
Recommended:
|
|
131
132
|
|
|
132
|
-
|
|
133
|
+
- **JetBrainsMono Nerd Font** for the intended icons; `pix install` can install it for the current user
|
|
134
|
+
- a terminal with mouse reporting and Kitty keyboard protocol support for the richest interaction
|
|
135
|
+
- Linux clipboard helper: `wl-clipboard` on Wayland or `xclip`/`xsel` on X11
|
|
133
136
|
|
|
134
|
-
|
|
135
|
-
- Click the microphone/language widget on the right to toggle dictation or switch language.
|
|
137
|
+
Optional:
|
|
136
138
|
|
|
137
|
-
|
|
139
|
+
- the `vosk` optional dependency for local voice input
|
|
140
|
+
- an audio recorder for dictation: SoX (`rec`/`sox`), `ffmpeg`, or `arecord` on Linux
|
|
141
|
+
- `tmux` and `rsvg-convert` only if you want to regenerate README screenshots
|
|
142
|
+
- Ollama with web search enabled for the bundled `web_search` and `web_fetch` tools
|
|
143
|
+
- language servers for the LSP module
|
|
138
144
|
|
|
139
|
-
-
|
|
140
|
-
- English: `vosk-model-small-en-us-0.15`
|
|
141
|
-
|
|
142
|
-
Language and enabled models are configured in `~/.config/pi/pix.jsonc`.
|
|
145
|
+
### One-shot use
|
|
143
146
|
|
|
144
|
-
|
|
147
|
+
```bash
|
|
148
|
+
# Check/install runtime helpers for this user
|
|
149
|
+
npx pi-ui-extend install
|
|
145
150
|
|
|
146
|
-
|
|
147
|
-
/
|
|
151
|
+
# Start Pix in a project
|
|
152
|
+
npx pi-ui-extend --cwd /path/to/project
|
|
148
153
|
```
|
|
149
154
|
|
|
150
|
-
|
|
155
|
+
### Global install
|
|
151
156
|
|
|
152
|
-
|
|
157
|
+
```bash
|
|
158
|
+
npm install -g pi-ui-extend --ignore-scripts
|
|
159
|
+
pix install
|
|
160
|
+
pix --cwd /path/to/project
|
|
161
|
+
```
|
|
153
162
|
|
|
154
|
-
|
|
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.
|
|
163
|
+
The package exposes both `pix` and `pi-ui-extend`; they launch the same application.
|
|
162
164
|
|
|
163
|
-
|
|
165
|
+
### Check without changing anything
|
|
164
166
|
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
+
```bash
|
|
168
|
+
npx pi-ui-extend install --check
|
|
169
|
+
# or, after a global install
|
|
170
|
+
pix install --check
|
|
167
171
|
```
|
|
168
172
|
|
|
169
|
-
|
|
170
|
-
|
|
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 Pix and global Pi compatibility; 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:
|
|
173
|
+
### Start options
|
|
205
174
|
|
|
206
175
|
```text
|
|
207
|
-
|
|
176
|
+
pix [--cwd <path>] [--no-session] [--session <path>]
|
|
177
|
+
[--theme dark|light] [--model <provider/model[:thinking]>]
|
|
208
178
|
```
|
|
209
179
|
|
|
210
|
-
|
|
180
|
+
Examples:
|
|
211
181
|
|
|
212
182
|
```bash
|
|
213
|
-
pix
|
|
214
|
-
pix
|
|
183
|
+
pix --cwd .
|
|
184
|
+
pix --cwd ../pi-mono --theme light
|
|
185
|
+
pix --cwd . --model anthropic/claude-sonnet-4-20250514:medium
|
|
186
|
+
pix --cwd . --no-session
|
|
215
187
|
```
|
|
216
188
|
|
|
217
|
-
|
|
189
|
+
## Models and accounts
|
|
218
190
|
|
|
219
|
-
|
|
220
|
-
pix update --force
|
|
221
|
-
```
|
|
191
|
+
Pix uses Pi's model and authentication stores. Environment-based API keys and credentials already configured for Pi are available to Pix.
|
|
222
192
|
|
|
223
|
-
|
|
193
|
+
- Run the stock `pi` TUI when you need its provider login/logout dialogs, then use `/reload` in Pix.
|
|
194
|
+
- Run `/opencode-import` to import supported credentials from OpenCode.
|
|
195
|
+
- Run `/antigravity-add-account` to add an Antigravity OAuth account, then use `/antigravity-account` and `/antigravity-status` to manage it.
|
|
196
|
+
- Use `/model`, `/scoped-models`, and `/thinking` to control the active runtime.
|
|
197
|
+
- Use `/default-model`, `/default-thinking`, and `/autocomplete` to change defaults for new sessions.
|
|
198
|
+
- Use `/usage` or the clickable usage status to inspect locally available quota data.
|
|
224
199
|
|
|
225
|
-
|
|
200
|
+
Provider availability and thinking levels depend on the selected model. Pix does not upload private repository data merely to populate the model or usage UI; normal model requests still follow the provider you choose.
|
|
226
201
|
|
|
227
|
-
|
|
202
|
+
## Everyday interaction
|
|
228
203
|
|
|
229
|
-
|
|
230
|
-
- `PI_SKIP_VERSION_CHECK=1`
|
|
231
|
-
- `PIX_SKIP_VERSION_CHECK=1`
|
|
204
|
+
### Prompts
|
|
232
205
|
|
|
233
|
-
|
|
206
|
+
- **Enter** sends the current prompt.
|
|
207
|
+
- **Shift+Enter** inserts a newline.
|
|
208
|
+
- **Tab** accepts autocomplete or the selected popup item.
|
|
209
|
+
- `/enhance` — or the status-bar magic wand — improves the current draft with the configured helper model.
|
|
210
|
+
- `/queue <message>` stores a delayed message you can send later from the queue menu.
|
|
211
|
+
- Prompt history is searchable with `/history` and navigable with Up/Down when no popup owns those keys.
|
|
234
212
|
|
|
235
|
-
|
|
236
|
-
|
|
213
|
+
Pix can provide inline, model-backed autocomplete with configurable debounce, timeout, token budget, and recent-message context.
|
|
214
|
+
|
|
215
|
+
### Local shell
|
|
216
|
+
|
|
217
|
+
```text
|
|
218
|
+
!git status
|
|
219
|
+
!npm test
|
|
220
|
+
!!npm run dev
|
|
221
|
+
!!python
|
|
237
222
|
```
|
|
238
223
|
|
|
224
|
+
- `!command` runs a shell command and renders the result in chat. It is local UI activity and is not saved to the Pi session.
|
|
225
|
+
- While it runs, submit editor text to its stdin; use `Ctrl-C` to interrupt.
|
|
226
|
+
- `!!command` opens a raw interactive terminal for REPLs, TUIs, debuggers, and development servers. Exit it to return to Pix.
|
|
227
|
+
|
|
228
|
+
### Images, clipboard, and files
|
|
229
|
+
|
|
230
|
+
- Paste an image from the clipboard with `Ctrl+V`/`Cmd+V` in supported terminals.
|
|
231
|
+
- Add image/file references to prompts and open detected file links from rendered output.
|
|
232
|
+
- `/copy` copies the last assistant message.
|
|
233
|
+
- Pix integrates with the native clipboard on macOS and Windows and common Wayland/X11 helpers on Linux.
|
|
234
|
+
|
|
235
|
+
### Local voice input
|
|
236
|
+
|
|
237
|
+
Press `Ctrl+G` or click the microphone in the status area to start/stop dictation. Pix supports configurable local Vosk models and ships defaults for:
|
|
238
|
+
|
|
239
|
+
- English: `vosk-model-small-en-us-0.15`
|
|
240
|
+
- Russian: `vosk-model-small-ru-0.22`
|
|
241
|
+
|
|
242
|
+
The selected model is downloaded on first use. Recognition is local; the resulting text is inserted into the editor so you can review it before sending.
|
|
243
|
+
|
|
244
|
+
### Workspace undo
|
|
245
|
+
|
|
246
|
+
Pix records supported agent file mutations against the user message that started them. Open that message's action menu and choose **Undo changes** to rewind the session branch and restore the recorded workspace changes. It is a safety net, not a replacement for version control.
|
|
247
|
+
|
|
248
|
+
## Sessions and tabs
|
|
249
|
+
|
|
250
|
+
Pix stores a tab workspace per working directory. Reopening the same `--cwd` restores its tabs, active tab, drafts, queued messages, and session references.
|
|
251
|
+
|
|
252
|
+
- `/new_tab` opens a fresh session without replacing the current tab.
|
|
253
|
+
- `/resume` opens a session picker or accepts a session path.
|
|
254
|
+
- `/search` searches session contents and opens a match in a new tab.
|
|
255
|
+
- `/fork`, `/clone`, `/tree`, and `/jump` support branching and navigation inside session history.
|
|
256
|
+
- `/export` writes HTML by default or JSONL when given a `.jsonl` path.
|
|
257
|
+
- `/import` resumes a JSONL session; `/share` publishes a secret GitHub gist.
|
|
258
|
+
- `/compact` manually summarizes older context; the DCP suite module provides finer-grained context compression.
|
|
259
|
+
- `/delete` permanently removes a session and its DCP sidecar after confirmation.
|
|
260
|
+
|
|
261
|
+
Set `maxProjectSessions` in Pix configuration to prune old session files automatically for each project; `0` keeps them indefinitely.
|
|
262
|
+
|
|
263
|
+
## Command reference
|
|
264
|
+
|
|
265
|
+
Type `/` for the live, searchable list. Extensions can add more commands than the core set below.
|
|
266
|
+
|
|
267
|
+
| Area | Commands |
|
|
268
|
+
| --- | --- |
|
|
269
|
+
| Renderer and resources | `/settings`, `/hotkeys`, `/reload`, `/changelog`, `/update` |
|
|
270
|
+
| Models | `/model`, `/default-model`, `/scoped-models`, `/thinking`, `/default-thinking`, `/autocomplete` |
|
|
271
|
+
| Project context | `/no-context-files`, `/compact` |
|
|
272
|
+
| Prompt workflow | `/enhance`, `/queue`, `/copy` |
|
|
273
|
+
| Sessions | `/new`, `/new_tab`, `/resume`, `/name`, `/session`, `/search`, `/history`, `/jump`, `/tree` |
|
|
274
|
+
| Branching and files | `/fork`, `/clone`, `/delete`, `/export`, `/import`, `/share` |
|
|
275
|
+
| Status | `/usage` |
|
|
276
|
+
| Process | `/quit`, `/exit` |
|
|
277
|
+
|
|
278
|
+
Useful suite commands include `/todos`, `/todos-persist`, `/todos-scope`, `/sub-status`, `/sub-stop`, `/ultrawork`, `/hyperplan`, `/subagent-preset`, `/usage`, `/dcp`, `/idx-init`, `/idx-update`, `/opencode-import`, `/antigravity-add-account`, `/install-skill`, and `/export-skill`.
|
|
279
|
+
|
|
280
|
+
### Keyboard and mouse
|
|
281
|
+
|
|
282
|
+
| Input | Action |
|
|
283
|
+
| --- | --- |
|
|
284
|
+
| `Enter` | Send a message or run the selected command |
|
|
285
|
+
| `Shift+Enter` | Insert a newline |
|
|
286
|
+
| `Tab` | Accept autocomplete / selected popup item |
|
|
287
|
+
| `Esc` | Close a popup or abort running work |
|
|
288
|
+
| `Up` / `Down` | Navigate history or the active popup |
|
|
289
|
+
| `PageUp` / `PageDown` | Scroll the conversation by page |
|
|
290
|
+
| `Cmd+Up` / `Cmd+Down` | Alternative page scrolling in supported terminals |
|
|
291
|
+
| `Ctrl+C` | Interrupt running work; press again while an abort is in progress to stop Pix |
|
|
292
|
+
| `Ctrl+D` | Quit when the editor is empty |
|
|
293
|
+
| `Ctrl+L` | Redraw the screen |
|
|
294
|
+
| `Ctrl+G` | Toggle voice recording |
|
|
295
|
+
| `Ctrl+V` / `Cmd+V` | Paste a clipboard image when supported |
|
|
296
|
+
| Mouse wheel / scrollbar | Scroll the conversation or active popup |
|
|
297
|
+
| Click | Switch tabs; expand activity; follow links; activate visible status actions |
|
|
298
|
+
|
|
299
|
+
Use `/hotkeys` for the authoritative in-app summary for your installed version.
|
|
300
|
+
|
|
239
301
|
## Configuration
|
|
240
302
|
|
|
241
|
-
|
|
303
|
+
Pix creates a commented JSONC file on first launch:
|
|
242
304
|
|
|
243
305
|
```text
|
|
244
306
|
~/.config/pi/pix.jsonc
|
|
245
307
|
```
|
|
246
308
|
|
|
247
|
-
|
|
309
|
+
A project can override it with:
|
|
310
|
+
|
|
311
|
+
```text
|
|
312
|
+
<workspace>/.pi/pix.jsonc
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Both support the published schema:
|
|
248
316
|
|
|
249
317
|
```jsonc
|
|
250
318
|
{
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
|
|
319
|
+
"$schema": "https://unpkg.com/pi-ui-extend/schemas/pix.json",
|
|
320
|
+
"defaultModel": {
|
|
321
|
+
"modelRef": "openai-codex/gpt-5.6-sol",
|
|
322
|
+
"thinking": "medium"
|
|
323
|
+
},
|
|
324
|
+
"toolRenderer": {
|
|
325
|
+
"default": { "previewLines": 0 },
|
|
326
|
+
"tools": {
|
|
327
|
+
"shell": { "previewLines": 6, "direction": "tail" },
|
|
328
|
+
"repo_*": { "previewLines": 6, "direction": "head" },
|
|
329
|
+
"apply_patch": { "defaultExpanded": true }
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"promptEnhancer": { "modelRef": "zai/glm-5-turbo" },
|
|
333
|
+
"autocomplete": {
|
|
334
|
+
"modelRef": "zai/glm-5-turbo",
|
|
335
|
+
"debounceMs": 350,
|
|
336
|
+
"timeoutMs": 3000
|
|
337
|
+
},
|
|
338
|
+
"dictation": { "language": "en" },
|
|
339
|
+
"ignoreContextFiles": false,
|
|
340
|
+
"maxProjectSessions": 0
|
|
255
341
|
}
|
|
256
342
|
```
|
|
257
343
|
|
|
258
|
-
|
|
344
|
+
Configurable areas include:
|
|
259
345
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
346
|
+
- default model and thinking level;
|
|
347
|
+
- scoped model selection and per-model colors;
|
|
348
|
+
- tool visibility, expansion, preview length/direction, and semantic colors;
|
|
349
|
+
- assistant output filters using globs or regex literals;
|
|
350
|
+
- autocomplete, prompt enhancement, and automatic session-title models;
|
|
351
|
+
- dictation languages and model download URLs;
|
|
352
|
+
- icon theme;
|
|
353
|
+
- loading of project `AGENTS.md`/`CLAUDE.md` files;
|
|
354
|
+
- per-project session retention.
|
|
263
355
|
|
|
264
|
-
Use
|
|
356
|
+
Use `/settings` to inspect the effective settings summary and `/reload` after changing resources. Some command-driven settings update the relevant config file directly.
|
|
265
357
|
|
|
266
|
-
|
|
358
|
+
## Updates
|
|
267
359
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
360
|
+
```bash
|
|
361
|
+
# Check only
|
|
362
|
+
pix update --check
|
|
363
|
+
|
|
364
|
+
# Install the latest published Pix and align the global Pi CLI
|
|
365
|
+
pix update
|
|
366
|
+
|
|
367
|
+
# Reinstall even when the version appears current
|
|
368
|
+
pix update --force
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
Inside Pix, `/update` performs a check and explains the shell command needed for installation. Restart Pix after an update.
|
|
271
372
|
|
|
272
373
|
## Troubleshooting
|
|
273
374
|
|
|
274
|
-
###
|
|
375
|
+
### Icons look wrong
|
|
275
376
|
|
|
276
|
-
|
|
377
|
+
Run `pix install`, configure your terminal to use **JetBrainsMono Nerd Font**, and restart the terminal. Pix falls back to plain glyphs, but the intended UI uses Nerd Font icons.
|
|
277
378
|
|
|
278
|
-
|
|
279
|
-
nvm install 22
|
|
280
|
-
nvm use 22
|
|
281
|
-
```
|
|
379
|
+
### Clipboard images do not paste on Linux
|
|
282
380
|
|
|
283
|
-
or
|
|
381
|
+
Install `wl-clipboard` on Wayland or `xclip`/`xsel` on X11, then run `pix install --check`.
|
|
284
382
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
383
|
+
### Voice input is unavailable
|
|
384
|
+
|
|
385
|
+
Ensure the optional `vosk` dependency installed successfully, the configured model URL is reachable for its first download, and an audio recorder is available: SoX (`rec`/`sox`), `ffmpeg`, or `arecord` on Linux. Voice support can be omitted without affecting the rest of Pix.
|
|
386
|
+
|
|
387
|
+
### A provider login dialog is missing
|
|
289
388
|
|
|
290
|
-
|
|
389
|
+
Pix does not yet implement Pi's interactive `/login` and `/logout` dialogs. Authenticate in the stock `pi` TUI or configure the provider's supported environment/API-key storage, then run `/reload`.
|
|
291
390
|
|
|
292
|
-
|
|
391
|
+
### Repository discovery tools are absent
|
|
392
|
+
|
|
393
|
+
Those tools register only when Pix is launched from a repository with an `.indexer-cli` index. Run `/idx-init` to initialize the current repository, then `/reload`. If Pix was started elsewhere with `--cwd`, restart it from the project directory first:
|
|
293
394
|
|
|
294
395
|
```bash
|
|
295
|
-
|
|
396
|
+
cd /path/to/project
|
|
397
|
+
pix
|
|
296
398
|
```
|
|
297
399
|
|
|
298
|
-
|
|
400
|
+
`/idx-update` updates the globally installed `indexer-cli`; it does not refresh a project's index.
|
|
299
401
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
402
|
+
### An extension behaves differently
|
|
403
|
+
|
|
404
|
+
Pix supports Pi SDK extensions, including toasts, widgets, menus, dialogs, custom UI, and terminal input hooks. Extensions that assume private internals or a specific stock renderer may still need adaptation. Use `ctx.hasUI` guards for code that also runs headlessly.
|
|
405
|
+
|
|
406
|
+
## For extension authors
|
|
407
|
+
|
|
408
|
+
The package exports the renderer-facing SDK from both entry points:
|
|
409
|
+
|
|
410
|
+
```ts
|
|
411
|
+
import type { PixExtensionUIContext } from "pi-ui-extend";
|
|
412
|
+
// or
|
|
413
|
+
import type { PixExtensionUIContext } from "pi-ui-extend/sdk";
|
|
304
414
|
```
|
|
305
415
|
|
|
306
|
-
|
|
416
|
+
Pix implements the Pi extension UI surface for notifications, keyed toasts, widgets, above-input content, menus, dialogs, custom full-screen UI, editor text, terminal input hooks, theme helpers, and status updates. The published declarations are available in [`dist/sdk.d.ts`](dist/sdk.d.ts).
|
|
307
417
|
|
|
308
|
-
|
|
418
|
+
## Development
|
|
309
419
|
|
|
310
420
|
```bash
|
|
311
|
-
|
|
421
|
+
git clone https://github.com/dnaroid/pix.git
|
|
422
|
+
cd pix
|
|
423
|
+
npm install
|
|
424
|
+
|
|
425
|
+
# Run from source
|
|
426
|
+
npm run dev -- --cwd /path/to/project
|
|
427
|
+
|
|
428
|
+
# Typecheck and test
|
|
429
|
+
npm run check
|
|
430
|
+
|
|
431
|
+
# Validate the bundled suite
|
|
432
|
+
npm run test:tools-suite
|
|
433
|
+
|
|
434
|
+
# Build the publishable renderer
|
|
435
|
+
npm run build:pix
|
|
312
436
|
```
|
|
313
437
|
|
|
314
|
-
|
|
438
|
+
Regenerate the README screenshots without accounts or live model traffic:
|
|
315
439
|
|
|
316
|
-
|
|
440
|
+
```bash
|
|
441
|
+
node --import tsx scripts/capture-readme-screenshots.ts
|
|
442
|
+
```
|
|
317
443
|
|
|
318
|
-
|
|
444
|
+
The capture script runs the real renderer against the local test `MockModel` in an isolated tmux server and temporary home directory.
|
|
319
445
|
|
|
320
|
-
|
|
446
|
+
## Project layout
|
|
321
447
|
|
|
322
|
-
```
|
|
323
|
-
|
|
448
|
+
```text
|
|
449
|
+
src/ Pix renderer and SDK bridge
|
|
450
|
+
external/pi-tools-suite/ bundled headless tools and extensions
|
|
451
|
+
schemas/ published JSON schemas
|
|
452
|
+
skills/ packaged agent skills
|
|
453
|
+
docs/ release documentation
|
|
454
|
+
tests/ unit, integration, and PTY tests
|
|
455
|
+
scripts/ build, release, sync, and capture tooling
|
|
324
456
|
```
|
|
325
457
|
|
|
326
|
-
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
<div align="center">
|
|
461
|
+
|
|
462
|
+
**If your coding agent lives in the terminal, give it a workspace.**
|
|
327
463
|
|
|
328
464
|
```bash
|
|
329
|
-
|
|
330
|
-
npm run dev -- --cwd /path/to/workspace
|
|
331
|
-
npm run check
|
|
465
|
+
npx pi-ui-extend --cwd .
|
|
332
466
|
```
|
|
467
|
+
|
|
468
|
+
</div>
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · adaptive implementation plan">
|
|
3
|
+
<rect width="1036" height="534" rx="14" fill="#0f1218"/>
|
|
4
|
+
<rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
|
|
5
|
+
<circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
|
|
6
|
+
<text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · adaptive implementation plan</text>
|
|
7
|
+
<g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
|
|
8
|
+
<g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
|
|
9
|
+
<text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
10
|
+
<text x="22" y="102" xml:space="preserve"><tspan fill="rgb(164,188,224)">guarded change. </tspan></text>
|
|
11
|
+
<text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
12
|
+
<text x="22" y="138" xml:space="preserve"><tspan fill="rgb(217,119,6)">Turn this into an adaptive implementation plan with explicit dependencies. </tspan></text>
|
|
13
|
+
<text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
14
|
+
<text x="22" y="174" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
15
|
+
<text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
16
|
+
<text x="22" y="210" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll keep the plan small and update it as each dependency clears. </tspan></text>
|
|
17
|
+
<text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
18
|
+
<text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> todo</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">action=list nextId=6</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
19
|
+
<text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
20
|
+
<text x="22" y="282" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
21
|
+
<text x="22" y="300" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
22
|
+
<text x="22" y="318" xml:space="preserve"><tspan fill="rgb(164,188,224)">The implementation order is now explicit: coverage first, guarded change second, focused checks last. </tspan></text>
|
|
23
|
+
<text x="22" y="336" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
24
|
+
<text x="22" y="354" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
25
|
+
<text x="22" y="372" xml:space="preserve"><tspan fill="rgb(212,154,74)"></tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">5.Harden expired sessions</tspan><tspan fill="rgb(214,222,235)"> — hardening expired sessions </tspan></text>
|
|
26
|
+
<text x="22" y="390" xml:space="preserve"><tspan fill="rgb(124,169,130)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">1.Trace the session boundary</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(214,222,235)">parent:#5</tspan><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
27
|
+
<text x="22" y="408" xml:space="preserve"><tspan fill="rgb(212,154,74)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">2.Add expiry regression coverage</tspan><tspan fill="rgb(214,222,235)"> — writing expiry regression tests parent:#5 </tspan></text>
|
|
28
|
+
<text x="22" y="426" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(212,154,74)">3.Guard the refresh path</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#2 </tspan></text>
|
|
29
|
+
<text x="22" y="444" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(200,180,90)">4.Run focused checks</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#3 </tspan></text>
|
|
30
|
+
<text x="22" y="462" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
31
|
+
<text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
|
|
32
|
+
<text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
33
|
+
<text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)"> medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> ↑ </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
|
|
34
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · commands and workflows">
|
|
3
|
+
<rect width="1036" height="534" rx="14" fill="#0f1218"/>
|
|
4
|
+
<rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
|
|
5
|
+
<circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
|
|
6
|
+
<text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · commands and workflows</text>
|
|
7
|
+
<g><rect x="22" y="322" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
8
|
+
<rect x="38" y="322" width="960" height="18" fill="rgb(38,50,65)"/>
|
|
9
|
+
<rect x="998" y="322" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
10
|
+
<rect x="38" y="340" width="960" height="18" fill="rgb(42,47,54)"/>
|
|
11
|
+
<rect x="998" y="340" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
12
|
+
<rect x="38" y="358" width="960" height="18" fill="rgb(30,30,30)"/>
|
|
13
|
+
<rect x="998" y="358" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
14
|
+
<rect x="38" y="376" width="960" height="18" fill="rgb(30,30,30)"/>
|
|
15
|
+
<rect x="998" y="376" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
16
|
+
<rect x="38" y="394" width="960" height="18" fill="rgb(30,30,30)"/>
|
|
17
|
+
<rect x="998" y="394" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
18
|
+
<rect x="38" y="412" width="960" height="18" fill="rgb(30,30,30)"/>
|
|
19
|
+
<rect x="998" y="412" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
20
|
+
<rect x="38" y="430" width="960" height="18" fill="rgb(30,30,30)"/>
|
|
21
|
+
<rect x="998" y="430" width="16" height="18" fill="rgb(9,13,19)"/>
|
|
22
|
+
<rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
|
|
23
|
+
<g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
|
|
24
|
+
<text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
25
|
+
<text x="22" y="102" xml:space="preserve"><tspan fill="rgb(217,119,6)">Auth hardening: find the safest place to fix expired sessions without widening the change. </tspan></text>
|
|
26
|
+
<text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
27
|
+
<text x="22" y="138" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
28
|
+
<text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
29
|
+
<text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll trace the session boundary and verify the current behavior first. </tspan></text>
|
|
30
|
+
<text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
31
|
+
<text x="22" y="210" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> read</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">src/auth/session.ts</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
32
|
+
<text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
33
|
+
<text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
34
|
+
<text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
35
|
+
<text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">The refresh path is isolated in </tspan><tspan fill="rgb(124,169,130)">`loadSession()`</tspan><tspan fill="rgb(164,188,224)">. Next I’d add an expiry regression test, then make the smallest </tspan></text>
|
|
36
|
+
<text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9">guarded change. </tspan></text>
|
|
37
|
+
<text x="22" y="318" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
38
|
+
<text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(122,162,214)"> Commands Esc </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
39
|
+
<text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)" font-weight="700">▶ /settings Show renderer and Pi settings summary </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
40
|
+
<text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /model Select the active model </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
41
|
+
<text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /default-model Set the default model for new sessions </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
42
|
+
<text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /autocomplete Set inline autocomplete model, or empty to disable </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
43
|
+
<text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /no-context-files Set project AGENTS.md/CLAUDE.md loading off or on </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
44
|
+
<text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan><tspan fill="rgb(230,237,243)"> /scoped-models Show or set models used by the model selector/cycling </tspan><tspan fill="#d8dee9"> </tspan></text>
|
|
45
|
+
<text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
46
|
+
<text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)">/ </tspan></text>
|
|
47
|
+
<text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
48
|
+
<text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)"> medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
|
|
49
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · agent workspace">
|
|
3
|
+
<rect width="1036" height="534" rx="14" fill="#0f1218"/>
|
|
4
|
+
<rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
|
|
5
|
+
<circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
|
|
6
|
+
<text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · agent workspace</text>
|
|
7
|
+
<g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
|
|
8
|
+
<g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
|
|
9
|
+
<text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
10
|
+
<text x="22" y="102" xml:space="preserve"><tspan fill="rgb(217,119,6)">Auth hardening: find the safest place to fix expired sessions without widening the change. </tspan></text>
|
|
11
|
+
<text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
12
|
+
<text x="22" y="138" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
13
|
+
<text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
14
|
+
<text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll trace the session boundary and verify the current behavior first. </tspan></text>
|
|
15
|
+
<text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
16
|
+
<text x="22" y="210" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> read</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">src/auth/session.ts</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
17
|
+
<text x="22" y="228" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
18
|
+
<text x="22" y="246" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(133,143,153)" font-weight="700"> thinking</tspan><tspan fill="rgb(133,143,153)"> </tspan><tspan fill="rgb(155,165,175)">(medium) 0s</tspan><tspan fill="rgb(133,143,153)"> </tspan></text>
|
|
19
|
+
<text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
20
|
+
<text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">The refresh path is isolated in </tspan><tspan fill="rgb(124,169,130)">`loadSession()`</tspan><tspan fill="rgb(164,188,224)">. Next I’d add an expiry regression test, then make the smallest </tspan></text>
|
|
21
|
+
<text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9">guarded change. </tspan></text>
|
|
22
|
+
<text x="22" y="318" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
23
|
+
<text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
24
|
+
<text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
25
|
+
<text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
26
|
+
<text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
27
|
+
<text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
28
|
+
<text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
29
|
+
<text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
30
|
+
<text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
31
|
+
<text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
|
|
32
|
+
<text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
33
|
+
<text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)"> medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
|
|
34
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · parallel sub-agents">
|
|
3
|
+
<rect width="1036" height="534" rx="14" fill="#0f1218"/>
|
|
4
|
+
<rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
|
|
5
|
+
<circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
|
|
6
|
+
<text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · parallel sub-agents</text>
|
|
7
|
+
<g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
|
|
8
|
+
<g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(255,255,255)"> Auth hardening: find the safest place to fix </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(155,165,175)"> </tspan></text>
|
|
9
|
+
<text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)"> └──────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
10
|
+
<text x="22" y="102" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
11
|
+
<text x="22" y="120" xml:space="preserve"><tspan fill="rgb(164,188,224)">The implementation order is now explicit: coverage first, guarded change second, focused checks last. </tspan></text>
|
|
12
|
+
<text x="22" y="138" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
13
|
+
<text x="22" y="156" xml:space="preserve"><tspan fill="rgb(217,119,6)">Run the independent review tracks in parallel while I keep the main implementation path. </tspan></text>
|
|
14
|
+
<text x="22" y="174" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
15
|
+
<text x="22" y="192" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll split the independent review tracks and keep implementation in this session. </tspan></text>
|
|
16
|
+
<text x="22" y="210" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
17
|
+
<text x="22" y="228" xml:space="preserve"><tspan fill="rgb(124,169,130)" font-weight="700"></tspan><tspan fill="rgb(125,133,144)" font-weight="700"> subagents</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(155,165,175)">mode=spawn started=3/3 run=readme-parallel-audit</tspan><tspan fill="rgb(125,133,144)"> </tspan></text>
|
|
18
|
+
<text x="22" y="246" xml:space="preserve"><tspan fill="rgb(48,54,61)">└</tspan><tspan fill="rgb(155,165,175)"> started 3/3 subagents — running:2 done:1 — run readme-parallel-audit </tspan></text>
|
|
19
|
+
<text x="22" y="264" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
20
|
+
<text x="22" y="282" xml:space="preserve"><tspan fill="rgb(164,188,224)">Two reviews are running in parallel; I’ll merge their findings before changing the refresh path. </tspan></text>
|
|
21
|
+
<text x="22" y="300" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
22
|
+
<text x="22" y="318" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
23
|
+
<text x="22" y="336" xml:space="preserve"><tspan fill="rgb(212,154,74)"></tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">5.Harden expired sessions</tspan><tspan fill="rgb(214,222,235)"> — hardening expired sessions </tspan></text>
|
|
24
|
+
<text x="22" y="354" xml:space="preserve"><tspan fill="rgb(124,169,130)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">1.Trace the session boundary</tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(214,222,235)">parent:#5</tspan><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
25
|
+
<text x="22" y="372" xml:space="preserve"><tspan fill="rgb(212,154,74)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(201,106,103)">2.Add expiry regression coverage</tspan><tspan fill="rgb(214,222,235)"> — writing expiry regression tests parent:#5 </tspan></text>
|
|
26
|
+
<text x="22" y="390" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(212,154,74)">3.Guard the refresh path</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#2 </tspan></text>
|
|
27
|
+
<text x="22" y="408" xml:space="preserve"><tspan fill="rgb(125,133,144)"> ↳ </tspan><tspan fill="rgb(214,222,235)"> </tspan><tspan fill="rgb(200,180,90)">4.Run focused checks</tspan><tspan fill="rgb(214,222,235)"> parent:#5 blocked:#3 </tspan></text>
|
|
28
|
+
<text x="22" y="426" xml:space="preserve"><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(122,162,214)" font-weight="700">test-review</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(127,179,200)">claude-sonnet-4-6</tspan><tspan fill="rgb(125,133,144)"> Design expiry and race regression cases elapsed:— </tspan></text>
|
|
29
|
+
<text x="22" y="444" xml:space="preserve"><tspan fill="rgb(127,179,200)" font-weight="700"></tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(122,162,214)" font-weight="700">ux-audit</tspan><tspan fill="rgb(125,133,144)"> </tspan><tspan fill="rgb(127,179,200)">gemini-3.1-pro</tspan><tspan fill="rgb(125,133,144)"> Review user-visible recovery states elapsed:— </tspan></text>
|
|
30
|
+
<text x="22" y="462" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
31
|
+
<text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
|
|
32
|
+
<text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
33
|
+
<text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)"> medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> ↑ </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
|
|
34
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1036" height="534" viewBox="0 0 1036 534" role="img" aria-label="Pix · project-scoped session tabs">
|
|
3
|
+
<rect width="1036" height="534" rx="14" fill="#0f1218"/>
|
|
4
|
+
<rect x="1" y="1" width="1034" height="532" rx="13" fill="none" stroke="#303746"/>
|
|
5
|
+
<circle cx="22" cy="22" r="6" fill="#ff5f57"/><circle cx="42" cy="22" r="6" fill="#febc2e"/><circle cx="62" cy="22" r="6" fill="#28c840"/>
|
|
6
|
+
<text x="518" y="27" text-anchor="middle" fill="#7f8797" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="12">Pix · project-scoped session tabs</text>
|
|
7
|
+
<g><rect x="310" y="502" width="40" height="18" fill="rgb(48,54,61)"/></g>
|
|
8
|
+
<g font-family="JetBrainsMono Nerd Font Mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" font-variant-ligatures="none"><text x="22" y="66" xml:space="preserve"><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(155,165,175)"> Auth hardening: find the safest p… </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(155,165,175)"> Renderer polish: audit compact to… </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"></tspan><tspan fill="rgb(255,255,255)"> Release checks: compare CI across… </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)">│</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)" font-weight="700"></tspan></text>
|
|
9
|
+
<text x="22" y="84" xml:space="preserve"><tspan fill="rgb(125,133,144)">───────────────────────────────────────┴────────────────────────────────────────┘ └──</tspan></text>
|
|
10
|
+
<text x="22" y="102" xml:space="preserve"><tspan fill="#d8dee9">system: Opened a new tab. cwd=~/projects/pix </tspan></text>
|
|
11
|
+
<text x="22" y="120" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
12
|
+
<text x="22" y="138" xml:space="preserve"><tspan fill="rgb(217,119,6)">Release checks: compare CI across Linux, macOS, and Windows before publishing. </tspan></text>
|
|
13
|
+
<text x="22" y="156" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
14
|
+
<text x="22" y="174" xml:space="preserve"><tspan fill="rgb(164,188,224)">I’ll compare the release checks across Linux, macOS, and Windows before publishing. </tspan></text>
|
|
15
|
+
<text x="22" y="192" xml:space="preserve"><tspan fill="rgb(214,222,235)"> </tspan></text>
|
|
16
|
+
<text x="22" y="210" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
17
|
+
<text x="22" y="228" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
18
|
+
<text x="22" y="246" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
19
|
+
<text x="22" y="264" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
20
|
+
<text x="22" y="282" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
21
|
+
<text x="22" y="300" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
22
|
+
<text x="22" y="318" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
23
|
+
<text x="22" y="336" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
24
|
+
<text x="22" y="354" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
25
|
+
<text x="22" y="372" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
26
|
+
<text x="22" y="390" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
27
|
+
<text x="22" y="408" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
28
|
+
<text x="22" y="426" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
29
|
+
<text x="22" y="444" xml:space="preserve"><tspan fill="#d8dee9"> </tspan></text>
|
|
30
|
+
<text x="22" y="462" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
31
|
+
<text x="22" y="480" xml:space="preserve"><tspan fill="rgb(217,119,6)"> </tspan></text>
|
|
32
|
+
<text x="22" y="498" xml:space="preserve"><tspan fill="rgb(125,133,144)">────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</tspan></text>
|
|
33
|
+
<text x="22" y="516" xml:space="preserve"><tspan fill="rgb(48,54,61)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(200,180,90)">openai-codex/gpt-5.4</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(212,154,74)"> medium</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> 0%</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(124,169,130)"> </tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(255,255,255)">workspace</tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(127,179,200)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> </tspan><tspan fill="rgb(125,133,144)"></tspan><tspan fill="rgb(155,165,175)"> EN</tspan></text></g>
|
|
34
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-ui-extend",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.67",
|
|
4
|
+
"description": "Pix: a workspace-first terminal UI for Pi with tabs, readable tool activity, voice input, and bundled agent tools.",
|
|
4
5
|
"private": false,
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/dnaroid/pix.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/dnaroid/pix#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/dnaroid/pix/issues"
|
|
13
|
+
},
|
|
5
14
|
"type": "module",
|
|
6
15
|
"bin": {
|
|
7
16
|
"pi-ui-extend": "./bin/pix.mjs",
|
|
@@ -20,6 +29,7 @@
|
|
|
20
29
|
"./schemas/pi-tools-suite.json": "./schemas/pi-tools-suite.json"
|
|
21
30
|
},
|
|
22
31
|
"files": [
|
|
32
|
+
"assets/screenshots",
|
|
23
33
|
"bin",
|
|
24
34
|
"docs",
|
|
25
35
|
"dist",
|