pi-mono/packages/durable/CHANGELOG.md
2026-10-05 10:21:24 +02:00

3.5 KiB

Changelog

[Unreleased]

[1.0.3] - 2026-10-05

Breaking Changes

  • FileSystem requires openBinaryReader() and openDirReader(); custom environments must implement them.
  • BinaryReader requires scanLines().
  • FileSystem requires watch().
  • Shell.exec() accepts an argv array besides a shell string, and ShellExecOptions.onOutput receives a third info argument naming the stream (stdout or stderr); custom environments must accept both forms and pass the stream.

Added

  • openBinaryReader() for bounded positional reads of one opened regular file, with noFollow to refuse a final-component symlink.
  • openDirReader() for paged directory listings that read metadata only for returned entries.
  • Argv form of exec(), which runs a program without a shell.
  • createEnvConformance() and registerEnvConformance() in @earendil-works/pi-durable/testing for checking custom ExecutionEnv implementations.
  • settings.progress with partialIntervalMs and outputIntervalMs configures how often generation partials and running tool output are committed; defaults stay 100 ms (#10357)
  • ShellExecOptions.window and ShellOutputInfo.skipped: an environment may omit shell output outside the caller's retained tail and report the omission, so remote environments need not transfer output the caller drops. ToolExecutionApi.outputWindow provides the window and output(chunk, skipped) counts omissions; the bash tool passes them through.
  • BinaryReader.scanLines() locates and measures a span of lines in one pass inside the environment; LineScanner, StreamDecoder, rangeDecoder() and startsWithBom() in @earendil-works/pi-durable/env let other environments decode and scan exactly like NodeExecutionEnv.
  • FileSystem.watch() reports changes to files and directories, recursive with excludes, including missing targets, with explicit overflow and error and a native or polling mode. NodeExecutionEnv polls on Windows (native watchers there keep directories open, which blocks renaming their parents) and on network and FUSE file systems, and on macOS rescans shortly after installing native watchers because FSEvents misses changes made right after fs.watch returns; its watch option sets the mode, poll interval, and directory limit.

Changed

  • The read tool reads only the file's header, one scan, and the lines it shows, instead of loading the whole file; its results are unchanged.

Fixed

  • NodeExecutionEnv.flushFile() on a directory fails with is_directory on Windows, as on POSIX.
  • Tail-retained tool output no longer depends on when progress commits happened: a progress snapshot compacted the stored output to the kept window, which could move where a later window's first line started.
  • NodeExecutionEnv shell output and text line readers no longer drop a U+FEFF that follows a chunk boundary; Node's streaming TextDecoder with BOM handling dropped it, unlike decoding all of the bytes at once.

[1.0.2] - 2026-10-04

Fixed

  • Persisted a distinct provider session UUID per conversation and forwarded it for prompt-cache and session affinity (#10424)

[1.0.1] - 2026-10-03

[1.0.0] - 2026-10-01

Added

  • Initial release of @earendil-works/pi-durable, a durable agent harness. See the README and the design document.