github can1357/oh-my-pi v15.12.0

latest releases: v15.12.3, v15.12.2, v15.12.1...
7 hours ago

@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 JSON on every subsequent request, bricking the session). The final Anthropic payload is now deep-sanitized with toWellFormed() 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 view command to create a read-only spectator join link
  • Added read-only hints and status text for guest-only participation in collab sessions
  • Added share.serverUrl and share.redactSecrets settings: the share server/viewer base for /share links (default https://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.autoRedeem from a boolean to unset/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
  • /share no 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 (when gh is 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 is https://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 unless share.redactSecrets is off. Custom ~/.omp/agent/share.{ts,js,mjs} handlers keep the legacy HTML-file contract; /share also works for in-memory (--no-session) sessions now
  • /collab now prints a join hint with both link forms: the compact omp join link 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: fastembed and onnxruntime-node are 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 job tool prompt now documents that omitting poll waits 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 job tool 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 against dist/cli.js. fastembed/onnxruntime-node are no longer bundled; on first use Mnemopi bun 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 :level are no longer rendered with the global default thinking level (which applyRootSessionOptions pre-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 readOnly field 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 /collab now 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 into dist/ 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.ts bundles 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 ToolRenderHost seam

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 fastembed and onnxruntime-node from dependencies to optional peerDependencies pinned to exact versions. When the peers are absent (bundled CLI, compiled binary, or installs that skip optional peers), the local embedding path bun 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, idempotent bun install of a pinned dependency set into a cache dir) and a multi-root installRuntimeModuleResolver()/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) alongside getFastembedCacheDir()

@oh-my-pi/pi-wire

Added

  • Added readOnly flags to participant and session payload types to indicate when a guest is connected via a read-only (view) link
  • Added writeToken to GuestFrame hello payloads and parsed collaboration links so full-access links can carry and expose a write-capability token
  • Added ROOM_KEY_BYTES and WRITE_TOKEN_BYTES constants 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 /share links

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

Don't miss a new oh-my-pi release

NewReleases is sending notifications on new releases.