pi-squire 0.18.4 → 0.19.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
@@ -6,6 +6,17 @@ follows [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.19.0] - 2026-11-02
10
+
11
+ ### Changed
12
+
13
+ - **Breaking:** Pi 1.5.0 or later is now required. Delegate result expand hints use Pi's
14
+ configured keybinding, and the inline delegate dashboard and new-delegate
15
+ settings form report that Pi is waiting for a choice. The render tests now
16
+ require the configured key in the hint instead of accepting a missing key;
17
+ dashboard and form tests pin their blocked-input status. The active-tools
18
+ test fake now preserves retained tools' order, matching Pi 1.5.
19
+
9
20
  ## [0.18.4] - 2026-11-02
10
21
 
11
22
  ### Fixed
@@ -1072,7 +1083,8 @@ author's dotfiles; the changes below are against that copy.
1072
1083
 
1073
1084
  - The published file list includes `child.ts`, which `index.ts` imports.
1074
1085
 
1075
- [Unreleased]: https://github.com/gvanderclay/pi-squire/compare/v0.18.4...HEAD
1086
+ [Unreleased]: https://github.com/gvanderclay/pi-squire/compare/v0.19.0...HEAD
1087
+ [0.19.0]: https://github.com/gvanderclay/pi-squire/compare/v0.18.4...v0.19.0
1076
1088
  [0.18.4]: https://github.com/gvanderclay/pi-squire/compare/v0.18.3...v0.18.4
1077
1089
  [0.18.3]: https://github.com/gvanderclay/pi-squire/compare/v0.18.2...v0.18.3
1078
1090
  [0.18.2]: https://github.com/gvanderclay/pi-squire/compare/v0.18.1...v0.18.2
package/README.md CHANGED
@@ -10,12 +10,11 @@ answers with one message, which the parent session shows as a result.
10
10
 
11
11
  You need:
12
12
 
13
- - Pi 1.3.0 or later, on macOS or Linux (not Windows). Pi 1.3.0 is the version
14
- pi-squire is tested with. It provides the per-run `before_agent_start`
15
- preparation for idle custom-message results, the structured system-prompt
16
- options the parent guidance uses, and the extension APIs the package relies
17
- on. Pi supplies the peer dependencies `@earendil-works/pi-coding-agent` and
18
- `typebox`.
13
+ - Pi 1.5.0 or later, on macOS or Linux (not Windows). Pi 1.5.0 is the version
14
+ pi-squire is tested with. It provides configured keybinding hints for delegate
15
+ results, blocked-input status for inline choice screens, and the extension
16
+ APIs the package relies on. Pi supplies the peer dependencies
17
+ `@earendil-works/pi-coding-agent` and `typebox`.
19
18
  - tmux 3.2 or later, with the Pi session running in a tmux pane. That is the
20
19
  first version with `new-session -e`. Windows are placed
21
20
  relative to the pane's session (see [Where delegate windows
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-squire",
3
- "version": "0.18.4",
3
+ "version": "0.19.0",
4
4
  "description": "Starts a delegate Pi session in a background tmux window, sends it the task over message:*, and shows the parent its result",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -45,15 +45,15 @@
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@earendil-works/pi-ai": "*",
48
- "@earendil-works/pi-coding-agent": ">=1.3.0",
48
+ "@earendil-works/pi-coding-agent": ">=1.5.0",
49
49
  "@earendil-works/pi-tui": "*",
50
50
  "typebox": "*"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@biomejs/biome": "2.5.14",
54
- "@earendil-works/pi-ai": "1.3.0",
55
- "@earendil-works/pi-coding-agent": "1.3.0",
56
- "@earendil-works/pi-tui": "1.3.0",
54
+ "@earendil-works/pi-ai": "1.5.0",
55
+ "@earendil-works/pi-coding-agent": "1.5.0",
56
+ "@earendil-works/pi-tui": "1.5.0",
57
57
  "@types/node": "26.6.5",
58
58
  "pi-session-mail": "0.6.0",
59
59
  "typebox": "1.4.3",
package/src/navigator.ts CHANGED
@@ -263,6 +263,7 @@ function show(
263
263
  redraw: () => tui.requestRender(),
264
264
  rows: () => tui.terminal.rows,
265
265
  }),
266
+ { blocked: { kind: "question", message: "Choose a delegate action" } },
266
267
  );
267
268
  }
268
269
 
@@ -441,6 +441,7 @@ export async function startNewDelegate(ctx: ExtensionContext, deps: NewDelegateD
441
441
  cwdProblem: (value: string): string | undefined => cwdProblem(value, ctx.cwd),
442
442
  done,
443
443
  }),
444
+ { blocked: { kind: "question", message: "Choose delegate settings" } },
444
445
  );
445
446
  if (chosen === undefined) return;
446
447
  await deps.start({ agent: agent.name, task, ...(label === undefined ? {} : { label }), ...chosen }, ctx);
package/src/render.ts CHANGED
@@ -9,7 +9,6 @@ import { homedir } from "node:os";
9
9
 
10
10
  import {
11
11
  getMarkdownTheme,
12
- keyHint,
13
12
  type MessageRenderer,
14
13
  type MessageRenderOptions,
15
14
  type Theme,
@@ -178,7 +177,7 @@ function idLines(details: MessageDetails): string[] {
178
177
  */
179
178
  export function renderMessage(
180
179
  message: Parameters<MessageRenderer>[0],
181
- { expanded, outputPad }: MessageRenderOptions,
180
+ { expanded, outputPad, keyHint }: MessageRenderOptions,
182
181
  theme: Theme,
183
182
  ): Component | undefined {
184
183
  const details = message.details as MessageDetails | undefined;
@@ -192,7 +191,8 @@ export function renderMessage(
192
191
  box.addChild(expanded ? new Text(header, 0, 0) : new TruncatedText(header));
193
192
  if (details.kind === "result" && details.limit !== undefined)
194
193
  box.addChild(new Text(theme.fg("warning", details.limit), 0, 0));
195
- for (const child of expanded ? expandedLines(details, theme) : collapsedLines(details, theme)) box.addChild(child);
194
+ for (const child of expanded ? expandedLines(details, theme) : collapsedLines(details, theme, keyHint))
195
+ box.addChild(child);
196
196
  return box;
197
197
  }
198
198
 
@@ -209,7 +209,7 @@ function headerLine(details: MessageDetails, status: string, theme: Theme): stri
209
209
  }
210
210
 
211
211
  /** A result's first lines, a count of the rest, and the expand hint. */
212
- function collapsedLines(details: MessageDetails, theme: Theme): Component[] {
212
+ function collapsedLines(details: MessageDetails, theme: Theme, keyHint: MessageRenderOptions["keyHint"]): Component[] {
213
213
  const children: Component[] = [];
214
214
  if (details.kind === "result") {
215
215
  const lines = plainLines(details.body);