@oh-my-pi/pi-ai
Fixed
- Fixed Anthropic requests bypassing lone-surrogate sanitization after payload hooks or Anthropic-origin tool-call replay: the model itself can emit unpaired surrogate escapes in its own tool-argument JSON (streamed out fine, then rejected with
400 The request body is not valid JSONon every subsequent request, bricking the session). The final Anthropic payload is now deep-sanitized withtoWellFormed()immediately before SDK serialization; the pass is identity-preserving, so well-formed arguments stay byte-identical and prompt-cache prefixes are unaffected.
@oh-my-pi/pi-coding-agent
Added
- Added
/collab viewcommand to create a read-only spectator join link - Added read-only hints and status text for guest-only participation in collab sessions
- Added
share.serverUrlandshare.redactSecretssettings: the share server/viewer base for/sharelinks (defaulthttps://my.omp.sh/s) and a toggle (default on) that runs the secret obfuscator over the shared snapshot before upload - HTML session exports now embed subagent transcripts: sub-session files stored next to the session (
<session>/<AgentId>.jsonl, recursively) ride along in the export payload, agent ids in task tool cards become drill-down links, and a breadcrumbed overlay renders each subagent's full transcript — including its own tool cards and deeper nested agents — with Esc/backdrop navigation - Added Agent Hub focus mode: Enter on a local agent now retargets the main view to that live subagent session with regular transcript rendering, steering, Esc-to-main return, ←← parent navigation, and a ghost status-line badge.
Changed
- Blocked cycling model and thinking presets while a focused subagent session is active and now prompts users to return to the main session first
- Changed
codexResets.autoRedeemfrom a boolean tounset/yes/no: unset runs the eligibility check and asks before spending a saved Codex reset, yes redeems without prompting, and no skips the check entirely - Changed collab links so full links with a write token grant mutation rights while links without a token now join as read-only
/shareno longer uploads a plaintext HTML export to a gist for gistpreview. It now snapshots the session JSON, gzips and seals it with a fresh AES-256-GCM key, and pushes the blob to a secret gist (whenghis authenticated) or to the share server (capped at 1 MB; oversized sessions are trimmed — images first, then long strings, then oldest entries). The share link ishttps://my.omp.sh/s/<id>#<key>: the viewer fetches the blob (hex ids from the gist API, others from the relay store) and decrypts it in-browser, so the key never leaves the client. Configured secrets are additionally redacted from the snapshot unlessshare.redactSecretsis off. Custom~/.omp/agent/share.{ts,js,mjs}handlers keep the legacy HTML-file contract;/sharealso works for in-memory (--no-session) sessions now/collabnow prints a join hint with both link forms: the compactomp joinlink for terminals and a click-to-join browser deep link (https://<relay-host>/#<link>, displayed scheme-less, OSC 8-linked) — the relay serves the collab web client at/, and the room id + key ride in the URL fragment, so they never appear in any HTTP request./join,omp join, and the web connect screen accept either form- npm installs no longer download fastembed's ~270MB ONNX native dependency tree eagerly:
fastembedandonnxruntime-nodeare external to the bundle and optional peers of@oh-my-pi/pi-mnemopi, fetched on demand only when Mnemopi local embeddings are first used - The
jobtool prompt now documents that omittingpollwaits on all running jobs, so agents stop enumerating every job id to poll everything - Collapsed task tool blocks now cap the per-agent list at 4 rows: the live progress view keeps the running/pending tail visible behind a
… N more agents (…)summary line with per-status counts, finalized batches keep failed/aborted rows visible while folding the slowest successes, and the streaming call preview caps at the same 4 (expand shows the full list) - The anchored Subagents HUD above the editor now lists only detached background spawns: sync task calls (the parent turn is blocked and the inline tool block already renders live progress) and eval
agent()helpers (rendered by their eval cell's own progress tree) no longer appear in the list - Completed rows in the
jobtool output now show the standard done checkmark instead of the watch glyph that replaced the spinner - HTML session exports render tool calls through the same React tool renderers the collab web client uses: per-tool views for all built-in tools (bash, edit diffs, todo boards, eval cells, task batches, LSP, search, browser screenshots, …) are bundled as an
<omp-tool-view>web component into the export instead of the previous string-built dummy renderers - Modernized the HTML export page chrome to match the tool-card design language: hairline borders, dense mono typography, compact role-tinted message cards, refined tree sidebar and filter controls, themed scrollbars, collapsed-by-default thinking blocks, and mobile sidebar drawer — derived from the active theme's variables so light and dark themes both render correctly
- Agent Hub's embedded chat overlay is now reserved for collab guest viewing; local agents open in the main session renderer instead.
Fixed
- Filtered silent abort markers from Agent Hub assistant output so failed turns now render as normal error text
- Reset focus-session state when switching transcript rendering between the main session and a focused subagent so streaming/progress context no longer leaks across sessions
- Fixed read-only collab sessions so prompting, interrupts, and other write actions are blocked with a read-only warning instead of being applied
- Fixed Mnemopi local embeddings in bundled and compiled installs failing with
Cannot find module '../bin/napi-v3/.../onnxruntime_binding.node': the Bun bundle inlined fastembed's loader so its relative native require resolved againstdist/cli.js.fastembed/onnxruntime-nodeare no longer bundled; on first use Mnemopibun installs the pinned pair into~/.omp/cache/fastembed-runtime/<version-key>and loads the binding from there (#2389) - Fixed the interactive Model scope startup banner so models without an explicit thinking level do not show
:undefined, and entries that were scoped without a:levelare no longer rendered with the global default thinking level (whichapplyRootSessionOptionspre-fills on the cycling array for Ctrl+P) (#2385).
@oh-my-pi/collab-web
Added
- Added support for optional write tokens in collaboration links so full links can embed the room key and write token (48-byte fragment) while legacy key-only (32-byte) links remain supported
- Added parsing of web deep links in the form
https://<relay>/#<room>#<key>so links opened from a page URL hash resolve correctly - Added a
readOnlyfield to guest snapshots to indicate whether the connected guest has view-only access - Link parsing accepts full web deep links (
https://<relay>/#<link>) pasted into the connect screen, matching the URL/collabnow prints - Site metadata for the deployed client: favicon set, web app manifest, robots.txt, sitemap, JSON-LD, and Open Graph/Twitter cards with a collab-specific og-image; static assets live in
public/and are copied intodist/at build - Added
src/tool-render/: a shared per-tool React renderer suite (one view per built-in tool — bash, read, edit diffs, todo boards, eval cells, task batches, LSP, search, browser screenshots, …) with a common chrome (ToolView), design tokens that adapt to the host theme, and an<omp-tool-view>web-component wrapper;scripts/build-tool-views.tsbundles it (React included) for embedding into coding-agent HTML session exports - Task tool cards now render agent ids as drill-down links: clicking one opens the matching subagent drawer in the live client (and the embedded sub-session overlay in HTML exports) via the new
ToolRenderHostseam
Changed
- Changed composer input to disable prompting and show a read-only session placeholder when guests connect in view-only mode
- Changed agent drawer to hide kill/revive controls and message input for read-only guests
- Changed header bar to show a read-only session chip and label read-only participants as view-only
- Restyled the client onto the omp brand palette: deep-purple surfaces, pink accent, cyan focus ring (was warm amber); og-image re-rendered to match
- Transcript tool cards now use the per-tool renderers instead of the generic args/result JSON dump — structured summaries in the collapsed header and tool-specific bodies (commands, diffs, todo boards, result images) when expanded
@oh-my-pi/hashline
Changed
- Condensed all parser/applier/patcher error and warning messages: shorter wording, same diagnostic anchors (op names, line numbers, suggested fallback forms)
@oh-my-pi/pi-mnemopi
Changed
- Moved
fastembedandonnxruntime-nodefromdependenciesto optionalpeerDependenciespinned to exact versions. When the peers are absent (bundled CLI, compiled binary, or installs that skip optional peers), the local embedding pathbun installs the pinned pair into~/.omp/cache/fastembed-runtime/<version-key>on first use and loads fastembed from there — restoring local embeddings in bundled distributions and removing ~270MB of eager native downloads from default installs (#2389)
@oh-my-pi/pi-utils
Added
- Added
runtime-install: shared on-demand runtime dependency support —ensureRuntimeInstalled()(locked, idempotentbun installof a pinned dependency set into a cache dir) and a multi-rootinstallRuntimeModuleResolver()/resolveRuntimeModule()for loading those graphs inside compiled binaries (Bun #1763). Extracted from the coding-agent tiny-model worker; now also backs Mnemopi's on-demand fastembed runtime (#2389) - Added
getFastembedRuntimeDir()(~/.omp/cache/fastembed-runtime) alongsidegetFastembedCacheDir()
@oh-my-pi/pi-wire
Added
- Added
readOnlyflags to participant and session payload types to indicate when a guest is connected via a read-only (view) link - Added
writeTokentoGuestFramehello payloads and parsed collaboration links so full-access links can carry and expose a write-capability token - Added
ROOM_KEY_BYTESandWRITE_TOKEN_BYTESconstants for room key and write-token sizing in the wire protocol - Added
DEFAULT_SHARE_URL(https://my.omp.sh/s), the default share viewer/upload base for/sharelinks
What's Changed
- fix(cli): correct Model scope thinking suffix by @roboomp in #2387
- fix(cli): suppress model scope banner when quiet by @roboomp in #2388
Full Changelog: v15.11.8...v15.12.0