Releases: zyoung11/pi-bin
Releases · zyoung11/pi-bin
Release list
0.1.8
pi-bin v0.1.8
fix:
- TUI rendered every non-BMP character (emoji) as two U+FFFD replacement chars: the mini-markdown lexer fallback walked the text one UTF-16 code unit at a time, splitting surrogate pairs into lone surrogates that fail UTF-8 encoding on output. Walk surrogate pairs as one character (charCodeAt high/low check; codePointAt has no scriptc lowering)
- selecting a model without a modelThinkingLevels entry (first pick of a new model via /model) crashed with the scriptc missing-key trap: getModelThinkingLevel indexed the settings record directly, and a missing key traps before ?. can guard. Reads over external settings JSON now go through the dyn record view
- streaming render crashed (scriptc missing-key trap) when a latex command was cut mid-name by a streaming chunk: renderLatex hit truncated commands like backslash-m and looked them up in typed lookup tables (SYMBOLS, ACCENTS, NEGATED_SYMBOLS, replaceCharacters tables) whose dynamic keys scriptc materializes as fixed slots, so any unseen key traps instead of returning undefined. All dynamic table reads now go through the dyn record view with typeof-string narrowing
0.1.7
pi-bin v0.1.7
fix:
- bash abort: Esc could not interrupt running commands and orphaned children kept stealing the TTY input (sudo/read password prompts leaked onto the TUI, input felt frozen)
- spawnProcess silently dropped the detached option (scriptc requires a detached boolean literal; branch into two inline calls) so command shells never led their own process group
- processGroupId parsed /proc/pid/stat with an off-by-one (returned ppid, not pgrp), making the pid-reuse guard reject every group kill killProcessTree now group-kills group leaders and single-kills non-leaders instead of returning silently
- with detached fixed, commands run without a controlling terminal: sudo/password prompts fail fast with a pipe-visible error instead of hanging the TUI
0.1.6
0.1.5
pi-bin v0.1.5
fix:
- streaming: TUI rendered spinner-only and dumped all text at message end;
scriptc snapshots record fields holding arrays, so output.content stayed an empty
snapshot until the finish-stage reassignment. Transport now reassigns
output.content after every block push and message_update passes partialMessage by
reference - json/rpc: toolcall_start events crashed consumers reverse-reading the empty
partial content; events now carry id/toolName directly, reverse-read and JSON
round-trip helper removed - openai-http: timeoutMs was an absolute request timer killing long generations
at the 300s default with "This operation was aborted"; now an idle timer re-armed
on every chunk, cleaned up in finally, with an explicit "Request idle timeout: no
data received for Ns" error - editor: pasted content was submitted as the literal [paste #N] placeholder;
expansion matched only bare markers while inserted markers always carry a suffix.
Replaced with a scanner equivalent to upstream's dynamic-RegExp semantics;
fold-on-paste behavior unchanged from upstream - openai-http: declared dialect reasoning fields (reasoning_content, reasoning,
reasoning_text) on ChatCompletionChunkDelta; scriptc cast copies drop undeclared
fields, so thinking blocks were never created from OpenAI-compatible endpoints