Skip to content

v0.14.0

Latest

Choose a tag to compare

@nicobailon nicobailon released this 29 Jul 06:01

Added

  • overlayAnchor config (#3, reported by @ttttmr). The overlay was always centered; it can now be pinned to any of the nine host anchors, for example "top-center" to move it up. Invalid values warn and fall back to center.
  • Custom spawn agents (#16, reported by @krikchaip). Any key under spawn.commands is now a real spawn agent, usable through spawn: { agent: "..." }, /spawn <agent>, spawn.defaultAgent, spawn.defaultArgs, worktrees, and prompt passthrough. Agent names are validated when config loads, fresh/fork stay reserved /spawn keywords, fork stays Pi-only, and an unconfigured agent now fails with the list of configured agents instead of building a broken command.

Changed

  • Tightened TypeScript/runtime boundaries for config and output queries: config JSON roots are now validated before merging, non-finite numeric config/query values fall back to defaults, and monitor/PTY internals avoid unnecessary type assertions.
  • Cut over to the current pi package scope: all imports now use @earendil-works/pi-coding-agent and @earendil-works/pi-tui, and local module specifiers use .ts extensions.
  • Declared @earendil-works/pi-coding-agent, @earendil-works/pi-tui, and typebox as peer dependencies with a * range, following pi's package contract. typebox is no longer a direct dependency because pi resolves all of these through its extension loader aliases.
  • Added engines.node: >=22.19.0 to match pi's minimum supported Node version.
  • Added strict TypeScript checking (tsconfig.json, npm run typecheck) and fixed all resulting errors.
  • ToolParams is now derived from the typebox schema (Static<typeof toolParameters>) instead of a hand-written duplicate; the drift this exposed was fixed by constraining handsFree.updateMode to 'on-quiet' | 'interval' in the schema, so invalid values are rejected at the tool boundary instead of silently misbehaving.
  • Config shortcuts (focusShortcut, spawn.shortcut) are validated as key identifiers when loading config; invalid shortcuts now warn and fall back to the defaults instead of silently never matching.
  • Compiled monitor config is now a discriminated union on strategy, making fileWatch presence impossible to misuse for non-file-watch strategies.
  • /dismiss selection no longer treats an unmatched select label as "dismiss all".

Fixed

  • Respond to fish's Primary Device Attribute query so interactive fish sessions do not wait for the 10-second terminal capability timeout (#21, reported by @PaulGrandperrin).