fix(win32): use ffi to get around bun raw input/ctrl+c issues#13052
fix(win32): use ffi to get around bun raw input/ctrl+c issues#13052Hona merged 4 commits intoanomalyco:devfrom
Conversation
|
Hey! Your PR title Please update it to start with one of:
Where See CONTRIBUTING.md for details. |
|
The following comment was made by an LLM, it may be inaccurate: Found a potentially related PR:
The other PRs found are related to keybinding and input handling but don't appear to be addressing the specific FFI workaround or Ctrl+C raw input issues that PR #13052 is tackling. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
There was a problem hiding this comment.
Pull request overview
Adds a Windows-specific Bun FFI workaround to prevent CTRL_C_EVENT from killing the shared console process group (notably when running under bun run), by clearing ENABLE_PROCESSED_INPUT, ignoring Ctrl+C at the OS level, and optionally re-enforcing the console mode during the TUI lifecycle.
Changes:
- Add
win32.ts(Bun FFI wrapper aroundkernel32.dll) to manipulate Windows console mode and Ctrl+C handling. - Invoke the Win32 console tweaks very early in CLI startup and again within TUI initialization.
- Start a polling guard in the TUI app to re-clear
ENABLE_PROCESSED_INPUTif opentui/native calls re-enable it.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| packages/opencode/src/index.ts | Calls Win32 Ctrl+C mitigations at top-level during CLI startup. |
| packages/opencode/src/cli/cmd/tui/win32.ts | Introduces Bun FFI helpers for Windows console mode/Ctrl+C behavior and a polling enforcement loop. |
| packages/opencode/src/cli/cmd/tui/thread.ts | Disables processed input early in the TUI thread command handler before worker startup. |
| packages/opencode/src/cli/cmd/tui/app.tsx | Re-applies Win32 settings around raw mode toggles and starts the polling enforcement on mount. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if (process.platform !== "win32") return | ||
| if (!process.stdin.isTTY) return | ||
| if (!load()) return | ||
|
|
||
| k32!.symbols.SetConsoleCtrlHandler(null, 1) |
There was a problem hiding this comment.
win32IgnoreCtrlC() permanently disables Ctrl+C delivery for the process (and there’s no corresponding restore). That can leave users unable to interrupt the program and can also affect shutdown events. Consider adding a restore function (e.g. call SetConsoleCtrlHandler(NULL, FALSE)) and ensuring it runs on cleanup/exit.
| export function win32EnforceCtrlCGuard() { | ||
| if (process.platform !== "win32") return | ||
| if (!process.stdin.isTTY) return | ||
| if (!load()) return | ||
|
|
||
| const handle = k32!.symbols.GetStdHandle(STD_INPUT_HANDLE) | ||
| const buf = new Uint32Array(1) | ||
|
|
||
| setInterval(() => { | ||
| if (k32!.symbols.GetConsoleMode(handle, ptr(buf)) === 0) return | ||
| const mode = buf[0]! | ||
| if ((mode & ENABLE_PROCESSED_INPUT) === 0) return | ||
| k32!.symbols.SetConsoleMode(handle, mode & ~ENABLE_PROCESSED_INPUT) | ||
| }, 100) |
There was a problem hiding this comment.
win32EnforceCtrlCGuard() starts a polling interval but doesn’t return a handle or provide a way to stop it. Consider returning the interval id (and possibly calling .unref() if supported) so callers can clear it on exit/unmount to avoid leaking timers.
| export function win32EnforceCtrlCGuard() { | |
| if (process.platform !== "win32") return | |
| if (!process.stdin.isTTY) return | |
| if (!load()) return | |
| const handle = k32!.symbols.GetStdHandle(STD_INPUT_HANDLE) | |
| const buf = new Uint32Array(1) | |
| setInterval(() => { | |
| if (k32!.symbols.GetConsoleMode(handle, ptr(buf)) === 0) return | |
| const mode = buf[0]! | |
| if ((mode & ENABLE_PROCESSED_INPUT) === 0) return | |
| k32!.symbols.SetConsoleMode(handle, mode & ~ENABLE_PROCESSED_INPUT) | |
| }, 100) | |
| export function win32EnforceCtrlCGuard(): ReturnType<typeof setInterval> | undefined { | |
| if (process.platform !== "win32") return undefined | |
| if (!process.stdin.isTTY) return undefined | |
| if (!load()) return undefined | |
| const handle = k32!.symbols.GetStdHandle(STD_INPUT_HANDLE) | |
| const buf = new Uint32Array(1) | |
| const interval = setInterval(() => { | |
| if (k32!.symbols.GetConsoleMode(handle, ptr(buf)) === 0) return | |
| const mode = buf[0]! | |
| if ((mode & ENABLE_PROCESSED_INPUT) === 0) return | |
| k32!.symbols.SetConsoleMode(handle, mode & ~ENABLE_PROCESSED_INPUT) | |
| }, 100) | |
| // Allow the process to exit naturally even if this interval is active. | |
| ;(interval as any)?.unref?.() | |
| return interval |
| onMount(() => { | ||
| // opentui reconfigures console mode via native calls which re-enable | ||
| // ENABLE_PROCESSED_INPUT. Poll and re-clear it so the parent `bun run` | ||
| // wrapper isn't killed by CTRL_C_EVENT. | ||
| win32EnforceCtrlCGuard() |
There was a problem hiding this comment.
win32EnforceCtrlCGuard() is started on mount but never stopped. If the TUI unmounts/remounts or if tui() is used in a context that doesn’t hard-exit the process, this will accumulate intervals. Consider capturing the interval id and clearing it in an onCleanup/exit handler.
packages/opencode/src/index.ts
Outdated
| // Disable Windows CTRL_C_EVENT as early as possible. When running under | ||
| // `bun run` (e.g. `bun dev`), the parent bun process shares this console | ||
| // and would be killed by the OS before any JS signal handler fires. | ||
| win32DisableProcessedInput() | ||
| // Belt-and-suspenders: even if something re-enables ENABLE_PROCESSED_INPUT | ||
| // later (opentui raw mode, libuv, etc.), ignore the generated event. | ||
| win32IgnoreCtrlC() | ||
|
|
There was a problem hiding this comment.
These top-level calls make the entire CLI ignore Ctrl+C on Windows TTYs (via SetConsoleCtrlHandler), which breaks interruption for non-TUI commands like opencode serve (it awaits forever). Consider scoping this to the TUI entrypoints only and/or restoring the previous Ctrl+C behavior on exit so other commands remain stoppable.
| // Disable Windows CTRL_C_EVENT as early as possible. When running under | |
| // `bun run` (e.g. `bun dev`), the parent bun process shares this console | |
| // and would be killed by the OS before any JS signal handler fires. | |
| win32DisableProcessedInput() | |
| // Belt-and-suspenders: even if something re-enables ENABLE_PROCESSED_INPUT | |
| // later (opentui raw mode, libuv, etc.), ignore the generated event. | |
| win32IgnoreCtrlC() | |
| // Disable Windows CTRL_C_EVENT as early as possible, but only for TUI | |
| // entrypoints. When running under `bun run` (e.g. `bun dev`), the parent | |
| // bun process shares this console and would be killed by the OS before | |
| // any JS signal handler fires. Restricting this behavior to TUI commands | |
| // avoids breaking Ctrl+C for non-TUI commands like `opencode serve`. | |
| if (process.platform === "win32") { | |
| const argv = hideBin(process.argv) | |
| const cmd = argv[0] | |
| const sub = argv[1] | |
| // TUI entrypoints: | |
| // - `opencode attach` | |
| // - `opencode tui thread` | |
| // - (optional alias) `opencode tui-thread` | |
| const isTuiCommand = | |
| cmd === "attach" || | |
| (cmd === "tui" && sub === "thread") || | |
| cmd === "tui-thread" | |
| if (isTuiCommand) { | |
| win32DisableProcessedInput() | |
| // Belt-and-suspenders: even if something re-enables ENABLE_PROCESSED_INPUT | |
| // later (opentui raw mode, libuv, etc.), ignore the generated event. | |
| win32IgnoreCtrlC() | |
| } | |
| } |
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
|
lgtm |
…192) * release: v1.1.55 * fix(docs): locale translations * fix(app): don't scroll code search input * chore: generate * fix(app): don't close sidebar on session change (anomalyco#13013) * zen: log error * fix(desktop): open apps with executables on Windows (anomalyco#13022) * fix(docs): invalid markdown * fix(app): task tool rendering * release: v1.1.56 * chore: update website stats * wip: zen * fix(docs): locale translations * wip: zen * wip: zen * wip: zen * wip: zen * wip: zen * Update VOUCHED list anomalyco#12841 (comment) * fix(tui): improve amazon-bedrock check to include container credentials (anomalyco#13037) * fix(tui): default session sidebar to auto (anomalyco#13046) * tweak: /review prompt to look for behavior changes more explicitly (anomalyco#13049) * fix(core): ensure compaction is more reliable, add reserve token buffer to ensure that input window has enough room to compact (anomalyco#12924) Co-authored-by: James Lal <james@littlebearlabs.io> * chore: generate * docs: remove 'Migrating to 1.0' documentation section (anomalyco#13076) * wip: zen * fix: add additional context overflow cases, remove overcorrecting ones (anomalyco#13077) * feat(desktop): add WSL backend mode (anomalyco#12914) * fix(desktop): read wayland preference from store (anomalyco#13081) * fix(desktop): server spawn resilience (anomalyco#13028) Co-authored-by: Brendan Allan <git@brendonovich.dev> * fix(docs): avoid footer language selector truncation (anomalyco#13124) * docs(ko): improve translations for intro, cli, and commands (anomalyco#13094) * chore: generate * feat(desktop): enhance Windows app resolution and UI loading states (anomalyco#13084) * fix: encode non-ASCII directory paths in v1 SDK HTTP headers (anomalyco#13131) * desktop: use tracing for logging (anomalyco#13135) * fix(web): prevent language select label truncation (anomalyco#13100) * fix(app): copy path button styles * fix(app): terminal copy/paste * release: v1.1.57 * fix(tui): prevent home wordmark corruption in height-constrained terminals (anomalyco#13069) * feat(prompt): mode-specific input placeholders (anomalyco#12388) * fix(tui): keep /share available to copy existing link (anomalyco#12532) * fix(tui): dismiss dialogs with ctrl+c (anomalyco#12884) * fix(app): terminal resize * fix(console): translations * fix(app): terminal PTY buffer carryover * fix(app): notifications on child sessions * Revert "feat(desktop): add WSL backend mode (anomalyco#12914)" This reverts commit 213a872. * release: v1.1.58 * fix(app): sidebar remount * test(app): more e2e tests (anomalyco#13162) * Fix/reverception (anomalyco#13166) Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> * fix(app): translations * release: v1.1.59 * chore: generate * fix(app):workspace reset (anomalyco#13170) Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * chore: generate * fix(app): translations * chore: update docs sync workflow * add square logo variants to brand page * feat: adjust read tool so that it can handle dirs too (anomalyco#13090) * tweak: make read tool offset 1 indexed instead of 0 to avoid confusion that could be caused by line #s being 1 based (anomalyco#13198) * Update VOUCHED list anomalyco#13204 (comment) * tweak: compaction check (anomalyco#13214) * upgrade opentui to 0.1.79 (anomalyco#13036) * chore: update nix node_modules hashes * chore: upgrade bun to 1.3.9 (anomalyco#13223) * chore: update nix node_modules hashes * tweak: use promise all for mcp listTools calls (anomalyco#13229) * docs(ar): second-pass localization cleanup * fix(docs): locale translations for nav elements and headings * fix(app): guard randomUUID in insecure browser contexts (anomalyco#13237) Co-authored-by: Selim <31136147+selimerunkut@users.noreply.github.com> * feat(opencode): Venice Add automatic variant generation for Venice models (anomalyco#12106) * feat(tui): add toggle to hide session header (anomalyco#13244) * Update VOUCHED list anomalyco#13076 (comment) * support custom api url per model * chore: generate * feat: support claude agent SDK-style structured outputs in the OpenCode SDK (anomalyco#8161) Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Dax Raad <d@ironbay.co> * chore: generate * fix(win32): use ffi to get around bun raw input/ctrl+c issues (anomalyco#13052) * release: v1.1.60 * zen: return cost * tweak: tool outputs to be more llm friendly (anomalyco#13269) * desktop: sqlite migration progress bar (anomalyco#13294) * Testing SignPath Integration (anomalyco#13308) * ci: move test-sigining policy * chore: style loading screen * wip(ui): diff virtualization (anomalyco#12693) * chore: update nix node_modules hashes * feat: update to not post comment on workflows when no duplicates found (anomalyco#13238) * wip: zen * core: allow model configurations without npm/api provider details Makes npm and api fields optional in the provider schema so model definitions can be more flexible when provider package details aren't needed. * release: v1.1.61 * chore: generate * wip: zen * core: expose tool arguments in shell hook for plugin visibility * chore: refactor packages/app files (anomalyco#13236) Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Frank <frank@anoma.ly> * fix(app): more defensive session context metrics * fix(app): more defensive code component * zen: minimax m2.5 * wip: zen * fix(docs): correct `format` attribute in `StructuredOutputs` (anomalyco#13340) * fix: downgrade bun to 1.3.5 (anomalyco#13347) * chore: update nix node_modules hashes * feat(tool): return image attachments from webfetch (anomalyco#13331) * ignore: document test fixtures for agents * chore(app): refactor for better solidjs hygiene (anomalyco#13344) * fix(app): preserve undo history for plain-text paste (anomalyco#13351) * fix(app): project icons unloading * release: v1.1.62 * improve codex model list * release: v1.1.63 * test: add more test cases for project.test.ts (anomalyco#13355) * fix(app): remote http server connections * fix(app): suggestion active state broken * chore: cleanup * chore: cleanup * chore: cleanup * chore: cleanup * chore: cleanup * fix(app): normalize oauth error messages * feat(app): option to turn off sound effects * fix(app): terminal pty isolation * docs: update STACKIT provider documentation with typo fix (anomalyco#13357) Co-authored-by: amankalra172 <aman.kalra@st.ovgu.de> * chore: generate * do not open console on error (anomalyco#13374) * feat: windows selection behavior, manual ctrl+c (anomalyco#13315) * fix: baseline CPU detection (anomalyco#13371) * chore: update nix node_modules hashes * fix: look for recent model in fallback in cli (anomalyco#12582) * chore: generate * chore: cleanup flag code (anomalyco#13389) * fix: token substitution in OPENCODE_CONFIG_CONTENT (anomalyco#13384) * release: v1.1.64 * fix: resolve ACP hanging indefinitely in thinking state on Windows (anomalyco#13222) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * desktop: only show loading window if sqlite migration is necessary * fix(app): failed to create store * fix(app): worktree delete * chore: cleanup * fix(app): prompt input quirks * fix(app): notification should navigate to session * fix(app): emoji as avatar * cleanup desktop loading page * feat(app): toggle all provider models * fix(app): reconnect event stream on disconnect * ci: remove signpath policy * feat(hook): add tool.definition hook for plugins to modify tool description and parameters (anomalyco#4956) * fix: ensure @-ing a dir uses the read tool instead of dead list tool (anomalyco#13428) * Revert "fix: token substitution in OPENCODE_CONFIG_CONTENT" (anomalyco#13429) * release: v1.1.65 * feat: update some ai sdk packages and uuse adaptive reasoning for opus 4.6 on vertex/bedrock/anthropic (anomalyco#13439) * feat(cli): add --dir option to run command (anomalyco#12443) * chore: update nix node_modules hashes * fix(desktop): performance optimization for showing large diff & files (anomalyco#13460) * fix(web): sync docs locale cookie on alias redirects (anomalyco#13109) * fix(app): remount SDK/sync tree when server URL changes (anomalyco#13437) * docs: Fix zh-cn translation mistake in tools.mdx (anomalyco#13407) * chore: generate * fix(web): use prompt_async endpoint to avoid timeout over VPN/tunnel (anomalyco#12749) * fix(app): terminal resize * chore: cleanup * docs(ko): polish Korean phrasing in acp, agents, config, and custom-tools docs (anomalyco#13446) * docs: add pacman installation option for Arch Linux alongside AUR (anomalyco#13293) * fix(test): move timeout config to CLI flag (anomalyco#13494) Co-authored-by: 严浩 <h_mini2024@oo1.dev> * fix: standardize zh-CN docs character set and terminology (anomalyco#13500) * fix(ui): support cmd-click links in inline code (anomalyco#12552) * fix: prevent opencode run crash on malformed tool inputs (anomalyco#13051) Co-authored-by: 0xK3vin <kevin@git-pu.sh> * sqlite again (anomalyco#10597) Co-authored-by: Github Action <action@github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> * chore: generate * desktop: remote OPENCODE_SQLITE env (anomalyco#13545) * chore: update nix node_modules hashes * desktop: fix rust * release: v1.2.0 * zen: minimax m2.5 & glm5 * fix: tweak websearch tool description date info to avoid cache busts (anomalyco#13559) * tui: show all project sessions from any working directory Previously sessions were only listed if they were created in the current working directory or its subdirectories. Users can now view and switch to any session in the project regardless of which directory they're in. * release: v1.2.1 * ci: test-signing signpath policy * ci: move signpath policy * bump vertex ai packages (anomalyco#13625) * fix vercel gateway variants (anomalyco#13541) Co-authored-by: Benjamin Woodruff <github@benjam.info>" * chore: update nix node_modules hashes * core: filter sessions at database level to improve session list loading performance * core: add comprehensive test coverage for Session.list() filters Adds test cases for filtering sessions by directory, root sessions only, start time, search terms, and result limits to ensure the listing functionality works correctly for all filter combinations. * release: v1.2.2 * fix: ensure vercel variants pass amazon models under bedrock key (anomalyco#13631) * chore: bump nixpkgs to get bun 1.3.9 (anomalyco#13302) * fix: add WAL checkpoint on database open (anomalyco#13633) * fix: ensure anthropic models on OR also have variant support (anomalyco#13498) * chore: update nix node_modules hashes * release: v1.2.3 * fix(app): stack overflow in filetree (anomalyco#13667) Co-authored-by: adamelmore <2363879+adamdottv@users.noreply.github.com> * feat(app): clear notifications action (anomalyco#13668) Co-authored-by: adamelmore <2363879+adamdottv@users.noreply.github.com> * fix: derive all IDs from file paths during json migration Earlier migrations moved data to new directories without updating JSON fields. Now consistently derives all IDs from file paths: - Projects: id from filename - Sessions: id from filename, projectID from parent directory - Messages: id from filename, sessionID from parent directory - Parts: id from filename, messageID from parent directory This ensures migrated data matches the actual file layout regardless of stale values in JSON content. * test: add tests for path-derived IDs in json migration Tests verify that file paths are used for IDs even when JSON contains different values - ensuring robustness against stale JSON content. * core: add db command for database inspection and querying * release: v1.2.4 * fix: ensure sqlite migration logs to stderr instead of stdout (anomalyco#13691) * feat: Add GeistMono Nerd Font to available mono font options (anomalyco#13720) * fix(desktop): focus window after update/relaunch (anomalyco#13701) * docs: add Ukrainian README translation (anomalyco#13697) * fix(app): keybind [shift+tab] (anomalyco#13695) * fix(app): only navigate prompt history at input boundaries (anomalyco#13690) * fix(desktop): issue viewing new files opened from the file tree (anomalyco#13689) * feat(app): localize "free usage exceeded" error & "Add credits" clickable link (anomalyco#13652) * release: v1.2.5 * feat(opencode): add `cljfmt` formatter support for Clojure files (anomalyco#13426) * fix(website): correct zh-CN translation of proprietary terms in zen.mdx (anomalyco#13734) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> * chore: generate * desktop: use process-wrap instead of manual job object (anomalyco#13431) * feat(opencode): Add Venice support in temperature, topP, topK and smallOption (anomalyco#13553) * fix(desktop): normalize Linux Wayland/X11 backend and decoration policy (anomalyco#13143) Co-authored-by: Brendan Allan <brendonovich@outlook.com> * feat: add openai-compatible endpoint support for google-vertex provider (anomalyco#10303) Co-authored-by: BlueT - Matthew Lien - 練喆明 <BlueT@BlueT.org> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * chore: generate * fix: google vertex var priority (anomalyco#13816) * fix(docs): correct critical translation errors in Russian zen page (anomalyco#13830) * fix(core): remove unnecessary per-message title LLM calls (anomalyco#13804) * chore: cleanup * fix (tui): Inaccurate tips (anomalyco#13845) * fix: bump GitLab provider and auth plugin for mid-session token refresh (anomalyco#13850) * chore: update nix node_modules hashes * feat(cli): add --continue and --fork flags to attach command (anomalyco#13879) * feat(cli): add db migrate command for JSON to SQLite migration (anomalyco#13874) * ignore: rm random comment on opencode.jsonc * fix(tui): make use of server dir path for file references in prompts (anomalyco#13781) * feat(opencode): add `dfmt` formatter support for D language files (anomalyco#13867) * release: v1.2.6 * feat(cli): add session delete command (anomalyco#13571) * fix(opencode): ACP sessions never get LLM-generated titles (anomalyco#13095) * feat(acp): add opt-in flag for question tool (anomalyco#13562) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * tweak: drop ids from attachments in tools, assign them in prompt.ts instead (anomalyco#13890) * fix(website): fix site in safari 18 (anomalyco#13894) * ci: fixed apt cache not working in publish.yml (anomalyco#13897) * ci: use `useblacksmith/stickydisk` on linux runners only (anomalyco#13909) * core: keep message part order stable when files resolve asynchronously (anomalyco#13915) * ci: fixed Rust cache for 'cargo install' in publish.yml (anomalyco#13907) * ci: fixed missing if condition (anomalyco#13934) * Hide server CLI on windows (anomalyco#13936) * zen: glm 5 free * wip: zen * ci: update triage workflow (anomalyco#13944) * fix(app): keep Escape handling local to prompt input on macOS desktop (anomalyco#13963) * docs(ko): improve Korean translation accuracy and clarity in Zen docs (anomalyco#13951) * docs: improve zh-cn and zh-tw documentation translations (anomalyco#13942) * fix(docs): correct reversed meaning in Korean plugins logging section (anomalyco#13945) * chore: generate * fix(opencode): resolve conflicts from upstream sync * fix(tool): remove spurious validateDirectory introduced during sync (#191) --------- Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: James Lal <james@littlebearlabs.io> Co-authored-by: Ariane Emory <97994360+ariane-emory@users.noreply.github.com> Co-authored-by: Brendan Allan <brendonovich@outlook.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: webwww123 <1876948535@qq.com> Co-authored-by: Jun <87404676+Seungjun0906@users.noreply.github.com> Co-authored-by: Jack <740172898@qq.com> Co-authored-by: Shintaro Jokagi <61367823+taroj1205@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Sebastian <hasta84@gmail.com> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Selim <31136147+selimerunkut@users.noreply.github.com> Co-authored-by: dpuyosa <dpuyosa@users.noreply.github.com> Co-authored-by: Kyle Mistele <kyle@humanlayer.dev> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Ryan Vogel <ryan@inbound.new> Co-authored-by: Dylan Fiedler <dtfiedler@users.noreply.github.com> Co-authored-by: Rasheed <99349713+gitRasheed@users.noreply.github.com> Co-authored-by: Aman Kalra <49478659+amankalra172@users.noreply.github.com> Co-authored-by: amankalra172 <aman.kalra@st.ovgu.de> Co-authored-by: Smit Chaudhary <smitchaudhary10@gmail.com> Co-authored-by: projectArtur <155688912+ASidorenkoCode@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Spoon <212802214+spoons-and-mirrors@users.noreply.github.com> Co-authored-by: Rahul Mishra <blankparticle@gmail.com> Co-authored-by: Chris Yang <18487241+ysm-dev@users.noreply.github.com> Co-authored-by: Annopick <veater@qq.com> Co-authored-by: eytans <eytans@users.noreply.github.com> Co-authored-by: G36maid <53391375+G36maid@users.noreply.github.com> Co-authored-by: 严浩 <37316281+yanhao98@users.noreply.github.com> Co-authored-by: 严浩 <h_mini2024@oo1.dev> Co-authored-by: Niu Shuai <guisu2010@gmail.com> Co-authored-by: Kevin <kevin@apthos.net> Co-authored-by: 0xK3vin <kevin@git-pu.sh> Co-authored-by: Github Action <action@github.com> Co-authored-by: Alberto Valverde <alberto@toscat.net> Co-authored-by: adamelmore <2363879+adamdottv@users.noreply.github.com> Co-authored-by: Brandon Julio Thenaro <brandon.julio.t@icloud.com> Co-authored-by: zerone0x <hi@trine.dev> Co-authored-by: Denys <dector@dector.space> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: Shane Bishop <71288697+shanebishop1@users.noreply.github.com> Co-authored-by: Alex Yaroshuk <34632190+alexyaroshuk@users.noreply.github.com> Co-authored-by: Salam Elbilig <finalfantasia@users.noreply.github.com> Co-authored-by: Pan Kaixin <pan_kaixin@qq.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bnema <brice@briceamen.com> Co-authored-by: Jhin Lee <leehack@gmail.com> Co-authored-by: BlueT - Matthew Lien - 練喆明 <BlueT@BlueT.org> Co-authored-by: Chujiang <110hqc@gmail.com> Co-authored-by: Rafi Khardalian <rafi@actualyze.ai> Co-authored-by: Imanol Maiztegui <imanol.mzd@gmail.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Robert Schadek <rburners@gmail.com> Co-authored-by: Zhiyuan Zheng <zhzy0077@hotmail.com> Co-authored-by: ImmuneFOMO <60671130+ImmuneFOMO@users.noreply.github.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Goni Zahavy <goni1993@gmail.com> Co-authored-by: Ganesh <179367536+itskritix@users.noreply.github.com> Co-authored-by: vynn <163614291+vynnlee@users.noreply.github.com> Co-authored-by: chenmi <jack_chenyuana@163.com> Co-authored-by: Minung Han <hmu332233@gmail.com> Co-authored-by: Janni Turunen <janni@Jannis-MacBook-Air.local>
No description provided.