pi-chassis 0.7.0 → 0.8.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 -1
- package/README.md +5 -5
- package/dist/chassis/layout.d.ts +1 -1
- package/dist/chassis/layout.js +1 -1
- package/dist/chassis/messages.d.ts +1 -1
- package/dist/chassis/messages.js +1 -1
- package/docs/internals.md +12 -4
- package/extensions/chassis/layout.ts +1 -1
- package/extensions/chassis/messages.ts +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ All notable changes to pi-chassis (published under an earlier name up to 0.3.0)
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.8.0] - 2026-10-30
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Allows pi 1.3 and 1.4: the peer dependency range is now `>=1.2.0 <1.5.0`. Checked on pi 1.2.0 and 1.4.0; pi 1.3 was not tested. `docs/internals.md` now lists every unofficial pi hook chassis uses.
|
|
12
|
+
- Versioning: a release now declares a range of supported pi versions instead of one pi minor. Adding a pi minor is a minor release, dropping one is a breaking change, and CI tests the lowest and highest supported versions (README, Versioning).
|
|
13
|
+
|
|
14
|
+
## [0.7.1] - 2026-10-23
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- README: the install commands no longer pin a version or a tag, and the advice to pin is gone.
|
|
19
|
+
|
|
7
20
|
## [0.7.0] - 2026-10-23
|
|
8
21
|
|
|
9
22
|
### Changed
|
|
@@ -107,5 +120,7 @@ First public release.
|
|
|
107
120
|
- Plain and Nerd Font icon sets (`/chassis icons`).
|
|
108
121
|
- Sanitizing of untrusted text (file contents, tool output, git and forge output, session names, widget text) before it reaches the terminal.
|
|
109
122
|
|
|
110
|
-
[Unreleased]: https://github.com/one24-ai/pi-chassis/compare/v0.
|
|
123
|
+
[Unreleased]: https://github.com/one24-ai/pi-chassis/compare/v0.8.0...HEAD
|
|
124
|
+
[0.8.0]: https://github.com/one24-ai/pi-chassis/compare/v0.7.1...v0.8.0
|
|
125
|
+
[0.7.1]: https://github.com/one24-ai/pi-chassis/compare/v0.7.0...v0.7.1
|
|
111
126
|
[0.7.0]: https://github.com/one24-ai/pi-chassis/releases/tag/v0.7.0
|
package/README.md
CHANGED
|
@@ -7,12 +7,12 @@ Requires pi 1.2 and Node.js 22.19 or later.
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
pi install npm:pi-chassis
|
|
11
|
-
pi install git:github.com/one24-ai/pi-chassis
|
|
12
|
-
pi install /path/to/pi-chassis
|
|
10
|
+
pi install npm:pi-chassis # from npm, the latest release
|
|
11
|
+
pi install git:github.com/one24-ai/pi-chassis # from git, the main branch
|
|
12
|
+
pi install /path/to/pi-chassis # a local checkout
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
`pi update` moves to the latest release; the [changelog](CHANGELOG.md) says what changed.
|
|
16
16
|
|
|
17
17
|
pi-chassis replaces pi's header, footer and editor, so it does not combine with another package that replaces any of them (pi-open-tui is one): keep only one such package in `packages`.
|
|
18
18
|
|
|
@@ -45,7 +45,7 @@ pi-chassis follows [Semantic Versioning](https://semver.org). The public API is:
|
|
|
45
45
|
- the slash commands, their arguments and the `ctrl+x` and `ctrl+p` keys,
|
|
46
46
|
- the settings it stores in `~/.pi/agent/chassis.json`.
|
|
47
47
|
|
|
48
|
-
A change that breaks one of those is a major version, a new feature is a minor version, and a fix is a patch. Before 1.0.0, a breaking change bumps the minor version instead (0.1 to 0.2). Each release
|
|
48
|
+
A change that breaks one of those is a major version, a new feature is a minor version, and a fix is a patch. Before 1.0.0, a breaking change bumps the minor version instead (0.1 to 0.2). Each release declares the pi versions it supports in `peerDependencies`. Adding a pi minor version is a minor release; dropping one is a breaking change. CI tests the lowest and highest supported pi versions. Every change is listed in [CHANGELOG.md](CHANGELOG.md); how a release is cut is in [RELEASING.md](RELEASING.md).
|
|
49
49
|
|
|
50
50
|
## Credits
|
|
51
51
|
|
package/dist/chassis/layout.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fullscreen mode: pi renders one layout root (a VStack of transcript + input dock). We wrap it in
|
|
5
5
|
* an HStack with the sidebar as a fixed-width right column, which is what OpenCode looks like.
|
|
6
6
|
* There is no extension API for this: it relies on the TUI's `layoutRoot` field and
|
|
7
|
-
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.
|
|
7
|
+
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0. If either is missing, or pi
|
|
8
8
|
* swaps the root back (renderer switch), the guard widget re-wraps it or we fall back.
|
|
9
9
|
*
|
|
10
10
|
* Regular mode has no layout root, so the sidebar is a toggleable overlay instead.
|
package/dist/chassis/layout.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fullscreen mode: pi renders one layout root (a VStack of transcript + input dock). We wrap it in
|
|
5
5
|
* an HStack with the sidebar as a fixed-width right column, which is what OpenCode looks like.
|
|
6
6
|
* There is no extension API for this: it relies on the TUI's `layoutRoot` field and
|
|
7
|
-
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.
|
|
7
|
+
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0. If either is missing, or pi
|
|
8
8
|
* swaps the root back (renderer switch), the guard widget re-wraps it or we fall back.
|
|
9
9
|
*
|
|
10
10
|
* Regular mode has no layout root, so the sidebar is a toggleable overlay instead.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenCode-style transcript styling. pi has no renderer hooks for these, so two prototype patches
|
|
3
|
-
* (pi and extensions share one module instance; verified on pi 1.
|
|
3
|
+
* (pi and extensions share one module instance; verified on pi 1.4.0), both undone on uninstall:
|
|
4
4
|
*
|
|
5
5
|
* 1. User messages (UserMessageComponent.render): a ┃ bar in the agent colour, then the message
|
|
6
6
|
* on the panel background with 1 row of padding above and below and 2 columns on the left,
|
package/dist/chassis/messages.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenCode-style transcript styling. pi has no renderer hooks for these, so two prototype patches
|
|
3
|
-
* (pi and extensions share one module instance; verified on pi 1.
|
|
3
|
+
* (pi and extensions share one module instance; verified on pi 1.4.0), both undone on uninstall:
|
|
4
4
|
*
|
|
5
5
|
* 1. User messages (UserMessageComponent.render): a ┃ bar in the agent colour, then the message
|
|
6
6
|
* on the panel background with 1 row of padding above and below and 2 columns on the left,
|
package/docs/internals.md
CHANGED
|
@@ -2,12 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
pi has no extension API for a side panel. In fullscreen mode (`"tuiMode": "fullscreen"`), pi renders one layout root, a vertical stack of transcript plus input. pi-chassis wraps that root in a horizontal stack with the sidebar as a fixed 48-column right column, using pi-tui's `setLayoutRoot()`.
|
|
4
4
|
|
|
5
|
-
This was last checked on pi 1.
|
|
5
|
+
This was last checked on pi 1.4.0. A pi update could change these internals. If that happens, or in regular mode, the sidebar falls back to a pop-up overlay (`ctrl+x b`), and everything else keeps working.
|
|
6
6
|
|
|
7
7
|
Below 116 columns the split sidebar hides itself. Context, cost and provider usage, status widgets and other extensions' statuses (MCP, LSP, ...) live in the sidebar; whenever it is hidden they show in the footer instead.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The split relies on `tui.layoutRoot`, `tui.setLayoutRoot()`, the entries of pi-tui's `HStack` and `VStack` (`basis`, `grow`, `shrink`, `minSize`, `visible`) and the `Symbol.for("@earendil-works/pi-tui/layout-node")` method.
|
|
10
|
+
|
|
11
|
+
Other unsupported hooks, checked on pi 1.4.0 (seen running unless noted):
|
|
10
12
|
|
|
11
13
|
- Prompt bars: patches `UserMessageComponent.prototype.render`. The original is restored on `/chassis off` and on shutdown.
|
|
12
|
-
- Tool rows: a renderer resolver (`pi.registerToolRenderer`) draws the built-in tools' calls; pi's own tool definitions, settings and active tool set are not touched.
|
|
13
|
-
-
|
|
14
|
+
- Tool rows: a renderer resolver (`pi.registerToolRenderer`) draws the built-in tools' calls; pi's own tool definitions, settings and active tool set are not touched. Rows from other extensions are compacted by patching `ToolExecutionComponent.prototype.render` (reads `expanded`, `isPartial`, `result`, `contentBox`, `imageComponents`, `toolDefinition`, and the row above's `lastMessage` and `isStreaming`). The compact path for tools without their own shell was read in pi's source, not seen running.
|
|
15
|
+
- Finished thinking: patches `AssistantMessageComponent.prototype.render` to drop the hidden-thinking label from settled messages (reads `contentContainer`, `lastMessage`, `isStreaming`, `hideThinkingBlock`, `thinkingVisibilityOverrides`).
|
|
16
|
+
- Extension notices: patches `CustomMessageComponent.prototype.render` (reads `message.customType`). Read in pi's source, not seen running.
|
|
17
|
+
- Thinking peek: finds the latest assistant message component in the TUI tree and calls `setHiddenThinkingLabel`.
|
|
18
|
+
- Leader keys that map to slash commands call the editor's `onSubmit`, which pi copies onto chassis's editor (seen with `ctrl+x s`; `ctrl+x r` not run).
|
|
19
|
+
- The prompt reads the editor's `renderedVisibleLineCount`, and the chat container is found by matching component class names (`UserMessageComponent`, `AssistantMessageComponent`, `ToolExecutionComponent`) in the TUI tree.
|
|
20
|
+
|
|
21
|
+
Several of these read members that are private or protected in pi's types (`Stack.entries`, `ScrollView.child`, `MouseRegion.child`) or match class names, so the type check does not catch a change: re-check them by running pi after each pi update.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fullscreen mode: pi renders one layout root (a VStack of transcript + input dock). We wrap it in
|
|
5
5
|
* an HStack with the sidebar as a fixed-width right column, which is what OpenCode looks like.
|
|
6
6
|
* There is no extension API for this: it relies on the TUI's `layoutRoot` field and
|
|
7
|
-
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.
|
|
7
|
+
* `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0. If either is missing, or pi
|
|
8
8
|
* swaps the root back (renderer switch), the guard widget re-wraps it or we fall back.
|
|
9
9
|
*
|
|
10
10
|
* Regular mode has no layout root, so the sidebar is a toggleable overlay instead.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenCode-style transcript styling. pi has no renderer hooks for these, so two prototype patches
|
|
3
|
-
* (pi and extensions share one module instance; verified on pi 1.
|
|
3
|
+
* (pi and extensions share one module instance; verified on pi 1.4.0), both undone on uninstall:
|
|
4
4
|
*
|
|
5
5
|
* 1. User messages (UserMessageComponent.render): a ┃ bar in the agent colour, then the message
|
|
6
6
|
* on the panel background with 1 row of padding above and below and 2 columns on the left,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-chassis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "A workbench for pi: an interface, git workflows and a widget platform for everyday engineering. Sidebar and home screen, Build/Plan modes, ctrl+x leader keys and a ctrl+p palette, a git diff view, git commands that draft commit messages and pull requests, and a widget and brand API for other packages.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
"release": "node scripts/release.mjs"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
|
-
"@earendil-works/pi-coding-agent": ">=1.2.0 <1.
|
|
87
|
-
"@earendil-works/pi-tui": ">=1.2.0 <1.
|
|
86
|
+
"@earendil-works/pi-coding-agent": ">=1.2.0 <1.5.0",
|
|
87
|
+
"@earendil-works/pi-tui": ">=1.2.0 <1.5.0"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
90
|
"@types/node": "24.10.1",
|