Skip to content

Pi-Bolt 0.8.2

Choose a tag to compare

@Kushalkhemka Kushalkhemka released this 11 Oct 10:38
· 331 commits to pi-bolt since this release
ccff717

Pi-Bolt 0.8.2 runs Pi 1.1.0 on Linux x86-64, macOS on Apple silicon and Windows x64. It works with Herdr, offers opensec-pi-fff,
and has many fixes for Windows, the installers and the engine.

Herdr

In a Herdr pane, Pi-Bolt shows up as pi-bolt in Herdr's sidebar and in herdr agent list:

When Herdr shows
Pi-Bolt starts, or a run ends idle (done, until you look)
A run is going, or background subagents still are working
An extension waits for an answer during a run (a dialog, or the herdr:blocked event of pi-ask-user and pi-subagents) blocked, with its message
You quit the pane is free again
  • Sessions come back. Pi-Bolt hands Herdr the command that reopens its session, pi-bolt --session <file>, so after a Herdr
    server restart the same conversation is back in the same pane. This needs Herdr 0.9.2 or later and pi-bolt on the PATH of
    the Herdr server: start Herdr from a terminal, not with brew services.
  • Only the interactive session reports. pi-bolt -p, JSON and RPC runs, and subagents started inside Pi-Bolt do not take
    over the pane of the session that started them.
  • Herdr's own Pi integration is not needed, and not used. The file herdr integration install pi writes reports as pi
    and restores with pi --session, which starts Pi, not Pi-Bolt; Pi-Bolt does not load it. Pi, which shares ~/.pi/agent,
    still does.
  • pi-herdr, which starts other agents in Herdr panes from a Pi
    session, works in Pi-Bolt (pi-bolt install npm:@andrewjacop/pi-herdr). Herdr starts Pi agents as pi, so the Pi agents it
    spawns run Pi, which must be installed; Claude Code, Codex and the others need only their own CLIs. Pi-Bolt turns off
    pi-herdr's own report of its pane (PI_HERDR_NO_SELF_REPORT=1), which would show the pane as pi and lose the resume command.
  • On Linux and macOS the reports go to Herdr's socket, with no process started for each; on Windows they go through the herdr
    executable of the pane (HERDR_BIN_PATH), as Herdr recommends there.
  • Outside Herdr nothing changes. "-builtin:herdr" in the extensions setting turns it off.

