@oh-my-pi/pi-agent-core
Added
agent_startcarriesresumedToolCallIdswhen a continued run first executes the calls of an unpaired assistant tail
Fixed
- Cancelling an
askafter a background job finishes now reports the user cancellation instead of telling the model to retry a skipped tool (#15985)
@oh-my-pi/pi-ai
Breaking Changes
resolveGatewayApiKeyandbuildGatewayApiKeyResolver(@oh-my-pi/pi-ai/auth-gateway) take the request's route options ({ storage, client? }) instead of anAuthStorage, their resolver callback receives the resolved credential, andresolveGatewayAccounttakes that credential (#15900 by @alphastorm)
Added
- Added scoped clients to
startAuthGateway(clients,setClients): each client bearer is limited to its own models and OAuth accounts, with no fallback to other accounts or API keys, and request log lines name the client and the credential a request started on (#5098, #15900 by @alphastorm) - Added experimental native image judgments for TypeSafe Jev's
jev-latest,jev-preview,jev-1.13.0, andjev-1.14.0, plus OpenRouter'stypesafe/jev-1.13,typesafe/jev-1.14, and~typesafe/jev-latestmodels; images outside Jev's documented size bounds fall through to a vision chat judge instead of failing (#15887 by @anatoli-tsinovoy)
Fixed
- Fixed error results from non-first-party providers regaining partial output the provider had discarded; an error with empty content now stays empty (#14516, #14572 by @oleg494)
- Fixed the auth gateway's
POST /v1/audio/speechanswering 502 for requests the speech adapter rejects (unsupported format, over-long input); they now get 400invalid_request_error(#14508 by @F0Rextasy) - Fixed a single-string tool call with two or more mislabelled string fields silently dispatching whichever field came first in the JSON; such ambiguous calls now fail validation and the model sees its own arguments back (#14414 by @F0Rextasy)
- Fixed GLM-5.2 on Ollama Cloud losing its reasoning between turns; Ollama Cloud now keeps assistant thinking in history for models verified to accept it (#14440 by @Dante-dan)
- Fixed GPT Image generation and edits failing on gateways that validate request parameters, such as LiteLLM;
response_formatis no longer sent to GPT Image models (#14619 by @jimhester) - Fixed OpenRouter errors such as "Access denied by security policy" dropping the routed upstream's own explanation from
error.metadata.raw(#10906, #14435 by @F0Rextasy) - Fixed GitHub Copilot usage reporting an AI-credit allowance as "Premium Requests" in request units; the unit each billing item reports is now honoured (#13849, #14501 by @F0Rextasy)
- Fixed an OpenAI-compatible server's
finish_reason: "repetition"orstop_reason: "repetition_detected"not being treated as a thinking loop, so the degenerate partial reasoning was kept and replayed into the next turn (#12525, #14535 by @F0Rextasy)
@oh-my-pi/pi-catalog
Added
- Added
keep-bundled-namescatalog attribute to preserve static model display names during discovery - Updated
openai-codexprovider configuration to prevent model name regressions during live discovery
Changed
- GPT Image models (
gpt-image-*,chatgpt-image-*) now classify as their owngpt-imagefamily instead ofgptorchatgpt, so GPT chat-model rules no longer apply to them (#14619 by @jimhester)
Fixed
- Fixed OpenCode Zen Gemini 4 Argon failing with an unsupported protocol; it now uses the native Gemini endpoint (#15977).
@oh-my-pi/pi-coding-agent
Added
- Added
lsp.requestTimeoutsetting to configure wait durations for language server diagnostics and requests - Added
omp auth-gateway serve --clients=<file>: per-client bearer tokens, each limited to listed models and broker OAuth accounts with no fallback to other accounts or API keys, re-read while serving (#5098, #15900 by @alphastorm)
Changed
- The
lsptool now useslsp.requestTimeoutto dynamically adjust both call deadlines and project-aware diagnostic wait times, with support for per-call overrides - Reduced CPU overhead during syntax checks and automatic edit repairs (#15904 by @iliaal).
- Reduced status-line refresh overhead while subagents have long conversations (#15874 by @iliaal).
- Agents now send
todoupdates alongside their next tool call instead of spending a separate model turn on them (#15402 by @will-bogusz) - The Shared Language Servers setting now says what it does: each connection gets its own server, and a released one is reused while another omp instance keeps the project's mux running (#14633 by @jorgoose)
- Memories saved explicitly through the extension
memory.saveAPI are now stored asstatedrather thanunknown, so they rank as deliberate memories in Mnemopi recall (#13824 by @sjawhar)
Fixed
- Fixed prewalk switching models during read-only MCP lookups through
write xd://when the server marks the tool read-only (#15994) - Fixed Ctrl+C printing
9;5uin the shell after force-quitting omp with a third Ctrl+C while it was still closing the session - Fixed Smart unexpected-stop recovery continuing finished answers, which added extra "nothing more to add" turns
- Fixed
grepsearching only the first 4 MB of a file named directly, so later matches were reported as absent; the whole file is now searched, and a multiline pattern, which still reads only the first 4 MB, says so in its no-match headline (#15942) - Fixed browser
uploadFilefailing with "Not allowed" through the relay or into a Chrome on another machine, stalling behind macOS folder-privacy prompts, and breaking the tab on large drop-zone files (#15489 by @will-bogusz) - Fixed browser
uploadFilesending a stale copy of a file rewritten without changing its size or timestamp, failing on folders that contain a symlink loop, and deleting copies a still-open attached page could read after a repeat upload - Fixed plan mode (including plan-yolo) looping on
write xd://proposeforever when an extension provides a tool namedwrite; the extension tool is left out of plan mode with a warning, since only the built-inwritecan submit plans (#14030, #14438 by @F0Rextasy) - Fixed legacy Mnemopi bank databases staying open after the recall bank probe, which could block deleting them on Windows (#14584 by @yshihao636)
- Fixed startup skipping a configured default fallback whose provider authenticates only through another provider's key (e.g.
xai-oauthviaXAI_API_KEY) and picking an unrelated model instead (#15781) - Fixed slower startup when the configured default model is unavailable and no fallback chain is configured (#15781)
- Fixed
readdirectory listings printing a directory's raw listing error, whose tabs, newlines, or control characters could break the transcript;[unreadable: …]is now a single bounded line (#15789) - Fixed a
^model mention sent while the agent is working (steer, follow-up, or queued skill prompt) never announcing its newm<N>alias to the model (#14093, #14322 by @holny) - Fixed large session files ending in a truncated record not being repaired on load, unlike small ones (#14582 by @yshihao636)
- Fixed a read-only subagent's rejected
writereading as a dead end: whenyieldis available, the rejection now names it as the way to return the content (#14308, #14470 by @F0Rextasy) - Fixed
/retryafter an interrupt leaving later advisor notes and extension asides unable to wake the agent until the next typed prompt (#14831 by @daandden) - Fixed session titles and idle recaps disappearing after a corrupt
history.dbwas quarantined and recreated, and a briefly busy store disabling the session index for the rest of the session (#13929, #14361 by @F0Rextasy) - Fixed pasting a screenshot with ⌘V into omp running over SSH from Tern or kitty failing with
Clipboard is emptyorImage not found(#15369 by @LoneExile) - Fixed native hook discovery silently ignoring hooks symlinked into
hooks/preorhooks/post(#14189, #14536 by @F0Rextasy) - Fixed headless Linux containers without a system D-Bus logging a
Failed to acquire power assertionwarning on every turn; the missing backend is now noted once at debug level (#14591 by @tahakotil) - Fixed a project's daemon broker staying unreachable after its runtime directory was deleted while it ran (
proc://,wait, shared LSP and the shared browser failed withconnect ENOENT …/broker.sock); the broker now releases the project within seconds of losing its socket and the next request starts a fresh one (#14466 by @nick-maderight) - Fixed SQL and Redis sessions stalling after a rewrite raced an append; later turns now republish after the backend recovers (#15612 by @sjawhar)
- Fixed OpenAI Codex web search failing with "No Codex OAuth credentials found" when only
OPENAI_CODEX_OAUTH_TOKENis set (#12537, #14337 by @F0Rextasy) - Fixed
yieldrejecting a validdataresult when a non-strict provider also fillederrorwith a placeholder such asunusedorn/a; a real error alongsidedatais still rejected, now with exact resend instructions (#15633 by @Komzpa) - Fixed secret redaction replaying Gemini tool calls with their original
thoughtSignatureafter rewriting the call arguments; a rewritten call now drops the signature, as rewritten thinking already did (#14392 by @F0Rextasy) - Fixed Claude marketplace plugin MCP servers declaring a sub-second
timeout(e.g. SAP's"timeout": 600) never loading; values below Claude Code's 1000 ms minimum are now ignored with a warning so the default timeout applies (#12485, #14574 by @oleg494) - Fixed automatic retries looping without end when the primary model's cooldown expired mid-retry: the session no longer switches back to the primary while a retry is still in flight, and returns to it on the next prompt (#14611 by @MiloMMIN)
- Fixed web search providers garbling non-UTF-8 responses; they now decode with the charset declared in
Content-Type(or a<meta charset>tag), the same way fetched pages are (#15304 by @yuzu-octopus) - Fixed
openai-models-listdiscovery ignoring a flatmax_tokensoutput limit on/v1/modelsrows, which pinned such models to the 32K default (#13062, #14403 by @F0Rextasy) - Fixed long replies dropping lines from scrollback or replaying them duplicated and out of order when status widgets stay taller after a turn or transient HUDs close (#15820 by @emmahyde)
- Fixed a stale "Working…" row staying under a focused subagent after it finished while the main session kept running (#15820)
- Fixed
omp updatefailing when a bunfigminimumReleaseAgeor npmrcmin-release-agesupply-chain cooldown rejects the just-published release; self-update now overrides the cooldown for the pinned version it installs (#14581 by @morri-son) - Fixed
agent://<id>returning a message-result subagent's first result after it completed a parent-requested follow-up; reads now return its latest completed result (#15707 by @mg-mg-mg) - Fixed sloppy edits silently dropping an operator when one
*** Findwas followed by two (e.g.*** Insert Beforeand*** Replace); the payload is now rejected with an error naming both and nothing is applied (#14357 by @F0Rextasy) - Fixed a cancelled Python tool install (e.g.
uv tool install) falling through topipwith the aborted signal and leaving the install progress running (#15750 by @harshaygadekar) - Fixed auto-learn captures rewriting earlier OpenAI Responses history after a learning tool call, which broke prompt-cache reuse (#14099 by @nanbloom001)
- Fixed
/shake imagesleaving the context percentage unchanged; the tokens freed by the removed images are now reported and subtracted from the context meter right away (#5029, #14367 by @F0Rextasy) - Fixed
/fork pane|taband Herdrctx.ui.openTerminal()launches failing in panes whose shell is not POSIX (such as Nushell); Herdr launches now type only the path of a self-deleting/bin/shscript and no longer ask for POSIX-shell confirmation (#15262 by @shgew) - Fixed Eval
read("artifact://N")returning an "Unbounded raw read blocked" notice instead of the text for artifacts over 50 KB that belong to another session, or when the session has no artifacts directory, in JavaScript and Python cells (#15410 by @will-bogusz) - Fixed cancelling a bash job hard-killing it before its TERM cleanup handlers could run; it now gets up to one second to clean up before termination is forced (#15709 by @mg-mg-mg)
- Fixed the transcript collapsing to one line per entry after switching between a subagent and the main session mid-turn when an earlier turn left a tool call without a result (#12247, #15466 by @shgew)
- Fixed a retried tool losing its transcript card when the view was rebuilt (subagent focus switch, overlay close) while the tool was still running
- Fixed Chrome element handles'
uploadFile()failing "Node is not a file input element" on labels, chooser triggers and drop zones; it now uploads liketab.uploadFile()(#15918 by @will-bogusz) - Browser
tab.fillin Chrome sets colour, date, time and range inputs to the given value (it typed2026-10-12as61012-02-02and left a colour at#000000), and refuses a value the input rejects (#15914 by @will-bogusz) - Fixed browser
uploadFileon a control that opensshowOpenFilePicker()hanging the cell until the tab was killed; it now fails at once with a named error (#15915 by @will-bogusz) - Fixed every later file chooser on a page doing nothing, the user's own clicks in a relay tab included, after browser
uploadFileclicked a chooser trigger or drop zone (#15915 by @will-bogusz) - Fixed browser
uploadFilein Chrome reporting success with no file attached when the element opens no file chooser and nothing on the page reads the dropped files; it now fails and says what to target (#15919 by @will-bogusz) - Relay mode: when Chrome detaches omp from a tab it drives (a password manager's inline menu loading in the page), the call fails at once saying why and omp reattaches to the same tab, instead of every later call timing out and reopening failing with
No page targets available(#15920 by @will-bogusz) - Fixed the macOS
computertool letting the display sleep and lock in a turn that went 5 minutes without a desktop action; it now keeps the display awake until the turn ends or asks for your answer, then lets it sleep (#15762 by @will-bogusz)
@oh-my-pi/pi-mnemopi
Fixed
- Fixed
MNEMOPI_<LABEL>_WEIGHTandMNEMOPI_TIER<N>_WEIGHThaving no effect on recall ranking (#13824 by @sjawhar)
@oh-my-pi/pi-natives
Added
- Added
parseCodeStatusto check code syntax and its resolved language without generating a summary (#15904 by @iliaal). - Added
DesktopSession.holdDisplayUntilReleased()andreleaseDisplayAwake()to keep the display awake until the caller releases it, rather than for 5 minutes after the last request (#15762 by @will-bogusz)
Changed
- Reduced idle memory on GNU/Linux: once native work has been quiet for 5 seconds, freed native heap pages are returned to the OS without evicting caches (#15905 by @iliaal)
- Reduced memory held by cached code-structure parses: the cache now caps estimated syntax-tree memory instead of source size, keeps only a file's current and previous parse, and reparses edited files incrementally (#15886 by @H4vC)
- Changed
warmBlockParseto skip files over 2 MiB (was 4 MiB), the size above which a typical parse no longer fits the cache (#15886 by @H4vC)
Fixed
- Fixed
listWorkspace({ reportDirectoryErrors: true, maxDepth: 0 })returning an empty result for an unreadable root instead of failing the scan (#15789) - Minimized cargo output now keeps one "Blocking waiting for file lock on …" line, so a build stuck behind another cargo process says why (#14631 by @jorgoose)
- Fixed
grepignoringmaxCountPerFilewhen the path is a single file, and single-file count mode stopping at themaxCountcontent cap (#14162, #14327 by @F0Rextasy)
@oh-my-pi/pi-tui
Changed
- Improved nested tool status line rendering: moved preview content into a dedicated collapsible code block when expanded and limited field widths on the one-line summary
- Suppressed typo highlighting for the word currently being typed to avoid distracting inline markers while composing
Fixed
- Fixed double-clicking an extension switched off in
/extensionsin Tern not switching it back on - Fixed the queued-messages badge in Tern showing a bare count that read as the first message's number; it now reads
N queued - Fixed table charts on TSP terminals to use SVG fences and respect terminal palette
- Fixed table charts in Tern's native view drawing in the other appearance's colors (light labels on a light page) when omp's light/dark detection disagreed with Tern; Tern now colors them in the theme it shows, like the prose around them
- Fixed the /btw history answer being stuck at the bottom while a follow-up is being written: Up/Down and Page Up/Down now scroll the answer without leaving the draft (#15902 by @H4vC)
- Fixed macOS editor spelling assistance hanging silently when the spelling service stops responding; it now reports and disables itself instead (#12084, #14341 by @F0Rextasy)
- Fixed a chip toggled in a multi-select setting's open submenu leaving its row and its tab's changed badge showing the old selection until the submenu was closed (#14444 by @F0Rextasy)
- Fixed
@file autocomplete freezing when the project contains a symlink into a very large directory tree; the fuzzy walk now stops after 1.5 s and the popup falls back to the immediate-directory listing (#12317, #14330 by @F0Rextasy) - Fixed omp in a Tern pane showing the classic CLI when a shell rc, dev shell or
.envsetTERMto ascreen*/tmux*value with no multiplexer running; only a real tmux/screen/zellij/herdr/cmux/wmux session now keeps Tern's native view off - omp inside devenv 2.x's reloading
devenv shellnow starts on the classic renderer instead of opening Tern's native view and abandoning it: devenv's terminal layer drops Tern's protocol, so the native view needsdevenv shell --no-reload. The debug log now records why a Tern pane stays on the classic renderer - Fixed large terminal paints on Windows being split mid-row, which let other output land inside a row; writes are now cut at row boundaries (#14187 by @mateusant13)
- Fixed
TUI.addStartListener()hooks added afterstart()never running until the next stop/start cycle; a hook added to a running TUI now runs at once (#15369 by @LoneExile) - Fixed the git viewer advertising stage, discard, select and commit keys while showing a clean tree's HEAD commit, where none of them do anything; the footer and sidebar now describe the commit view (#14347, #14480 by @F0Rextasy)
- Fixed the status line
prsegment keeping the previous branch's PR after switching to the default branch, a detached HEAD, or a branch without a PR (#15455 by @ravshansbox) - Fixed the status-line footer total leaving out task subagent spend; it now reads the session's cumulative usage, the same source the interactive status line uses (#14393 by @F0Rextasy)
- Fixed transcript rows disappearing from scrollback or reappearing out of order when bottom chrome stays taller after a turn, self-clearing HUDs close, or the composer shape changes (#15820 by @emmahyde)
@oh-my-pi/pi-utils
Added
- Exported
sqliteFileIdentity(), so a caller holding a long-lived SQLite connection can tell when its path now names a different file (e.g. after a corrupt store was quarantined and replaced) (#14361 by @F0Rextasy) - Added
slugify(), the shared lowercase ASCII kebab-case helper with an optionalmaxLength(#14283 by @jaredlyon)
Fixed
- Fixed an unhandled rejection when a subprocess is spawned with an already-aborted signal (#15750 by @harshaygadekar)
What's Changed
- perf(tui): use maintained totals for subagent cost updates by @iliaal in #15874
- perf(natives): budget parse cache by tree memory and reparse edits incrementally by @H4vC in #15886
- feat(coding-agent): send todo updates alongside the next tool call by @will-bogusz in #15402
- docs(coding-agent): describe lsp.shared as per-connection servers with warm reuse by @jorgoose in #14633
- tui: bound the @ fuzzy walk so a symlinked tree cannot freeze the popup by @F0Rextasy in #14330
- fix(tui): multiselect chips toggle in place but the row keeps the old value by @F0Rextasy in #14444
- Deactivate a shadowing extension write on plan-mode entry by @F0Rextasy in #14438
- fix(ai): keep provider-discarded content empty on terminal error events by @oleg494 in #14572
- fix(coding-agent): finalize mnemopi sqlite statements by @yshihao636 in #14584
- fix(ai): classify xAI speech input errors as 400 rather than 502 by @F0Rextasy in #14508
- Single-string tool args resolve by JSON key order by @F0Rextasy in #14414
- tui: bound macOS spelling calls so a stuck one disables the feature by @F0Rextasy in #14341
- fix(coding-agent): deliver the session-agent notice for steered and follow-up mentions by @holny in #14322
- fix(tui): cut ConPTY diff paints at row boundaries, not mid-row by @mateusant13 in #14187
- fix(coding-agent): count a truncated trailing JSONL record at end of input by @yshihao636 in #14582
- fix(coding-agent): name the yield fallback in the device-only write rejection by @F0Rextasy in #14470
- fix(coding-agent): lift interrupt auto-resume suppression on manual retry by @daandden in #14831
- fix(ai): replay demoted DeepSeek thinking as reasoning_content by @yugasun in #15028
- Session titles vanish after history.db is quarantined and recreated by @F0Rextasy in #14361
- fix(tui,coding-agent): enable kitty enhanced paste when the prepaint composer starts the TUI first by @LoneExile in #15369
- fix(discovery): discover symlinked hooks in the native hooks dirs by @F0Rextasy in #14536
- fix(coding-agent): log missing power assertion backend once at debug instead of warning every turn by @tahakotil in #14591
- fix(pi-shell): keep cargo's file-lock wait line in minimized output by @jorgoose in #14631
- fix(coding-agent): release the broker scope when its socket is deleted by @nick-maderight in #14466
- fix(session): keep SQL and Redis sessions saving after a rewrite race by @sjawhar in #15612
- coding-agent: let Codex web search use an env OAuth bearer by @F0Rextasy in #14337
- fix(coding-agent): keep yielded data with placeholder errors by @Komzpa in #15633
- fix(ai): preserve GLM-5.2 thinking on Ollama Cloud by @Dante-dan in #14440
- fix(ai): omit response_format for GPT Image requests by @jimhester in #14619
- Clear the Gemini thought signature when redaction rewrites tool call args by @F0Rextasy in #14392
- OpenRouter errors drop the upstream detail in error.metadata.raw by @F0Rextasy in #14435
- fix(tui): stop advertising stage and discard keys in the git commit view by @F0Rextasy in #14480
- fix(coding-agent): ignore sub-1000ms MCP timeouts from Claude plugin manifests by @oleg494 in #14574
- natives: honour maxCountPerFile for a single explicit file by @F0Rextasy in #14327
- fix(session): prevent infinite retry loop via cooldown-expiry primary revert by @MiloMMIN in #14611
- refactor(search): one capped reader for scrapers and search providers by @yuzu-octopus in #15304
- openai-models-list discovery: honor a top-level max_tokens output limit by @F0Rextasy in #14403
- refactor(ai): share normalizeToolCallId across tool-call id normalizers by @jaredlyon in #14374
- fix(coding-agent): bypass ambient release-age gates during self-update by @morri-son in #14581
- fix(coding-agent): publish latest message-result follow-up by @mg-mg-mg in #15707
- fix(mnemopi): score recall with the configured veracity and tier weights by @sjawhar in #13824
- fix(ai): honour the reported billing unit for GitHub Copilot usage by @F0Rextasy in #14501
- Reject sloppy payloads with two operators on one *** Find by @F0Rextasy in #14357
- fix(utils,coding-agent): prevent unhandled rejection on aborted process and skip pip fallthrough on cancelled install by @harshaygadekar in #15750
- fix(coding-agent): preserve auto-learn capture history prefixes by @nanbloom001 in #14099
- fix(ai): classify a server-declared repetition stop as a thinking loop by @F0Rextasy in #14535
- shake images: report freed tokens and correct the context anchor by @F0Rextasy in #14367
- fix(coding-agent): launch Herdr commands through a shell-neutral script path by @shgew in #15262
- fix(tui): dropped stale PR from status line after branch switch by @ravshansbox in #15455
- refactor(utils): shared slugify for existing slug helpers by @jaredlyon in #14283
- fix(coding-agent): return large artifacts' text from Eval read() outside the session's artifacts dir by @will-bogusz in #15410
- fix(tui): total task subagent spend in the footer by @F0Rextasy in #14393
- fix(shell): allow TERM cleanup before hard-killing cancelled jobs by @mg-mg-mg in #15709
- fix(coding-agent): keep only in-flight tool calls in mid-turn transcript rebuilds by @shgew in #15466
- fix(tui): further btw UX/UI enhancements by @H4vC in #15902
- fix(tui): keep transcript rows visible when bottom chrome stays taller after a turn by @emmahyde in #15820
- perf(edit): check parse status without building summaries by @iliaal in #15904
- fix(coding-agent): send file contents when uploading into relay and connected browsers by @will-bogusz in #15489
- feat(ai,coding-agent): scope auth-gateway client tokens to models and accounts by @alphastorm in #15900
- perf(natives): trim freed heap pages once native work goes quiet by @iliaal in #15905
- feat(judgment): support Jev images on TypeSafe and OpenRouter by @anatoli-tsinovoy in #15887
- fix(natives,coding-agent): keep the macOS display awake for the agent's turn, not 5 minutes past its last action by @will-bogusz in #15762
- fix(browser): fill colour, date, time and range inputs with their value instead of typing into them by @will-bogusz in #15914
- fix(coding-agent): stop browser uploadFile swallowing later file choosers and hanging on File System Access pickers by @will-bogusz in #15915
- fix(coding-agent): let browser element handles upload through chooser triggers and drop zones by @will-bogusz in #15918
- fix(coding-agent): fail browser uploadFile when nothing on the page takes the file by @will-bogusz in #15919
- fix(browser): fail fast and reattach when Chrome detaches omp from a relay tab by @will-bogusz in #15920
- fix(coding-agent): keep the machine awake again under power.sleepPrevention by @will-bogusz in #15941
- fix(grep): searched all of an explicitly named large file by @roboomp in #15943
- fix(catalog): routed zen argon through native gemini by @roboomp in #15978
- fix(coding-agent): made browser upload and launch tests portable by @roboomp in #15984
- fix(agent): preserve cancelled ask results after job completions by @roboomp in #15992
- fix(prewalk): honor MCP read-only hints during handoff by @roboomp in #15995
New Contributors
- @yshihao636 made their first contribution in #14584
- @yugasun made their first contribution in #15028
- @LoneExile made their first contribution in #15369
- @MiloMMIN made their first contribution in #14611
- @morri-son made their first contribution in #14581
- @nanbloom001 made their first contribution in #14099
- @shgew made their first contribution in #15262
- @emmahyde made their first contribution in #15820
Full Changelog: v18.11.1...v18.11.2