chore(deps): update dependency can1357/oh-my-pi to v17.0.6 #109
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/can1357-oh-my-pi-17.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
17.0.5→17.0.6Release Notes
can1357/oh-my-pi (can1357/oh-my-pi)
v17.0.6Compare Source
@oh-my-pi/pi-ai
Fixed
chatgpt_account_id) is captured as the credential's org at login with the plan type as its display label, and two members of one workspace keep separate rows (#2966).invalid_argumenttrailers as context overflow when the serialized message history is already large, routing cumulative tool-output payload failures through context maintenance—including artifact-backed shake rescue—instead of retrying the same rejected history.@oh-my-pi/pi-catalog
Added
swe-1-7model so it is bundled even when catalog generation runs without a Devin session token.Fixed
glm-5-2for 200K free,glm-5-2-1mfor 1M paid). The 200K entry routes every thinking effort to the freeglm-5-2wire UID — never to the quota-gatedglm-5-2-maxorglm-5-2-none— so GLM-5.2 works even when the weekly usage quota is exhausted.@oh-my-pi/pi-coding-agent
Added
generate_image. The tool now resolves a connectedopenai-codexOAuth credential and drives OpenAI's hostedimage_generationtool through the ChatGPT backend (chatgpt.com/backend-api/codex/responses,chatgpt-account-idheader) independent of the active chat model — so image generation works on a ChatGPT/Codex subscription with no meteredOPENAI_API_KEY, even when the active model is Claude/Gemini/etc. A newproviders.image: "openai-codex"option forces it;autonow auto-detects a connected subscription (priority: active GPT image tool > Codex subscription > Antigravity > xAI > OpenRouter > Gemini), and theopenaipreference falls back to it when noOPENAI_API_KEY/active GPT model is present.providerparameter togenerate_image(auto|openai|openai-codex|antigravity|xai|gemini|openrouter) that overrides theproviders.imagesetting for a single request — so "generate this using gemini / codex / xai" routes per-call without changing the global setting. Absent → theproviders.imagesetting applies, unchanged; the named provider uses the same resolution semantics (falls back to auto-detect if it has no credentials). File:tools/image-gen.ts(imageProviderSchema,findImageApiKeypreferencearg).OTEL_EXPORTER_OTLP_LOGS_ENDPOINT(or the sharedOTEL_EXPORTER_OTLP_ENDPOINT) is set,ompregisters aLoggerProviderand forwards every centralized-logger event as an OTLP log record (severity + attributes + active span context for log↔trace correlation, min level viaOTEL_LOG_LEVEL, plus a structuredagent run completedsummary event). WhenOTEL_EXPORTER_OTLP_METRICS_ENDPOINT(or the shared endpoint) is set, it registers aMeterProviderwith aPeriodicExportingMetricReaderand records GenAI-semconvgen_ai.client.token.usagepluspi.omp.agent.*counters/histograms (runs, steps, chat/tool calls by name+status+finish reason, latencies, estimated cost, errors) from the agent run summary and per-chat usage hooks. Each signal honors its ownOTEL_*_EXPORTER=nonekill switch, the globalOTEL_SDK_DISABLED, and declines non-http/protobufprotocols independently (#4604).retry.fallbackChainswildcards now support id-prefixed targets and keys: a chain entry like"openrouter/google/*"re-prefixes the failing model's bare id (google-antigravity/gemini-x→openrouter/google/gemini-x), a plain"provider/*"entry falling back from an aggregator strips the vendor prefix when the target provider only knows the bare id (openrouter/google/x→google-vertex/x), and an id-prefixed key ("openrouter/google/*") scopes a chain to that provider's ids under the prefix./tree,/branch) now supports Shift+Enter to summarize-and-switch in one step: it forks from the selected entry with a branch summary, with no extra prompt and regardless ofbranchSummary.enabled. Plain Enter keeps the current behavior (direct switch by default; the summary prompt only whenbranchSummary.enabledis on). (#5152)YYYY-MM-DD HH:mm:ss, down to the second) to the per-turn token-usage row shown under assistant messages whendisplay.showTokenUsageis enabled.Changed
docs/advisor-watchdog.mdoverstating advisor delivery for a normal yield: the severity table listedconcernas unconditionally interrupting and the prose promised a self-ended run could always be steered/resumed. Documented the #4840 terminal-answer exception (concernbecomes a passive card whileblockernormally steers, #5628) plus the plan-mode and deferred-ACP constraints that preserve would-be steers until the user resumes (#5913).todo init. Subagent sessions in a non-interactive host (print/RPC/ACP/eval/SDK/CI) have no operator-visible title and now skip the replan title refresh; interactive hosts keep it, since a live subagent focused from the Agent Hub renders its session name in the status line (#5910).tab.scroll()timing out after a queued wheel event waits too long for a busy renderer's acknowledgement (#5905).edit.enforceSeenLines), and stopped excluding column-clipped (>512-char) lines from a snapshot's seen set: a displayed line now counts as seen even when its display was column-truncated, so single-line edits on long lines found viaread/grepapply without a separate full-width re-read.astGrep.enabledsetting tofalse<context>to<repo-rules>to stop it colliding with thetasktool'scontextparameter under in-band XML tool dialects: models were closing<parameter name="context">with a stray</context>(primed by the ambient section tag) and emitting sibling params as bare<tasks>elements, sotasksarrived missing.read xd://calls in the compact grouped read view instead of a full tool-execution card; other internal URLs (skill://,agent://, …) still render full so their resolved content stays visible.Fixed
!/!!shell shortcut spawning fish as a login shell (fish -l -c …), which firedstatus is-loginblocks in user config (agent/keychain setup, PATH mutation) on every command. fish is now started with-iinstead — interactive shells source the sameconfig.fish/conf.dfiles (so aliases and functions from #1816 keep working) without login-shell side effects. zsh behavior (-l -i) is unchanged.tok/sbadge ignoring vibe worker sessions: in/vibemode the director is often idle while workers stream, so the badge showed a stale/zero rate while parallel work was actively generating tokens. The rate now aggregates the main session's live tok/s with every live vibe worker's tok/s, and falls back to the main session's own cached rate when no workers are streaming.plan.defaultOnStartupbeing ignored by headlessomp -psessions, so the initial prompt now runs in plan mode and the persisted session remains in plan mode for later review (#6017).modelRoles.plansetting (#6015).--model <role>resolving a bare configuredmodelRoleskey.tab.click("e501"),@e501) everywherearia-ref=e501works — previously the tab-worker backend fell through to a CSS tag selector that could never match, burning the 2s zero-match watchdog with a misleading "matches no elements" hint.tab.select,tab.uploadFile,tab.press({ selector }),tab.screenshot({ selector }), andtab.dragnow resolve refs too. Unknown/stale refs fail immediately with the "refresh refs" error.tab.selectno longer double-reports the previously selected option of a single<select>: the returned selection is read back after the full assignment pass instead of mid-loop.render()via the segment reuse bypass. Reverts the compaction half of #5930's fix (compose keeps the render bypass; the local frame is no longer truncated).stop_reason: "refusal") ending the turn with no visible error. Two independent regressions: (1) session events reached subscribers out of order when a turn's provider events landed in one tick — extension emits only await for event types with registered handlers, so the assistantmessage_endovertook its ownmessage_startand the TUI skipped the error render entirely (no pinned banner, no inlineError:line); subscriber fan-out is now serialized in emission order. (2) Refusal turns are pruned from active context at settle (#3591), which also erased them fromstate.messagesbeforeprompt()resolved — print mode printed nothing and exited 0, and the task executor'sgetLastAssistantMessage()saw the previous turn. The pruned refusal is now retained until the next run starts,getLastAssistantMessage()reports it, and print mode reads the settled assistant via that accessor (exit 1 + refusal message on stderr). Additionally,#lastAssistantMessageis now set synchronously onmessage_endto preventagent_endmaintenance from reading a stale assistant turn when tool results and stops land in the same tick.before_provider_requestextension contexts exposing the primary session model for cross-provider Advisor requests instead of the request model (#6006).tasksubagents mutating the parent checkout and stacking parallel task branches. Copy isolation backends (reflink/apfs/btrfs/zfs/block-clone/rcopy) materialise the worktree by duplicating its.gitverbatim; when the parent is a linked git worktree its.gitis a pointer file, so the isolation shared the parent's HEAD/index/ref namespace and a task'sgit checkout/commitmoved the parent's branch (and the rcopygit worktree addpath leaked task branches into the shared namespace so a second task committed on top of the first).ensureIsolationnow runs a newgit.detachGitDirafterisoStart: each isolation becomes a standalone repo with a frozen HEAD/refs/index snapshot that borrows the source object database throughobjects/info/alternates, so isolated git operations stay private, every task branch is parented on the requested base, and patch/branch capture (git fetch <merged>) still resolves objects. (#6003)browser.runleaving Puppeteer request handlers and interception state with divergent lifetimes by removing run-scoped handlers, disabling interception, and releasing held requests on every exit path (#6004).openai-codexbase URLs, API keys, and headers without leaking official OAuth credentials to custom endpoints; explicitly selected providers now fail closed instead of silently falling back (#6001).launch startwaiting for a finite PTY command to exit when the broker's PID-file handoff was unavailable; PTY startup now reports the spawned PID directly and returns an authoritative running or exited snapshot promptly (#5996).hub startcalls after the broker request may already have been written; only passive hub waits and followed logs are now interruptible (#5995).startDebuggingchild sessions, synchronizing breakpoints across the session tree, and terminating every child connection (#5984).getPackageDirorgetProjectDirfrom@earendil-works/pi-coding-agent(aliased to the legacy shim). The shim only re-exportedgetAgentDir; the two missing path helpers now resolve —getProjectDirfrom@oh-my-pi/pi-utils, andgetPackageDiras a string-valued wrapper over omp's canonical package-root helper that falls back to the executable's directory insidebun --compilebinaries (where the canonical helper returnsundefined), matching pi's string contract. Extensions like@gotgenes/pi-permission-systeminstall and load, andpath.join(getPackageDir(), …)no longer crashes in the shipped binary (#5968).continueto re-enter context maintenance at the same boundary; capped empty turns are now discarded and the failure names model switching or/shake imagesas recovery options (#5959).convertToLlmover settled history every turn. Conversion is memoized per message identity (plus the assistantinterruptedNextneighbor flag): an exact re-convert of the same array reuses the outerMessage[], append-only growth reuses the converted prefix via slice-on-growth, and the prune/shake/strip-images/prewalk-scrub rewrite seams invalidate the affected message before the next pass. On thellm-assemblybench (N=5000) steady/append convert and repeat estimate are all >10x faster with robust MAD-noise well under 20% (#5934)./exithanging on post-prompt work and stacking independent subsystem teardown delays by bounding the aborted-work drain, disposing independent session resources concurrently, and keeping long shutdown waits visible (#5932).isErrorremainstrueon the result so the model still knows the command did not complete normally. ThetimedOutflag is now propagated from the bash executor to distinguish timeouts from user aborts.DefaultPackageManageror linkedom: the coding-agent compatibility shim now enumerates OMP extension paths with plugin metadata, and extension-graph CommonJS modules load through synchronous default-export bridges with linkedom's bundled canvas fallback. (#5658)planrole model mid-planning not taking effect on the active planning turn; the change now applies at the next turn boundary instead of only the next plan-mode entry (#5657).ctx.setInterval/ctx.setTimeout/ctx.clearTimerhelpers on the extension context. Callbacks scheduled through them run with the same isolation as handler dispatch — a throw or rejected promise is logged and reported through the extension error channel instead of escaping as a process-fataluncaughtException— and every outstanding timer isunref'd and cleared automatically onsession_shutdown(#5664).setInterval/setTimeoutcallback throwing being able to tear down the whole session. Such callbacks ran outside the handler-dispatch try/catch, surfaced as a process-leveluncaughtException, and the global postmortem handler treated them as fatal; extension authors now have sanctioned managed timers (see Added), and the constraint is documented indocs/extensions.md/docs/skills/authoring-extensions.md(#5664)./quitand/exitleaving failed or stalled automatic title-generation requests alive during session teardown; disposal now aborts both online provider and local tiny-model title requests (#5666).startup.quietstill rendering thexdev: xd://: mounted …status line when MCP tools connect; quiet startup now suppresses only the user-visible mount notice while retaining the hidden model-facing device update (#5670).hubtool with a non-POSIX shell (#5682)cursorprovider: the advisor runs in its ownAgentthat was constructed withoutcursorExecHandlers, so on Cursor — where every tool executes server-side and is dispatched back through the client's exec handlers — each advisor tool call (including the MCPadvisetool) came backtoolNotFound/"tool not available" and no advice was ever routed. The advisorAgentnow gets a Cursor exec bridge scoped to its own granted tool set, mirroring the primary agent. The bridge's nativedeleteframe is gated so a read-only advisor cannot delete workspace files it was never granted a mutating tool for (#5680).atlassianalongside an importedatlassian:atlassian), and stale tools remaining registered after disconnecting a server with special characters in its name./usage showin use by this session:marker showing only the login email, so two same-email Anthropic credentials in different orgs (a Team seat and a personal Max plan) were indistinguishable. The marker now suffixes the active organization (email (OrgName)) via a sharedformatActiveAccountLabel, matching the account list and login-success surfaces (#5691)..cmd/.batshims failing withTransport closed; the launch now builds acmd.exe /d /e:ON /v:OFF /ccommand line escaped forcmd.exe's parser and spawned withwindowsVerbatimArguments, so the resolved command path and arguments (including%VAR%, quotes, and shell metacharacters) reach the server intact and cannot inject commands (BatBadBut / CVE-2024-24576) (#5696).R:\):fs.realpaththrowsEISDIRthere, butcanonicalProjectDirinlaunch/presence.tsandlaunch/client.tsonly recoveredENOENT. It now also falls back topath.resolve()onEISDIR(#5708 by @ve3xone).__omp_worker_*CLI selectors exiting 0 with empty output instead of erroring; an unrecognized worker-host selector now writesError: unknown worker selector: …to stderr and exits nonzero, so a stale or mistyped selector can no longer look healthy to a parent process or install smoke path (#5712).local://<slug>-plan.mdread as a same-basename working-directory path; a missing cwd-root alias now recovers the active session-local plan while preserving any real working-tree file (#5704).manage_skillandlearntools (#5715).writeapproval gate misclassifyingxd://device writes asexecwhen the mounted tool declared a function-valued (argument-dependent)approval: the gate discarded the function and never decoded the device JSON payload, so read/write device operations prompted in non-yolo modes their approval mode permits. It now parses valid object payloads and evaluates the mounted tool's normal approval decision, while malformed JSON, non-object payloads, and unknown devices still fall back toexecand prompt (#5727).roslyn-language-servercrashing after initialization when they request unconfiguredworkspace/configurationsections; missing settings now receive the spec-requirednullinstead of{}(#5745).new_session/switch_session/branch/tree navigation, and an intentionally dropped session stays deleted instead of being recreated by a straggling result (#5743).scope: "local"leaking skills, hooks, tools, commands, and MCP servers into unrelated projects (#5750).omp -pwaiting indefinitely after a completed turn when final mnemopi consolidation stalls; print mode now applies the same bounded consolidation shutdown budget as interactive exit and reaps the embed worker (#5753).xd://presentation for ambient discoverable custom and MCP tools, which sent their schemas top-level and could exceed provider tool limits or trigger schema-compatibility errors.providers.webSearch: kimisending a Moonshot Open Platform credential (MOONSHOT_API_KEY/ storedmoonshotauth) to the Kimi Code search endpoint (api.kimi.com/coding/v1/search), which rejects it with401and silently falls back to another provider. Kimi web search now resolves and advertises Kimi Code credentials only — a Kimi Code Console key viaKIMI_SEARCH_API_KEY/MOONSHOT_SEARCH_API_KEYoromp /login kimi-code(#5762).registerTooldemoting essential built-ins (read/write/bash/edit/glob/…) todiscoverablewhen a re-registration omittedloadMode, which — withtools.xdevon — unmounted them from the top-level schema and broke thexd://transport (read xd:///write xd://), leaving the model with no callable coding essentials. OmittedloadModenow defaults to"essential"for known essential built-in names at every adapter boundary, andread/write(the transport itself) are never mounted under xdev regardless ofloadMode(#5764).retry.fallbackChainsmodel chain; advisor fallbacks now emit the same applied and succeeded lifecycle events as primary-agent fallbacks (#5740).SMOL,SLOW) instead of the display name (Fast,Thinking), matching the rest of the TUI and CLI/env role terminology (#5585).xd://devices, including user-configured MCP servers, through Cursor's request-context MCP catalog and execution bridge (#5650).sendandensureLivecould hand out or inject into a subagent session mid-parkdispose: park now detaches and flips status toparkedbeforesession.dispose(), concurrentensureLivecancels a pre-detach park or waits then revives, and IRC delivery always gates throughensureLiveso receipts/unread counts stay truthful (#5633).dev.autoqa.consent→dev.autoqaConsentandtodo.reminders.max→todo.remindersMaxon settings load so pre-v17 nested or quoted-dotted config no longer leaves the parent path as an object (which madedev.autoqatruthy and enabled Auto QA, and discarded the reminder limit). Explicit new keys win, a separately configured parent boolean is preserved, an irrecoverable object parent falls back to the schema default, and only the new keys persist on save (#5632).~/.claude/tools(or.omp/tools) module attaches a stdin consumer at import time — e.g. an MCPStdioServerTransportconstructed at module top level, or a bareprocess.stdin.resume(). The custom-tool/extension/hook/plugin loader guard now snapshots and restoresprocess.stdin(listeners, paused state, raw mode) around third-party module evaluation, so a hijacked stdin reader can no longer starve the TUI's own listener (#5618).>input gutter; the prompt-style editor chrome now aligns to column 0 (#5313)--mode rpc) crashing the whole process with an uncaughtSyntaxError: Failed to parse JSONLon any non-JSON stdin line. Malformed lines are now reported via aFailed to parse commanderror frame and the frame loop keeps running. (#5194)/extensionsdashboard tab labeled "Agents (standard)" being confused with the/agentssubagents feature — the.agent/.agentsconfig-standard provider now presents as "Agent Dirs (.agent/.agents)" since it lists skills, rules, prompts, commands, and context/system files, never subagents (#5821).readline selectors returning context outside the requested inclusive range (#5802).vibe_waitTV-wall panels stacking duplicate frozen frames in native scrollback while two or more workers were live (#5777).task.showResolvedModelBadgeis enabled. (#5060)page/browserpromises from crashing inline browser workers or killing dedicated workers when a target closed before the caller awaited the promise.prepareCompactionhas nothing to summarize (findCutPointnever cuts inside a tool result). This!preparationshort-circuit never ran the artifact-backedshakeelide rescue that #3786 added to the post-maintenance guard, so snapcompact/context-full maintenance paused with no attempt to shrink the oversized tail. The dead-end now runs the same elide pass, re-prepares on the shrunken branch, and falls through to a normal compaction when the tail became summarizable — only pausing (single warning) when nothing is elide-eligible. (#4786)curlby adding a dedicatedgithubfile-read operation and explicit tool-routing guidance (#4805).agent_endframes without losing complete Python prompt results, and guaranteed worker reaping plus pending-request rejection after output-reader failures or explicit stops (#5405).web_searchbeing unreachable under default config: withtools.xdev: true, the discoverableweb_searchtool was mounted underxd://and dropped from the top-level toolset, so models calling it directly got "Tool web_search not found". It is now pinned top-level viaXDEV_KEEP_TOP_LEVELwhile other discoverable tools keep mounting underxd://(#5973).models.ymlprovider configuration and default-role selection (#5979).autoResumecrossing an explicit/newboundary: after/newa new session's JSONL is created lazily (only once assistant output exists), so exiting before any assistant message left the per-terminal breadcrumb pointing at a not-yet-materialized file.readTerminalBreadcrumbEntryrejected the missing target andcontinueRecent()fell back to the most-recent session — the pre-/newtranscript — processing the next prompt with stale context./newnow records a durablefreshbreadcrumb boundary thatcontinueRecent()honors (starting fresh) even when the target is absent, while a genuinely stale/deleted breadcrumb still falls back to the most-recent session (#5730).yieldresults from leaving the parent waiting forever; malformed submissions now repeat the required response format, and repeated invalid submissions fail the child with a clear error. (#4957)-eextensions in compiled binaries failing to resolve bundled@oh-my-pi/*value imports through theomp-legacy-pi-bundled:registry, and surfaced extension load failures during interactive and-psession startup. (#4954)Removed
bash,grep, etc.) outside its grant: exec-resolved native blocks are already rejected in-band by the advisor-scoped bridge, so they no longer trip the unavailable-tool quarantine and discard theadviseemitted in the same turn (#5900).anthropic-messagesOAuth providers being unable to opt into configured Claude Code fingerprint header overrides. (#5888)openai-codex) keeping unsupported bundled models selectable when a fresh model cache and an expired OAuth token coincided: built-in discovery now forces the OAuth refresh so the provider's model manager is constructed and prunes stale bundled entries (e.g.gpt-5.4-nano) instead of waiting out the cache TTL. (#5364)@oh-my-pi/omp-stats
Changed
@oh-my-pi/pi-tui
Fixed
What's Changed
New Contributors
Full Changelog: https://github.com/can1357/oh-my-pi/compare/v17.0.5...v17.0.6
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.