Extensions

  • The installers offer opensec-pi-fff: pi-fff's fast find, grep and @-mentions, as fast on the default build as pi-fff with the
    JIT (not offered when @ff-labs/pi-fff is installed).
  • opensec-pi-todo 2.13.1: the todo panel now closes once the work is done, and finished tasks no longer come back after
    compaction or /reload.
  • scripts/build-pi.sh --plugins-from-installed compiles in the extensions installed on this machine: it generates the
    manifest folder that docs/PLUGINS.md asks for (scripts/gen-plugin-manifest.mjs), with --plugins-only
    and --plugins-exclude to choose (Windows: -PluginsFromInstalled). Thanks to @toadkicker (#10).
  • docs/PLUGINS.md: what to do when a plugin's module is over the compiler's size limit, and when a build stops without saying
    why (#7, @toadkicker).
  • The tool-conflict hint links to a new README section, "Pi and Pi-Bolt side by side" (piBolt.packages).

Windows

  • Stopping a command ends everything it started, also the programs a Git Bash command started.
  • The bash tool passes a command to Git Bash unchanged: doubled backslashes (C:\\Users in a heredoc, a regex) are kept.
    Git Bash is found wherever Git for Windows is. A shellPath that is not a bash (cmd.exe, PowerShell) is refused with a
    message.
  • A bare program name in a tool's command is looked up on PATH only, not in the working folder.
  • read, write and edit take Git Bash's /tmp for the user's temporary folder.
  • Ctrl+Break and closing the console window shut Pi-Bolt down as SIGTERM does (the terminal is restored, extensions get
    session_shutdown).
  • A link's click opens web and mail links and local images, text and PDFs; any other local file is shown in Explorer.
  • The find tool's path patterns: escapes and classes (src/[[]id]/*.ts) and \ as a separator.
  • A trusted folder stays trusted in any letter case; a project's settings apply to the session directory once it is trusted.
  • install.ps1: an install folder outside the profile is checked together with the folders above it; extensions are installed
    and removed from Pi-Bolt's own folder; the install command turns TLS 1.2 on first (README, site).
  • pi-bolt update leaves PATH as the user left it.
  • docs/TROUBLESHOOTING.md has a Windows section; docs/BUILDING.md covers building on
    Windows.

Install and update

  • install.sh stages the download in the install folder: a /tmp mounted noexec no longer stops an install or an update
    with "the downloaded executable does not run on this system". A download that fails or is stopped is removed.
  • pi-bolt update downloads the installer with curl or wget, whichever there is, and runs it from the home folder.
  • On macOS the PATH line for bash goes in the file a login shell reads (~/.bash_profile).
  • The npm launcher removes the builds of earlier versions from ~/.pi-bolt/npm once a new one is installed.

Pi-Bolt

  • MCP: a sign-in page is opened over https, or http to this machine, as the token endpoint already was.
  • Bedrock: a tool call whose stream ends without its contentBlockStop gets its full arguments.
  • bash: the full output of a command that printed more than the output file holds ends with what the command printed last.
  • A finished message is lexed in full, so its final rendering is what the whole text gives.
  • --smol is not left in process.execArgv.

Engine

  • x86-64: a function constructed by calling it unwinds an exception it throws with the stack aligned as C++ expects.
  • Inlined code reads which items of a spread are spread from its own code; a module variable declared with var at more than
    one place is not taken to keep its first value; a regular expression search from past the end of a string finds nothing at
    once; off ARM64, a typed field whose structure has to be checked is read the generic way.
  • The build without the JIT keeps the JIT off also where it cannot open its own file (no /proc).
  • macOS: resourceUsage() of a child process is the program's own (it was pi-spawn's, about 1 ms); a sync spawn in a process
    group of its own starts directly; a Pi-Bolt started with two of descriptors 0 to 2 closed keeps its spawn helper.
  • fs.WriteStream: a batched write that is retried after a short write goes on at the right position.
  • The runtime stamp includes the linker-order hints (profiles/runtime-*.hints), so a change to them builds new runtimes.

The runtimes

The engine changed, so the runtimes of this release were built by hand (RELEASING.md).
From the engine trees that patches/webkit.patch and patches/bun.patch make on the pinned sources (git rev-parse HEAD^{tree}):
WebKit b553f99e901bf720ece4b679123e50fcfb657aa0, Bun 38c350d92af2b622768f89794c6710ed03ef6202.

Runtime Built on bun.exe / bun SHA-256
Windows x64 the maintainer's Windows 11 machine (Intel Core i5-1335U), ThinLTO, Control Flow Guard 3ba3fe7d6f5bc35265ff4540fd0485dd493da9817f6b3f3a62e9f86564b23394
Linux x86-64 a Linux x86-64 VM (AMD EPYC 7B13), LLVM 23.1, ThinLTO, glibc 2.17 sysroot 6a65d31165a9d9a37eb0690d3e4caa11f8c19d5be42e9bfe3bd8065d66bc1db3
macOS arm64 the maintainer's MacBook Air (M5), LLVM 23.1, ThinLTO 80499e790a2bf9287b330c51b2583fa24101ba8703aae4a6a0680277625e9c30

A runtime is not yet built bit for bit the same twice, so these are what was built, not what anyone would get. Tested on each
platform: tests/aot 61/61 (new: edge-cases.mjs), tests/runtime 6/6 and Pi's checks on every build; on Linux also the old
distributions and CPUs (tests/compat: CentOS 7, Debian 9, Amazon Linux 2, Haswell to Nehalem).

Releases

  • release: a dry run of the latest release takes its runtime from the signed release. tag tags a version bump also when
    pi-bolt moved on only with files ci ignores. fetch-sources checks an existing checkout against sources.json and the
    patch, and stops when it is another engine's.
  • The site has documentation: pi-bolt.opensec.in/docs.

Install

curl -fsSL https://pi-bolt.opensec.in/install.sh | sh
powershell -c "irm https://pi-bolt.opensec.in/install.ps1 | iex"

or pi-bolt update, or npm install -g --allow-scripts=pi-bolt pi-bolt, or bun add -g --trust pi-bolt.

Asset For
pi-bolt-linux-x64.tar.xz / .tar.gz Recommended on Linux. CPUs with AVX2 (Intel Haswell 2013+, AMD Zen+).
pi-bolt-linux-x64-baseline.tar.xz / .tar.gz Any x86-64 CPU with SSE4.2.
pi-bolt-linux-x64-jit.tar.xz / .tar.gz JIT also on, for plugins loaded at run time.
pi-bolt-darwin-arm64.tar.xz / .tar.gz macOS. Macs with Apple silicon, macOS 13 or later.
pi-bolt-darwin-arm64-jit.tar.xz / .tar.gz macOS, JIT also on.
pi-bolt-win32-x64.zip Windows. Windows 10 (1809) or 11 on x64; compiled code on AVX2 CPUs, bytecode on others.
pi-bolt-win32-x64-jit.zip Windows, JIT also on.
pi-bolt-runtime-linux-x64.tar.gz, pi-bolt-runtime-darwin-arm64.tar.gz, pi-bolt-runtime-win32-x64.zip The Pi-Bolt Bun runtime, for compiling plugins in.

Linux x86-64 with glibc 2.17 or later; macOS 13 or later on Apple silicon; Windows 10 1809 or later, or Windows 11, on x64.