@bastani/atomic 0.8.4-0 → 0.8.5-0
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/CHANGELOG.md +16 -0
- package/README.md +24 -23
- package/dist/builtin/intercom/README.md +5 -5
- package/dist/builtin/intercom/index.ts +1 -1
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/ui/compose.ts +19 -1
- package/dist/builtin/intercom/ui/session-list.ts +19 -1
- package/dist/builtin/mcp/README.md +3 -3
- package/dist/builtin/mcp/commands.ts +1 -1
- package/dist/builtin/mcp/host-html-template.ts +1 -1
- package/dist/builtin/mcp/mcp-panel.ts +14 -14
- package/dist/builtin/mcp/mcp-setup-panel.ts +4 -4
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/tool-result-renderer.ts +1 -1
- package/dist/builtin/subagents/README.md +3 -3
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/tui/render.ts +1844 -1062
- package/dist/builtin/web-access/README.md +1 -1
- package/dist/builtin/web-access/curator-page.ts +2 -2
- package/dist/builtin/web-access/index.ts +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/README.md +34 -7
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +23 -4
- package/dist/builtin/workflows/builtin/ralph.ts +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/workflow/SKILL.md +75 -16
- package/dist/builtin/workflows/skills/workflow/references/running-workflows.md +34 -11
- package/dist/builtin/workflows/skills/workflow/references/sdk-authoring.md +111 -20
- package/dist/builtin/workflows/src/extension/discovery.ts +32 -4
- package/dist/builtin/workflows/src/extension/index.ts +347 -63
- package/dist/builtin/workflows/src/extension/render-call.ts +3 -1
- package/dist/builtin/workflows/src/extension/render-result.ts +7 -0
- package/dist/builtin/workflows/src/extension/runtime.ts +4 -2
- package/dist/builtin/workflows/src/extension/wiring.ts +32 -8
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +36 -14
- package/dist/builtin/workflows/src/runs/background/runner.ts +2 -2
- package/dist/builtin/workflows/src/runs/background/status.ts +89 -0
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +338 -78
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +55 -7
- package/dist/builtin/workflows/src/runs/shared/workflow-runner.ts +146 -10
- package/dist/builtin/workflows/src/shared/store.ts +29 -0
- package/dist/builtin/workflows/src/shared/types.ts +25 -4
- package/dist/builtin/workflows/src/tui/graph-canvas.ts +69 -2
- package/dist/builtin/workflows/src/tui/graph-view.ts +97 -182
- package/dist/builtin/workflows/src/tui/header.ts +36 -20
- package/dist/builtin/workflows/src/tui/inline-form-card.ts +129 -46
- package/dist/builtin/workflows/src/tui/inline-form-editor.ts +111 -36
- package/dist/builtin/workflows/src/tui/inputs-picker.ts +311 -91
- package/dist/builtin/workflows/src/tui/layout.ts +1 -1
- package/dist/builtin/workflows/src/tui/node-card.ts +66 -37
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +20 -6
- package/dist/builtin/workflows/src/tui/prompt-card.ts +262 -85
- package/dist/builtin/workflows/src/tui/run-detail.ts +50 -31
- package/dist/builtin/workflows/src/tui/session-confirm.ts +21 -14
- package/dist/builtin/workflows/src/tui/session-picker.ts +35 -26
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +531 -960
- package/dist/builtin/workflows/src/tui/status-helpers.ts +6 -0
- package/dist/builtin/workflows/src/tui/status-list.ts +8 -4
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +7 -2
- package/dist/builtin/workflows/src/tui/switcher.ts +55 -25
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +33 -1
- package/dist/builtin/workflows/src/tui/workflow-list.ts +10 -6
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -6
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +3 -3
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +7 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +3 -2
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +24 -12
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +6 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +28 -17
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +65 -28
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +13 -5
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +8 -8
- package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.js +6 -6
- package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +7 -4
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +3 -2
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +3 -2
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +2 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +2 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/todos.d.ts.map +1 -1
- package/dist/core/tools/todos.js +1 -1
- package/dist/core/tools/todos.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +4 -3
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +3 -3
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +3 -3
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +2 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +3 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +13 -3
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +2 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +2 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +47 -5
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +5 -5
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +3 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +7 -7
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +8 -8
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +3 -3
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +2 -2
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +10 -12
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +3 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/working-status.d.ts +25 -0
- package/dist/modes/interactive/components/working-status.d.ts.map +1 -0
- package/dist/modes/interactive/components/working-status.js +28 -0
- package/dist/modes/interactive/components/working-status.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +8 -7
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +8 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +5 -5
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/development.md +2 -2
- package/docs/extensions.md +7 -7
- package/docs/packages.md +11 -8
- package/docs/quickstart.md +2 -2
- package/docs/rpc.md +1 -1
- package/docs/sdk.md +14 -11
- package/docs/session-format.md +1 -1
- package/docs/sessions.md +10 -10
- package/docs/settings.md +1 -1
- package/docs/terminal-setup.md +9 -9
- package/docs/tmux.md +10 -10
- package/docs/tui.md +2 -2
- package/docs/usage.md +9 -9
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.8.5-0] - 2026-05-18
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Prepared the 0.8.5-0 prerelease.
|
|
10
|
+
|
|
11
|
+
## [0.8.4] - 2026-05-17
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added selected model details to the system prompt for assistant model attribution.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Aligned package references with Atomic branding.
|
|
20
|
+
|
|
5
21
|
## [0.8.4-0] - 2026-05-17
|
|
6
22
|
|
|
7
23
|
### Added
|
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ Then just talk to pi. By default, pi gives the model four tools: `read`, `write`
|
|
|
101
101
|
|
|
102
102
|
## Providers & Models
|
|
103
103
|
|
|
104
|
-
For each built-in provider, pi maintains a list of tool-capable models, updated with every release. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or
|
|
104
|
+
For each built-in provider, pi maintains a list of tool-capable models, updated with every release. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or CTRL+L).
|
|
105
105
|
|
|
106
106
|
**Subscriptions:**
|
|
107
107
|
- Anthropic Claude Pro/Max
|
|
@@ -162,8 +162,8 @@ The editor can be temporarily replaced by other UI, like built-in `/settings` or
|
|
|
162
162
|
|---------|-----|
|
|
163
163
|
| File reference | Type `@` to fuzzy-search project files |
|
|
164
164
|
| Path completion | Tab to complete paths |
|
|
165
|
-
| Multi-line |
|
|
166
|
-
| Images |
|
|
165
|
+
| Multi-line | SHIFT+Enter (or CTRL+Enter on Windows Terminal) |
|
|
166
|
+
| Images | CTRL+V to paste (ALT+V on Windows), or drag onto terminal |
|
|
167
167
|
| Bash commands | `!command` runs and sends output to LLM, `!!command` runs without sending |
|
|
168
168
|
|
|
169
169
|
Standard editing keybindings for delete word, undo, etc. See [docs/keybindings.md](docs/keybindings.md).
|
|
@@ -176,7 +176,7 @@ Type `/` in the editor to trigger commands. [Extensions](#extensions) can regist
|
|
|
176
176
|
|---------|-------------|
|
|
177
177
|
| `/login`, `/logout` | OAuth authentication |
|
|
178
178
|
| `/model` | Switch models |
|
|
179
|
-
| `/scoped-models` | Enable/disable models for
|
|
179
|
+
| `/scoped-models` | Enable/disable models for CTRL+P cycling |
|
|
180
180
|
| `/settings` | Thinking level, theme, message delivery, transport |
|
|
181
181
|
| `/resume` | Pick from previous sessions |
|
|
182
182
|
| `/new` | Start a new session |
|
|
@@ -202,26 +202,26 @@ See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`.
|
|
|
202
202
|
|
|
203
203
|
| Key | Action |
|
|
204
204
|
|-----|--------|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
205
|
+
| CTRL+C | Clear editor |
|
|
206
|
+
| CTRL+C twice | Quit |
|
|
207
207
|
| Escape | Cancel/abort |
|
|
208
208
|
| Escape twice | Open `/tree` |
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
209
|
+
| CTRL+L | Open model selector |
|
|
210
|
+
| CTRL+P / SHIFT+CTRL+P | Cycle scoped models forward/backward |
|
|
211
|
+
| SHIFT+Tab | Cycle thinking level |
|
|
212
|
+
| CTRL+O | Collapse/expand tool output |
|
|
213
|
+
| CTRL+T | Collapse/expand thinking blocks |
|
|
214
214
|
|
|
215
215
|
### Message Queue
|
|
216
216
|
|
|
217
217
|
Submit messages while the agent is working:
|
|
218
218
|
|
|
219
219
|
- **Enter** queues a *steering* message, delivered after the current assistant turn finishes executing its tool calls
|
|
220
|
-
- **
|
|
220
|
+
- **ALT+Enter** queues a *follow-up* message, delivered only after the agent finishes all work
|
|
221
221
|
- **Escape** aborts and restores queued messages to editor
|
|
222
|
-
- **
|
|
222
|
+
- **ALT+Up** retrieves queued messages back to editor
|
|
223
223
|
|
|
224
|
-
On Windows Terminal, `
|
|
224
|
+
On Windows Terminal, `ALT+Enter` is fullscreen by default. Remap it in [docs/terminal-setup.md](docs/terminal-setup.md) so pi can receive the follow-up shortcut.
|
|
225
225
|
|
|
226
226
|
Configure delivery in [settings](docs/settings.md): `steeringMode` and `followUpMode` can be `"one-at-a-time"` (default, waits for response) or `"all"` (delivers all queued at once). `transport` selects provider transport preference (`"sse"`, `"websocket"`, or `"auto"`) for providers that support multiple transports.
|
|
227
227
|
|
|
@@ -251,9 +251,9 @@ Use `/session` in interactive mode to see the current session ID before reusing
|
|
|
251
251
|
|
|
252
252
|
<p align="center"><img src="docs/images/tree-view.png" alt="Tree View" width="600"></p>
|
|
253
253
|
|
|
254
|
-
- Search by typing, fold/unfold and jump between branches with
|
|
255
|
-
- Filter modes (
|
|
256
|
-
- Press
|
|
254
|
+
- Search by typing, fold/unfold and jump between branches with CTRL+←/CTRL+→ or ALT+←/ALT+→, page with ←/→
|
|
255
|
+
- Filter modes (CTRL+O): default → no-tools → user-only → labeled-only → all
|
|
256
|
+
- Press SHIFT+L to label entries as bookmarks and SHIFT+T to toggle label timestamps
|
|
257
257
|
|
|
258
258
|
**`/fork`** - Create a new session file from a previous user message on the active branch. Opens a selector, copies the active path up to that point, and places the selected prompt in the editor for modification.
|
|
259
259
|
|
|
@@ -410,22 +410,23 @@ pi config # enable/disable extensions, skills, pro
|
|
|
410
410
|
|
|
411
411
|
Packages install to `~/.pi/agent/git/` (git) or global npm. Use `-l` for project-local installs (`.pi/git/`, `.pi/npm/`). Git packages install dependencies with `npm install --omit=dev` by default, so runtime deps must be listed under `dependencies`; when `npmCommand` is configured, git packages use plain `install` for compatibility with wrappers. If you use a Node version manager and want package installs to reuse a stable npm context, set `npmCommand` in `settings.json`, for example `["mise", "exec", "node@20", "--", "npm"]`.
|
|
412
412
|
|
|
413
|
-
Create a package by adding
|
|
413
|
+
Create a package by adding an app-name manifest key to `package.json` (`atomic` for this package). The legacy `pi` key is still accepted as a backwards-compatible shim:
|
|
414
414
|
|
|
415
415
|
```json
|
|
416
416
|
{
|
|
417
417
|
"name": "my-pi-package",
|
|
418
418
|
"keywords": ["pi-package"],
|
|
419
|
-
"
|
|
419
|
+
"atomic": {
|
|
420
420
|
"extensions": ["./extensions"],
|
|
421
421
|
"skills": ["./skills"],
|
|
422
422
|
"prompts": ["./prompts"],
|
|
423
|
-
"themes": ["./themes"]
|
|
423
|
+
"themes": ["./themes"],
|
|
424
|
+
"workflows": ["./workflows"]
|
|
424
425
|
}
|
|
425
426
|
}
|
|
426
427
|
```
|
|
427
428
|
|
|
428
|
-
Without a
|
|
429
|
+
Without a manifest, Atomic auto-discovers from conventional directories (`extensions/`, `skills/`, `prompts/`, `themes/`, `workflows/`). Workflow packages may also use a singular `workflow/` directory.
|
|
429
430
|
|
|
430
431
|
See [docs/packages.md](docs/packages.md).
|
|
431
432
|
|
|
@@ -532,7 +533,7 @@ cat README.md | pi -p "Summarize this text"
|
|
|
532
533
|
| `--model <pattern>` | Model pattern or ID (supports `provider/id` and optional `:<thinking>`) |
|
|
533
534
|
| `--api-key <key>` | API key (overrides env vars) |
|
|
534
535
|
| `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` |
|
|
535
|
-
| `--models <patterns>` | Comma-separated patterns for
|
|
536
|
+
| `--models <patterns>` | Comma-separated patterns for CTRL+P cycling |
|
|
536
537
|
| `--list-models [search]` | List available models |
|
|
537
538
|
|
|
538
539
|
### Session Options
|
|
@@ -634,7 +635,7 @@ pi --thinking high "Solve this complex problem"
|
|
|
634
635
|
| `PI_SKIP_VERSION_CHECK` | Skip the Pi version update check at startup. This prevents the `pi.dev` latest-version request |
|
|
635
636
|
| `PI_TELEMETRY` | Override install/update telemetry. Use `1`/`true`/`yes` to enable or `0`/`false`/`no` to disable. This does not disable update checks |
|
|
636
637
|
| `PI_CACHE_RETENTION` | Set to `long` for extended prompt cache (Anthropic: 1h, OpenAI: 24h) |
|
|
637
|
-
| `VISUAL`, `EDITOR` | External editor for
|
|
638
|
+
| `VISUAL`, `EDITOR` | External editor for CTRL+G |
|
|
638
639
|
|
|
639
640
|
---
|
|
640
641
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Direct 1:1 messaging between pi sessions on the same machine. Send context, findings, or requests from one session to another — whether you're driving the conversation or letting agents coordinate.
|
|
8
8
|
|
|
9
9
|
```text
|
|
10
|
-
User flow:
|
|
10
|
+
User flow: ALT+M or run /intercom to pick a session and send a message
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Why
|
|
@@ -24,7 +24,7 @@ Pi-intercom also integrates well with [pi-subagents](https://github.com/nicobail
|
|
|
24
24
|
|
|
25
25
|
## In One Minute
|
|
26
26
|
|
|
27
|
-
Each pi session that has `pi-intercom` loaded and enabled connects to a tiny local broker over a local IPC transport. The broker keeps track of connected sessions and routes direct messages to the one you target by name or session ID. The extension gives you both a tool (`intercom`) and a small overlay UI (`/intercom` or `
|
|
27
|
+
Each pi session that has `pi-intercom` loaded and enabled connects to a tiny local broker over a local IPC transport. The broker keeps track of connected sessions and routes direct messages to the one you target by name or session ID. The extension gives you both a tool (`intercom`) and a small overlay UI (`/intercom` or `ALT+M`). Incoming messages are rendered inline inside the recipient session, can trigger a turn immediately, and are also stored in Pi session history as extension entries.
|
|
28
28
|
|
|
29
29
|
## Install
|
|
30
30
|
|
|
@@ -62,11 +62,11 @@ If a session is unnamed, pi-intercom now exposes a runtime-only fallback alias l
|
|
|
62
62
|
|
|
63
63
|
### From the Keyboard
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
**ALT+M** Open or type `/intercom` to open the session list overlay:
|
|
66
66
|
|
|
67
67
|
1. **Select a session** — Use arrow keys to pick a target session
|
|
68
68
|
2. **Compose message** — Write your message in the compose overlay
|
|
69
|
-
3. **Send** —
|
|
69
|
+
3. **Send** — Enter Send · Escape Cancel
|
|
70
70
|
|
|
71
71
|
### From the Agent
|
|
72
72
|
|
|
@@ -352,7 +352,7 @@ Only registered in sessions where `pi-subagents` supplied the required child bri
|
|
|
352
352
|
|
|
353
353
|
| Key | Action |
|
|
354
354
|
|-----|--------|
|
|
355
|
-
|
|
|
355
|
+
| ALT+M | Open session list overlay |
|
|
356
356
|
| ↑/↓ | Navigate session list |
|
|
357
357
|
| Enter | Select session / Send message |
|
|
358
358
|
| Escape | Cancel / Close overlay |
|
|
@@ -1056,7 +1056,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
|
|
|
1056
1056
|
id: Type.String(),
|
|
1057
1057
|
type: Type.String({ description: "Question type: single, multi, text, image, or info" }),
|
|
1058
1058
|
question: Type.String(),
|
|
1059
|
-
options: Type.Optional(Type.Array(Type.
|
|
1059
|
+
options: Type.Optional(Type.Array(Type.Unknown())),
|
|
1060
1060
|
context: Type.Optional(Type.String()),
|
|
1061
1061
|
})),
|
|
1062
1062
|
}, { description: "Structured interview request for reason='interview_request'" })),
|
|
@@ -4,6 +4,24 @@ import type { KeybindingsManager, Theme } from "@bastani/atomic";
|
|
|
4
4
|
import type { IntercomClient } from "../broker/client.js";
|
|
5
5
|
import type { SessionInfo } from "../types.js";
|
|
6
6
|
|
|
7
|
+
function formatKeyLabel(key: string): string {
|
|
8
|
+
return key
|
|
9
|
+
.split("+")
|
|
10
|
+
.map((part) => {
|
|
11
|
+
const lower = part.toLowerCase();
|
|
12
|
+
if (["ctrl", "cmd", "alt", "shift"].includes(lower)) return lower.toUpperCase();
|
|
13
|
+
if (lower === "esc" || lower === "escape") return "Escape";
|
|
14
|
+
if (lower === "enter") return "Enter";
|
|
15
|
+
if (/^[a-z]$/.test(lower)) return lower.toUpperCase();
|
|
16
|
+
return part;
|
|
17
|
+
})
|
|
18
|
+
.join("+");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function formatKeys(keys: readonly string[]): string {
|
|
22
|
+
return keys.map(formatKeyLabel).join("/");
|
|
23
|
+
}
|
|
24
|
+
|
|
7
25
|
export interface ComposeResult {
|
|
8
26
|
sent: boolean;
|
|
9
27
|
messageId?: string;
|
|
@@ -105,7 +123,7 @@ export class ComposeOverlay implements Component {
|
|
|
105
123
|
render(width: number): string[] {
|
|
106
124
|
const innerWidth = Math.max(24, Math.min(width - 2, 72));
|
|
107
125
|
const contentWidth = Math.max(1, innerWidth - 2);
|
|
108
|
-
const footer = `${this.keybindings.getKeys("tui.select.confirm")
|
|
126
|
+
const footer = `${formatKeys(this.keybindings.getKeys("tui.select.confirm"))}: Send • ${formatKeys(this.keybindings.getKeys("tui.select.cancel"))}: Close`;
|
|
109
127
|
const border = (text: string) => this.theme.fg("accent", text);
|
|
110
128
|
const row = (text = "") => {
|
|
111
129
|
const clipped = truncateToWidth(text, contentWidth, "", true);
|
|
@@ -3,6 +3,24 @@ import { truncateToWidth, visibleWidth } from "@mariozechner/pi-tui";
|
|
|
3
3
|
import type { KeybindingsManager, Theme } from "@bastani/atomic";
|
|
4
4
|
import type { SessionInfo } from "../types.js";
|
|
5
5
|
|
|
6
|
+
function formatKeyLabel(key: string): string {
|
|
7
|
+
return key
|
|
8
|
+
.split("+")
|
|
9
|
+
.map((part) => {
|
|
10
|
+
const lower = part.toLowerCase();
|
|
11
|
+
if (["ctrl", "cmd", "alt", "shift"].includes(lower)) return lower.toUpperCase();
|
|
12
|
+
if (lower === "esc" || lower === "escape") return "Escape";
|
|
13
|
+
if (lower === "enter") return "Enter";
|
|
14
|
+
if (/^[a-z]$/.test(lower)) return lower.toUpperCase();
|
|
15
|
+
return part;
|
|
16
|
+
})
|
|
17
|
+
.join("+");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function formatKeys(keys: readonly string[]): string {
|
|
21
|
+
return keys.map(formatKeyLabel).join("/");
|
|
22
|
+
}
|
|
23
|
+
|
|
6
24
|
function middleTruncate(text: string, maxWidth: number): string {
|
|
7
25
|
if (visibleWidth(text) <= maxWidth) {
|
|
8
26
|
return text;
|
|
@@ -103,7 +121,7 @@ export class SessionListOverlay implements Component {
|
|
|
103
121
|
render(width: number): string[] {
|
|
104
122
|
const innerWidth = Math.max(36, Math.min(width - 2, 88));
|
|
105
123
|
const contentWidth = Math.max(1, innerWidth - 2);
|
|
106
|
-
const footer = `${this.keybindings.getKeys("tui.select.confirm")
|
|
124
|
+
const footer = `${formatKeys(this.keybindings.getKeys("tui.select.confirm"))}: Message • ${formatKeys(this.keybindings.getKeys("tui.select.cancel"))}: Close`;
|
|
107
125
|
const border = (text: string) => this.theme.fg("accent", text);
|
|
108
126
|
const row = (text = "") => {
|
|
109
127
|
const clipped = truncateToWidth(text, contentWidth, "", true);
|
|
@@ -279,7 +279,7 @@ Returns accumulated messages from UI sessions. Each message includes `type`, `se
|
|
|
279
279
|
|
|
280
280
|
**Browser controls:**
|
|
281
281
|
|
|
282
|
-
- **
|
|
282
|
+
- **CMD/CTRL+Enter** — Complete and close
|
|
283
283
|
- **Escape** — Cancel and close
|
|
284
284
|
- **Done/Cancel buttons** — Same as keyboard shortcuts
|
|
285
285
|
|
|
@@ -332,7 +332,7 @@ Prefer `.mcp.json` for project-local shared MCP config. Use `.pi/mcp.json` only
|
|
|
332
332
|
| Connect | `mcp({ connect: "server-name" })` |
|
|
333
333
|
| UI messages | `mcp({ action: "ui-messages" })` |
|
|
334
334
|
|
|
335
|
-
MCP proxy and direct-tool results render compactly by default: long text shows the first three lines plus a `
|
|
335
|
+
MCP proxy and direct-tool results render compactly by default: long text shows the first three lines plus a `CTRL+O Expand` hint, while the full result remains available when expanded and is still returned unchanged to the model.
|
|
336
336
|
|
|
337
337
|
Search includes both MCP tools and Pi tools (from extensions). Pi tools appear first with `[pi tool]` prefix. Space-separated words are OR'd.
|
|
338
338
|
|
|
@@ -353,7 +353,7 @@ Tool names are fuzzy-matched on hyphens and underscores — `context7_resolve_li
|
|
|
353
353
|
|
|
354
354
|
If `settings.autoAuth` is `true`, `mcp({ connect: ... })`, `mcp({ tool: ... })`, and direct tool calls automatically run OAuth when needed and retry once.
|
|
355
355
|
|
|
356
|
-
In interactive sessions, you can also authenticate from `/mcp` with `
|
|
356
|
+
In interactive sessions, you can also authenticate from `/mcp` with `CTRL+A` or Enter on a server that needs auth. In non-interactive sessions, browser-based OAuth still requires `/mcp-auth <server>`. `/mcp-auth` without a server only opens a picker in the interactive UI.
|
|
357
357
|
|
|
358
358
|
## How It Works
|
|
359
359
|
|
|
@@ -409,7 +409,7 @@ export async function openMcpAuthPanel(
|
|
|
409
409
|
resolve();
|
|
410
410
|
}, {
|
|
411
411
|
authOnly: true,
|
|
412
|
-
noticeLines: ["Select
|
|
412
|
+
noticeLines: ["Select OAuth MCP Server. Enter/CTRL+A Authenticate."],
|
|
413
413
|
});
|
|
414
414
|
},
|
|
415
415
|
{ overlay: true, overlayOptions: { anchor: "center", width: 82 } },
|
|
@@ -96,7 +96,7 @@ export function buildHostHtmlTemplate(input: HostHtmlTemplateInput): string {
|
|
|
96
96
|
</div>
|
|
97
97
|
<div class="controls">
|
|
98
98
|
<span class="status" id="status">Loading UI...</span>
|
|
99
|
-
<button class="primary" id="done-btn" title="
|
|
99
|
+
<button class="primary" id="done-btn" title="CMD/CTRL+Enter">Done</button>
|
|
100
100
|
<button class="danger" id="cancel-btn" title="Escape">Cancel</button>
|
|
101
101
|
</div>
|
|
102
102
|
</header>
|
|
@@ -699,22 +699,22 @@ class McpPanel {
|
|
|
699
699
|
lines.push(emptyRow());
|
|
700
700
|
const hints = this.authOnly
|
|
701
701
|
? [
|
|
702
|
-
italic("↑↓") + "
|
|
703
|
-
italic("⏎") + "
|
|
704
|
-
italic("
|
|
705
|
-
italic("
|
|
706
|
-
italic("
|
|
702
|
+
italic("↑↓") + " Navigate",
|
|
703
|
+
italic("⏎") + " Auth",
|
|
704
|
+
italic("CTRL+A") + " Auth",
|
|
705
|
+
italic("Escape") + " Clear/Close",
|
|
706
|
+
italic("CTRL+C") + " Quit",
|
|
707
707
|
]
|
|
708
708
|
: [
|
|
709
|
-
italic("↑↓") + "
|
|
710
|
-
italic("
|
|
711
|
-
italic("⏎") + "
|
|
712
|
-
italic("
|
|
713
|
-
italic("
|
|
714
|
-
italic("?") + "
|
|
715
|
-
italic("
|
|
716
|
-
italic("
|
|
717
|
-
italic("
|
|
709
|
+
italic("↑↓") + " Navigate",
|
|
710
|
+
italic("Space") + " Toggle",
|
|
711
|
+
italic("⏎") + " Expand/Auth",
|
|
712
|
+
italic("CTRL+A") + " Auth",
|
|
713
|
+
italic("CTRL+R") + " Reconnect",
|
|
714
|
+
italic("?") + " Desc Search",
|
|
715
|
+
italic("CTRL+S") + " Save",
|
|
716
|
+
italic("Escape") + " Clear/Close",
|
|
717
|
+
italic("CTRL+C") + " Quit",
|
|
718
718
|
];
|
|
719
719
|
const gap = " ";
|
|
720
720
|
const gapW = 2;
|
|
@@ -299,7 +299,7 @@ export class McpSetupPanel {
|
|
|
299
299
|
return;
|
|
300
300
|
}
|
|
301
301
|
|
|
302
|
-
this.notice = { text: "Review
|
|
302
|
+
this.notice = { text: "Review Details Below. Enter Apply Action With Side Effect.", tone: "muted" };
|
|
303
303
|
this.tui.requestRender();
|
|
304
304
|
}
|
|
305
305
|
|
|
@@ -387,13 +387,13 @@ export class McpSetupPanel {
|
|
|
387
387
|
lines.push(this.padLine(line, innerW));
|
|
388
388
|
}
|
|
389
389
|
lines.push(this.padLine("", innerW));
|
|
390
|
-
lines.push(this.padLine(fg(this.t.muted, "Enter
|
|
390
|
+
lines.push(this.padLine(fg(this.t.muted, "Enter Select · Escape Back · CTRL+C Close"), innerW));
|
|
391
391
|
return lines;
|
|
392
392
|
}
|
|
393
393
|
|
|
394
394
|
private renderImports(innerW: number): string[] {
|
|
395
395
|
const lines: string[] = [];
|
|
396
|
-
lines.push(this.padLine("Select
|
|
396
|
+
lines.push(this.padLine("Select Compatibility Imports. Space Toggle · Enter Save · Escape Back.", innerW));
|
|
397
397
|
lines.push(this.padLine("", innerW));
|
|
398
398
|
for (let index = 0; index < this.discovery.imports.length; index++) {
|
|
399
399
|
const entry = this.discovery.imports[index];
|
|
@@ -412,7 +412,7 @@ export class McpSetupPanel {
|
|
|
412
412
|
|
|
413
413
|
private renderPaths(innerW: number): string[] {
|
|
414
414
|
const lines: string[] = [];
|
|
415
|
-
lines.push(this.padLine("Select
|
|
415
|
+
lines.push(this.padLine("Select Detected Config Path. Enter Open · Escape Back.", innerW));
|
|
416
416
|
lines.push(this.padLine("", innerW));
|
|
417
417
|
const paths = this.getDetectedPaths();
|
|
418
418
|
for (let index = 0; index < paths.length; index++) {
|
|
@@ -58,7 +58,7 @@ export function renderMcpToolResult(
|
|
|
58
58
|
.map((line) => line === "…" ? theme.fg("muted", line) : theme.fg("toolOutput", line))
|
|
59
59
|
.join("\n");
|
|
60
60
|
const hint = display.truncated && !options.expanded
|
|
61
|
-
? `\n${theme.fg("muted", "(
|
|
61
|
+
? `\n${theme.fg("muted", "(CTRL+O Expand)")}`
|
|
62
62
|
: "";
|
|
63
63
|
|
|
64
64
|
return new Text(`${output}${hint}`, 0, 0);
|
|
@@ -337,7 +337,7 @@ Chains open a clarify UI by default so you can preview and edit the workflow bef
|
|
|
337
337
|
Common clarify keys:
|
|
338
338
|
|
|
339
339
|
- `Enter` runs in the foreground, or in the background if background is toggled on
|
|
340
|
-
- `
|
|
340
|
+
- `Escape` Cancel/Back
|
|
341
341
|
- `↑↓` moves between steps or tasks
|
|
342
342
|
- `e` edits the task/template
|
|
343
343
|
- `m` selects a model
|
|
@@ -347,7 +347,7 @@ Common clarify keys:
|
|
|
347
347
|
- `w` edits output/write behavior where supported
|
|
348
348
|
- `r` edits reads where supported
|
|
349
349
|
- `p` toggles progress tracking where supported
|
|
350
|
-
Picker screens use `↑↓`, `Enter`, `
|
|
350
|
+
Picker screens use `↑↓`, `Enter`, `Escape`, and type-to-filter. The full-screen editor supports word wrapping, paste, `Escape` Save, and `CTRL+C` Discard.
|
|
351
351
|
|
|
352
352
|
## Agents and chains
|
|
353
353
|
|
|
@@ -902,7 +902,7 @@ Async runs write:
|
|
|
902
902
|
|
|
903
903
|
Foreground runs show compact live progress for single, chain, and parallel modes: current tool, recent output, token counts, duration, activity freshness, and current-tool duration.
|
|
904
904
|
|
|
905
|
-
Press `
|
|
905
|
+
Press `CTRL+O` to expand the full streaming view with complete output per step.
|
|
906
906
|
|
|
907
907
|
Sequential chains show a flow line like `done scout → running planner`. Chains with parallel steps show per-step cards instead.
|
|
908
908
|
|