🐙
$ git clone https://github.com/can1357/oh-my-pi.git
@oh-my-pi/pi-agent-core
Added
- Added a pre-model-call gate:
AgentLoopConfig.beforeModelCallreceives the finalized provider context and run abort signal, and may return{ stop: true, reason? }to end the run before the provider is called, so a host can refuse a request it has decided not to pay for (prompt no longer fits, budget boundary crossed, session should hand off).Agent.setBeforeModelCallinstalls the host callback;Agent.addBeforeModelCallregisters an additional one without displacing it and returns a disposer. A gate-stopped run retains pending soft tool reminders/escalations and an unserved hard tool choice for the next admitted request; deferred choices are revalidated against active tools and cleared with queued session state ().
Changed
- Input message events (prompt, steering, soft reminders) are now emitted once provider-context preparation succeeds, so a pre-model gate can veto the request before any turn opens; gate-stopped and failed runs still commit their accepted inputs ().
@oh-my-pi/pi-ai
Added
- Added
getProxyForUrl()for transports that need provider-specific and standard proxy environment resolution withNO_PROXYsupport (, ). - Restructured the steering/interjection envelope sent to the model: the injected
<user_interjection>...<message>...</message>...wrapper around user text is now a<system-notice>explaining the interjection followed by the user's raw message unwrapped, matching the existing<system-notice>/<system-directive>convention instead of nesting the literal message inside its own tag pair, which some models found confusing.
Fixed
- Fixed a disabled higher-priority MCP server no longer disabling a same-named lower-priority one: disabled servers are now suppressed after key-level dedupe instead of dropped before it, so a project
foowithenabled: falsekeeps the user-levelfoooff while still not starving a differently-named equivalent connection. - Fixed the MCP tool-name collision winner flipping when the current owner reconnects: the winner is now chosen by a stable server+tool key instead of tool-array insertion order, which reconnects reorder.
- Fixed MCP resources with custom URI schemes being treated as missing filesystem paths.
readandomp readnow resolve server-advertised native resource URIs such asags://capabilities/current-host, while preserving the existingmcp://<resource-uri>form. - Fixed three gaps in native MCP resource URI resolution: server-advertised URIs whose path is exactly
/(e.g.catalog://root/) are now preserved byte-for-byte instead of losing the trailing slash to reconstruction; opaque resource URIs (urn:example:document,custom:item) are recognized by thereadandomp readresolver gates instead of falling through to filesystem handling; and a failingresources/templates/listno longer discards a successfulresources/list, which previously produced a false missing-resource error. - Fixed custom LSP servers sending
languageId: "plaintext"for extensions outside the built-in language map by honoring an optional per-serverlanguageIdinlsp.jsonfor disk and in-memory document opens (). - Fixed the per-handler extension context snapshotting the live
ctx.modelgetter, so a handler callingpi.setModel()and then readingctx.modelsaw the stale model; the scoped context now delegates to the base context instead of spreading it. - Fixed Python cell errors (
$commands and the eval tool) leaking runner-internal traceback frames. Cell syntax errors now render as the bare caret display with a<cell>filename instead of a_handle_request_async/ast.parsestack dump, and runtime tracebacks start at user code, matching the Ruby runner's user-frame filtering. - Dropped unavailable forced tool choices through the queue rejection lifecycle and discarded their remaining sequence yields so a skipped force cannot disable tools on the next request ().
- Fixed identical MCP server connections discovered under direct and marketplace-plugin names spawning twice and duplicating mounted tool routes; distinct tools whose server names sanitize to the same route now keep the first registration and log both origins ( for
/tools//mcp), so the panel landed above a still-growing live block and was recommitted lower down (). - Fixed
/livesideband WebSockets ignoring standard proxy environment variables andNO_PROXY, which left proxied sessions stuck while the rest of the Codex connection succeeded (). - Fixed
learned.mdsaves growing a blank line on every write (trailing-newline split artifact) and hoisting all headings/prose above all bullets, which re-scoped lessons under the wrong heading in hand-organized files. Saves are now byte-idempotent and preserve mixed Markdown ordering: non-list lines keep their positions, new lessons insert newest-first at the head of the first bullet run, and dedupe/cap operate on bullet lines in place.
@oh-my-pi/pi-natives
Changed
- Native addons now build with Bazel (rules_rust + hermetic zig cc toolchains for linux-gnu/musl, host Xcode for darwin, and a hermetic clang-cl + xwin toolchain for windows-msvc) instead of the napi CLI + cargo-zigbuild/cargo-xwin pipeline.
bun run builddrivesscripts/bazel-natives.ts; TypeScript binding regeneration moved tobun run build:bindings(needed only when the Rust API surface changes). CI caches through a content-addressed bazel-remote action cache instead of sccache + target-directory snapshots, cutting warm native rebuilds from ~20 minutes to seconds and cold cache-hit builds to ~2.5 minutes.
Fixed
- napi binding build failures now surface the exit code and the tail of stdout/stderr instead of a bare "napi build failed" message ( always runs.
- Fixed the multi-line prompt editor bypassing the keybindings registry for word/line delete and yank:
ctrl+backspace(a declared default oftui.editor.deleteWordBackward) never fired andkeybindings.ymlremaps ofdeleteWordBackward,deleteWordForward,deleteToLineStart,deleteToLineEnd,yank, andyankPopwere ignored, because those actions were matched with hardcoded chords instead ofkeybindings.matches(...)like cursor motion and the single-lineInputalready do (). - Fixed plain Backspace deleting a whole word inside tmux/GNU screen/Zellij panes launched from Windows Terminal: multiplexers inherit
WT_SESSIONbut emit raw0x08for plain Backspace, so the automatic raw-backspace →ctrl+backspaceheuristic misfired. The heuristic now skips multiplexer sessions (TMUX/STY/ZELLIJorTERMstarting withtmux/screen);PI_TUI_RAW_BACKSPACE_IS_CTRL=1remains the explicit opt-in everywhere ( in in in in in in in in in in in in in in in in made their first contribution in made their first contribution in made their first contribution in
Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf github.com.
Wie bewertest du diesen Beitrag?
1 Klick Feedback Teilen mit Netzwerk & Team:
Hat Ihnen dieser Tipp / Anleitung geholfen?
Community-Analysen & Experten-Meinungen 0
Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf „ Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum 🔴 Akute Relevanz 49%
🟡 In Evaluierung 22%
🟢 Keine Auswirkung 16%
Spannende Innovation 13%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Tipp: Mit Pfeiltasten [ ← ] und [ → ] blättern
SOCIAL SHARE CARD GENERATOR