pi-chassis 0.7.1 → 0.9.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 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.9.0] - 2026-11-03
8
+
9
+ ### Changed
10
+
11
+ - Allows pi 1.5: the peer dependency range is now `>=1.2.0 <1.6.0`, and CI tests pi 1.2.0 and 1.5.0. `docs/internals.md` records what was checked on pi 1.5.0.
12
+
13
+ ## [0.8.0] - 2026-10-30
14
+
15
+ ### Changed
16
+
17
+ - 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.
18
+ - 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).
19
+
7
20
  ## [0.7.1] - 2026-10-23
8
21
 
9
22
  ### Changed
@@ -113,6 +126,8 @@ First public release.
113
126
  - Plain and Nerd Font icon sets (`/chassis icons`).
114
127
  - Sanitizing of untrusted text (file contents, tool output, git and forge output, session names, widget text) before it reaches the terminal.
115
128
 
116
- [Unreleased]: https://github.com/one24-ai/pi-chassis/compare/v0.7.1...HEAD
129
+ [Unreleased]: https://github.com/one24-ai/pi-chassis/compare/v0.9.0...HEAD
130
+ [0.9.0]: https://github.com/one24-ai/pi-chassis/compare/v0.8.0...v0.9.0
131
+ [0.8.0]: https://github.com/one24-ai/pi-chassis/compare/v0.7.1...v0.8.0
117
132
  [0.7.1]: https://github.com/one24-ai/pi-chassis/compare/v0.7.0...v0.7.1
118
133
  [0.7.0]: https://github.com/one24-ai/pi-chassis/releases/tag/v0.7.0
package/README.md CHANGED
@@ -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 supports one pi minor version, declared in `peerDependencies`; supporting a new pi minor is a minor release of pi-chassis. Every change is listed in [CHANGELOG.md](CHANGELOG.md); how a release is cut is in [RELEASING.md](RELEASING.md).
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
 
@@ -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.1.0. If either is missing, or pi
7
+ * `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0 and 1.5.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.
@@ -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.1.0. If either is missing, or pi
7
+ * `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0 and 1.5.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.1.0), both undone on uninstall:
3
+ * (pi and extensions share one module instance; verified on pi 1.4.0 and 1.5.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,
@@ -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.1.0), both undone on uninstall:
3
+ * (pi and extensions share one module instance; verified on pi 1.4.0 and 1.5.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.2.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.
5
+ This was last checked on pi 1.5.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
- Other unsupported hooks, all checked on pi 1.2.0:
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. On pi 1.4.0 each was seen running unless noted. On pi 1.5.0 every member below was compared with 1.4.0 in pi's source and found unchanged, except that `ToolExecutionComponent.prototype.render` now applies pending arguments first (`argsPending`), before chassis reads anything; the sidebar split, prompt bars and tool rows were also seen running:
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
- - Thinking peek: finds the latest assistant message component in the TUI tree.
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.1.0. If either is missing, or pi
7
+ * `setLayoutRoot()` (pi-tui ViewportTUI), verified on pi 1.4.0 and 1.5.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.1.0), both undone on uninstall:
3
+ * (pi and extensions share one module instance; verified on pi 1.4.0 and 1.5.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.7.1",
3
+ "version": "0.9.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.3.0",
87
- "@earendil-works/pi-tui": ">=1.2.0 <1.3.0"
86
+ "@earendil-works/pi-coding-agent": ">=1.2.0 <1.6.0",
87
+ "@earendil-works/pi-tui": ">=1.2.0 <1.6.0"
88
88
  },
89
89
  "devDependencies": {
90
90
  "@types/node": "24.10.1",