HERMES-GIELIE/CONTRIBUTORS.md

108 lines
19 KiB
Markdown
Raw Normal View History

# Contributors
Hermes WebUI is a community project. **194 people** have shipped code that landed in a release tag — including the long tail of folks whose work was salvaged into batch releases or absorbed via Co-authored-by trailers. This file is the canonical credit roll.
A contributor's PR count is the number of distinct PRs they get credit for: PRs they authored that merged directly, PRs they authored that were closed-but-absorbed into a release commit (batch merges, salvage rewrites, cherry-picked-and-attributed work), and PRs where they were explicitly attributed in `CHANGELOG.md`. All count the same.
docs: backfill contributor attribution for absorbed PRs (#2622, #2931, #3104, #3220, #3223, #3337) Six contributor PRs were shipped via the cherry-pick/absorb path but their absorb commits never carried a `Co-authored-by:` trailer, so the contributors received zero commit credit on their GitHub contribution graphs. Three of them (@antoniocarlos97ss, @liuqiangweb-svg, @pix0127) were also missing from CONTRIBUTORS.md entirely; the other three (@AJV20, @mysoul12138) were already listed via CHANGELOG attribution but still lacked the graph credit. This commit: - Adds the three missing contributors to CONTRIBUTORS.md (single-PR section). - Carries Co-authored-by trailers for all six so each gets a real commit on their contribution graph (the non-history-rewrite way to repair this). - Bumps the tracked totals (194 -> 197 contributors, 843 -> 846 credits). The shipped work, by PR: #2622 (@pix0127) WebUI dashboard plugin system w/ iframe isolation #2931 (@liuqiangweb-svg) Edge TTS as an alternative speech engine #3104 (@antoniocarlos97ss) workspace file upload + drag-drop w/ archive extract #3220 (@AJV20) generated media artifact cards #3223 (@AJV20) manual session title regeneration #3337 (@mysoul12138) syntax highlighting in workspace file preview Co-authored-by: pix0127 <8500500+pix0127@users.noreply.github.com> Co-authored-by: Andy <281253538+liuqiangweb-svg@users.noreply.github.com> Co-authored-by: antoniocarlos97ss <101895404+antoniocarlos97ss@users.noreply.github.com> Co-authored-by: AJV20 <24819659+AJV20@users.noreply.github.com> Co-authored-by: mysoul12138 <203929894+mysoul12138@users.noreply.github.com>
2026-06-02 21:39:59 +00:00
**Total contributors tracked:** 197
**Total PR credits:** 846
**Last refreshed:** v0.51.217, 2026-06-02 (attribution backfill — 3 absorbed-PR contributors that lacked CONTRIBUTORS.md entries; see PR description)
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
Generated by `scripts/regen_contributors.py` in the maintainer workspace, which unions three sources: the GitHub merged-PR list, `CHANGELOG.md` attribution lines, and `Co-authored-by:` trailers on commits that landed on master (the canonical signal for a CLOSED PR whose commits were cherry-picked in and attributed). If your name is missing or wrong, open a PR against `CONTRIBUTORS.md` — we cross-check against the changelog on each release.
---
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
## Top contributors (5+ PRs landed)
| # | Contributor | PRs | First release | Latest release |
|---|---|---:|---|---|
| 1 | [@franksong2702](https://github.com/franksong2702) | 148 | `v0.49.3` | `v0.51.153` |
| 2 | [@Michaelyklam](https://github.com/Michaelyklam) | 117 | `v0.50.240` | `v0.51.139` |
| 3 | [@bergeouss](https://github.com/bergeouss) | 70 | `v0.48.0` | `v0.51.46` |
| 4 | [@ai-ag2026](https://github.com/ai-ag2026) | 67 | `v0.50.279` | `v0.51.190` |
| 5 | [@dso2ng](https://github.com/dso2ng) | 25 | `v0.50.227` | `v0.51.153` |
| 6 | [@AJV20](https://github.com/AJV20) | 24 | `v0.51.93` | `v0.51.188` |
| 7 | [@starship-s](https://github.com/starship-s) | 19 | `v0.50.123` | `v0.51.153` |
| 8 | [@jasonjcwu](https://github.com/jasonjcwu) | 16 | `v0.50.227` | `v0.51.132` |
| 9 | [@dobby-d-elf](https://github.com/dobby-d-elf) | 15 | `v0.51.38` | `v0.51.161` |
| 10 | [@Jordan-SkyLF](https://github.com/Jordan-SkyLF) | 12 | `v0.50.18` | `v0.51.66` |
| 11 | [@aronprins](https://github.com/aronprins) | 10 | `v0.44.0` | `v0.51.45` |
| 12 | [@JKJameson](https://github.com/JKJameson) | 10 | `v0.50.198` | `v0.51.31` |
| 13 | [@ccqqlo](https://github.com/ccqqlo) | 9 | `v0.44.0` | `v0.50.270` |
| 14 | [@24601](https://github.com/24601) | 8 | `v0.50.189` | `v0.51.5` |
| 15 | [@LumenYoung](https://github.com/LumenYoung) | 8 | `v0.51.47` | `v0.51.99` |
| 16 | [@Sanjays2402](https://github.com/Sanjays2402) | 8 | `v0.50.292` | `v0.51.158` |
| 17 | [@armorbreak001](https://github.com/armorbreak001) | 7 | `v0.50.47` | `v0.50.50` |
| 18 | [@NocGeek](https://github.com/NocGeek) | 7 | `v0.50.251` | `v0.50.252` |
| 19 | [@Hinotoi-agent](https://github.com/Hinotoi-agent) | 6 | `v0.50.10` | `v0.51.44` |
| 20 | [@iRonin](https://github.com/iRonin) | 6 | `v0.41.0` | `v0.41.0` |
| 21 | [@bsgdigital](https://github.com/bsgdigital) | 5 | `v0.50.159` | `v0.51.31` |
| 22 | [@cloudyun888](https://github.com/cloudyun888) | 5 | `v0.50.47` | `v0.50.140` |
| 23 | [@fxd-jason](https://github.com/fxd-jason) | 5 | `v0.50.245` | `v0.50.250` |
| 24 | [@george-andraws](https://github.com/george-andraws) | 5 | `v0.51.139` | `v0.51.153` |
| 25 | [@happy5318](https://github.com/happy5318) | 5 | `v0.50.238` | `v0.51.31` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
## Sustained contributors (3–4 PRs landed)
| Contributor | PRs | First release | Latest release |
|---|---:|---|---|
| [@AlexeyDsov](https://github.com/AlexeyDsov) | 4 | `v0.50.267` | `v0.51.139` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
| [@fecolinhares](https://github.com/fecolinhares) | 4 | `v0.50.238` | `v0.50.250` |
| [@frap129](https://github.com/frap129) | 4 | `v0.50.140` | `v0.50.233` |
| [@Isla-Liu](https://github.com/Isla-Liu) | 4 | `v0.51.100` | `v0.51.142` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
| [@KingBoyAndGirl](https://github.com/KingBoyAndGirl) | 4 | `v0.50.238` | `v0.50.240` |
| [@qxxaa](https://github.com/qxxaa) | 4 | `v0.50.210` | `v0.51.37` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
| [@renheqiang](https://github.com/renheqiang) | 4 | `v0.50.61` | `v0.50.95` |
| [@Thanatos-Z](https://github.com/Thanatos-Z) | 4 | `v0.50.257` | `v0.50.278` |
| [@deboste](https://github.com/deboste) | 3 | `v0.17.1` | `v0.50.297` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
| [@dutchaiagency](https://github.com/dutchaiagency) | 3 | `v0.50.281` | `v0.50.286` |
| [@espokaos-ops](https://github.com/espokaos-ops) | 3 | `v0.51.92` | `v0.51.94` |
docs: refresh CONTRIBUTORS.md and README to v0.51.58 Last refresh was at v0.51.44 (130 contributors / 568 PR credits). Since then, 14 releases shipped (v0.51.45 through v0.51.58) with 78 attributed PRs from 20 distinct contributors, adding 7 first-time contributors: - @lucasrc — auth-hardening trilogy (#2191/#2192/#2193) → sustained 3-PR bucket - @LumenYoung — stale-stream guard + 3 streaming-correctness fixes → sustained 4-PR bucket - @MrFant — 2 PRs (reasoning_content whitelist, message preservation) - @xz-dev — 2 PRs (thinking-card state, session-scoped metering) - @legeantbleu — French (fr) locale (#2142) - @ayushere — ctl.sh bash 3.2 macOS compat (#2117) - @plerohellec — single PR Bucket promotions (existing contributors who moved up): - @dobby-d-elf: 2 → 6 PRs (jumps from two-PR list into top contributors) - @samuelgudi: 1 → 2 - @michael-dg: 1 → 2 - @vcavichini: 1 → 2 - @hualong1009: 1 → 2 Top contributor PR-count updates (top 7 changed materially): | Contributor | Before | After | Delta | Latest release | |-------------------|-------:|------:|------:|---------------| | @franksong2702 | 92 | 117 | +25 | Unreleased | | @Michaelyklam | 81 | 92 | +11 | v0.51.57 | | @bergeouss | 61 | 62 | +1 | v0.51.46 | | @ai-ag2026 | 49 | 55 | +6 | v0.51.47 | | @dso2ng | 21 | 23 | +2 | v0.51.51 | | @jasonjcwu | 13 | 16 | +3 | v0.51.55 | | @Jordan-SkyLF | 6 | 12 | +6 | Unreleased | Header refreshed: 130 → 137 contributors, 568 → 646 PR credits, refresh tag bumped to v0.51.58. Notable contributions paragraphs in both files updated with the new work (manual /compress async pair, worktree status + guarded remove, fork-from-here, opencode-go resolver, the LumenYoung + lucasrc + dobby-d-elf entries). Source of truth: CHANGELOG.md attribution lines `**PR #N** by @user` between the v0.51.44 header and the Unreleased section, plus baseline buckets in the previous CONTRIBUTORS.md. Cross-bucket sanity check passes (no handle appears in multiple buckets; 21 + 13 + 19 + 84 = 137 unique handles).
2026-05-14 02:18:57 +00:00
| [@lucasrc](https://github.com/lucasrc) | 3 | `v0.51.57` | `v0.51.57` |
| [@mccxj](https://github.com/mccxj) | 3 | `v0.51.75` | `v0.51.148` |
| [@mysoul12138](https://github.com/mysoul12138) | 3 | `v0.51.161` | `v0.51.185` |
| [@pamnard](https://github.com/pamnard) | 3 | `v0.51.186` | `v0.51.191` |
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
| [@pavolbiely](https://github.com/pavolbiely) | 3 | `v0.50.159` | `v0.50.233` |
## Two-PR contributors (17)
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
[@aliceisjustplaying](https://github.com/aliceisjustplaying), [@allenliang2022](https://github.com/allenliang2022), [@andrewkangkr](https://github.com/andrewkangkr), [@Carry00](https://github.com/Carry00), [@eleboucher](https://github.com/eleboucher), [@insecurejezza](https://github.com/insecurejezza), [@junjunjunbong](https://github.com/junjunjunbong), [@linuxid10t](https://github.com/linuxid10t), [@michael-dg](https://github.com/michael-dg), [@mmartial](https://github.com/mmartial), [@MrFant](https://github.com/MrFant), [@plerohellec](https://github.com/plerohellec), [@renatomott](https://github.com/renatomott), [@swftwolfzyq](https://github.com/swftwolfzyq), [@vcavichini](https://github.com/vcavichini), [@xz-dev](https://github.com/xz-dev), [@zichen0116](https://github.com/zichen0116).
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
docs: backfill contributor attribution for absorbed PRs (#2622, #2931, #3104, #3220, #3223, #3337) Six contributor PRs were shipped via the cherry-pick/absorb path but their absorb commits never carried a `Co-authored-by:` trailer, so the contributors received zero commit credit on their GitHub contribution graphs. Three of them (@antoniocarlos97ss, @liuqiangweb-svg, @pix0127) were also missing from CONTRIBUTORS.md entirely; the other three (@AJV20, @mysoul12138) were already listed via CHANGELOG attribution but still lacked the graph credit. This commit: - Adds the three missing contributors to CONTRIBUTORS.md (single-PR section). - Carries Co-authored-by trailers for all six so each gets a real commit on their contribution graph (the non-history-rewrite way to repair this). - Bumps the tracked totals (194 -> 197 contributors, 843 -> 846 credits). The shipped work, by PR: #2622 (@pix0127) WebUI dashboard plugin system w/ iframe isolation #2931 (@liuqiangweb-svg) Edge TTS as an alternative speech engine #3104 (@antoniocarlos97ss) workspace file upload + drag-drop w/ archive extract #3220 (@AJV20) generated media artifact cards #3223 (@AJV20) manual session title regeneration #3337 (@mysoul12138) syntax highlighting in workspace file preview Co-authored-by: pix0127 <8500500+pix0127@users.noreply.github.com> Co-authored-by: Andy <281253538+liuqiangweb-svg@users.noreply.github.com> Co-authored-by: antoniocarlos97ss <101895404+antoniocarlos97ss@users.noreply.github.com> Co-authored-by: AJV20 <24819659+AJV20@users.noreply.github.com> Co-authored-by: mysoul12138 <203929894+mysoul12138@users.noreply.github.com>
2026-06-02 21:39:59 +00:00
## Single-PR contributors (139)
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
Each of these folks landed exactly one PR that shipped — a bug fix, a locale, a security hardening, a doc improvement, an infrastructure tweak. Every one moved the project forward.
docs: backfill contributor attribution for absorbed PRs (#2622, #2931, #3104, #3220, #3223, #3337) Six contributor PRs were shipped via the cherry-pick/absorb path but their absorb commits never carried a `Co-authored-by:` trailer, so the contributors received zero commit credit on their GitHub contribution graphs. Three of them (@antoniocarlos97ss, @liuqiangweb-svg, @pix0127) were also missing from CONTRIBUTORS.md entirely; the other three (@AJV20, @mysoul12138) were already listed via CHANGELOG attribution but still lacked the graph credit. This commit: - Adds the three missing contributors to CONTRIBUTORS.md (single-PR section). - Carries Co-authored-by trailers for all six so each gets a real commit on their contribution graph (the non-history-rewrite way to repair this). - Bumps the tracked totals (194 -> 197 contributors, 843 -> 846 credits). The shipped work, by PR: #2622 (@pix0127) WebUI dashboard plugin system w/ iframe isolation #2931 (@liuqiangweb-svg) Edge TTS as an alternative speech engine #3104 (@antoniocarlos97ss) workspace file upload + drag-drop w/ archive extract #3220 (@AJV20) generated media artifact cards #3223 (@AJV20) manual session title regeneration #3337 (@mysoul12138) syntax highlighting in workspace file preview Co-authored-by: pix0127 <8500500+pix0127@users.noreply.github.com> Co-authored-by: Andy <281253538+liuqiangweb-svg@users.noreply.github.com> Co-authored-by: antoniocarlos97ss <101895404+antoniocarlos97ss@users.noreply.github.com> Co-authored-by: AJV20 <24819659+AJV20@users.noreply.github.com> Co-authored-by: mysoul12138 <203929894+mysoul12138@users.noreply.github.com>
2026-06-02 21:39:59 +00:00
[@29n](https://github.com/29n), [@86cloudyun-afk](https://github.com/86cloudyun-afk), [@AdoneyGalvan](https://github.com/AdoneyGalvan), [@amlyczz](https://github.com/amlyczz), [@andrewy-wizard](https://github.com/andrewy-wizard), [@antoniocarlos97ss](https://github.com/antoniocarlos97ss), [@Argonaut790](https://github.com/Argonaut790), [@arshkumarsingh](https://github.com/arshkumarsingh), [@ashbuildslife](https://github.com/ashbuildslife), [@Asunfly](https://github.com/Asunfly), [@ayushere](https://github.com/ayushere), [@bengdan](https://github.com/bengdan), [@betamod](https://github.com/betamod), [@bjb2](https://github.com/bjb2), [@Bobby9228](https://github.com/Bobby9228), [@bschmidy10](https://github.com/bschmidy10), [@carlytwozero](https://github.com/carlytwozero), [@Charanis](https://github.com/Charanis), [@ChaseFlorell](https://github.com/ChaseFlorell), [@chwps](https://github.com/chwps), [@colin-chang](https://github.com/colin-chang), [@cyberdyne187](https://github.com/cyberdyne187), [@darkopetrovic](https://github.com/darkopetrovic), [@davidsben](https://github.com/davidsben), [@DavidSchuchert](https://github.com/DavidSchuchert), [@DelightRun](https://github.com/DelightRun), [@dev-rehaann](https://github.com/dev-rehaann), [@dotBeeps](https://github.com/dotBeeps), [@DrMaks22](https://github.com/DrMaks22), [@eba8](https://github.com/eba8), [@emanon312](https://github.com/emanon312), [@eov128](https://github.com/eov128), [@Fail-Safe](https://github.com/Fail-Safe), [@FrancescoFarinola](https://github.com/FrancescoFarinola), [@gabogabucho](https://github.com/gabogabucho), [@galvani](https://github.com/galvani), [@gavinssr](https://github.com/gavinssr), [@GeoffBao](https://github.com/GeoffBao), [@georgebdavis](https://github.com/georgebdavis), [@GiggleSamurai](https://github.com/GiggleSamurai), [@hacker1e7](https://github.com/hacker1e7), [@hacker2005](https://github.com/hacker2005), [@halmisen](https://github.com/halmisen), [@hermes-gimmethebeans](https://github.com/hermes-gimmethebeans), [@hi-friday](https://github.com/hi-friday), [@hualong1009](https://github.com/hualong1009), [@huangzt](https://github.com/huangzt), [@indigokarasu](https://github.com/indigokarasu), [@intellectronica](https://github.com/intellectronica), [@jeffscottward](https://github.com/jeffscottward), [@Jellypowered](https://github.com/Jellypowered), [@jimdawdy-hub](https://github.com/jimdawdy-hub), [@JinYue-GitHub](https://github.com/JinYue-GitHub), [@joaompfp](https://github.com/joaompfp), [@jundev0001](https://github.com/jundev0001), [@KayZz69](https://github.com/KayZz69), [@kcclaw001](https://github.com/kcclaw001), [@kevin-ho](https://github.com/kevin-ho), [@koshikai](https://github.com/koshikai), [@kowenhaoai](https://github.com/kowenhaoai), [@lawrencel1ng](https://github.com/lawrencel1ng), [@leap233](https://github.com/leap233), [@legeantbleu](https://github.com/legeantbleu), [@likawa3b](https://github.com/likawa3b), [@liuqiangweb-svg](https://github.com/liuqiangweb-svg), [@lost9999](https://github.com/lost9999), [@lucky-yonug](https://github.com/lucky-yonug), [@lx3133584](https://github.com/lx3133584), [@MacLeodMike](https://github.com/MacLeodMike), [@malulian](https://github.com/malulian), [@mangodxd](https://github.com/mangodxd), [@mariosam95](https://github.com/mariosam95), [@MatzAgent](https://github.com/MatzAgent), [@mbac](https://github.com/mbac), [@migueltavares](https://github.com/migueltavares), [@MinhoJJang](https://github.com/MinhoJJang), [@mittyok](https://github.com/mittyok), [@mslovy](https://github.com/mslovy), [@mvanhorn](https://github.com/mvanhorn), [@nanookclaw](https://github.com/nanookclaw), [@ng-technology-llc](https://github.com/ng-technology-llc), [@nickgiulioni1](https://github.com/nickgiulioni1), [@octo-patch](https://github.com/octo-patch), [@OneFat3](https://github.com/OneFat3), [@PINKIIILQWQ](https://github.com/PINKIIILQWQ), [@pix0127](https://github.com/pix0127), [@rhelmer](https://github.com/rhelmer), [@rickchew](https://github.com/rickchew), [@RobertoVillegas](https://github.com/RobertoVillegas), [@ruxme](ht
---
## How credit is tracked
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
Most PRs in this repo land via one of four paths:
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
1. **Direct merge** — your PR is reviewed and merged on its own. Author shows up directly in `git log` and on the PR's `merged_at` timestamp.
docs: refresh CONTRIBUTORS.md and README to v0.51.58 Last refresh was at v0.51.44 (130 contributors / 568 PR credits). Since then, 14 releases shipped (v0.51.45 through v0.51.58) with 78 attributed PRs from 20 distinct contributors, adding 7 first-time contributors: - @lucasrc — auth-hardening trilogy (#2191/#2192/#2193) → sustained 3-PR bucket - @LumenYoung — stale-stream guard + 3 streaming-correctness fixes → sustained 4-PR bucket - @MrFant — 2 PRs (reasoning_content whitelist, message preservation) - @xz-dev — 2 PRs (thinking-card state, session-scoped metering) - @legeantbleu — French (fr) locale (#2142) - @ayushere — ctl.sh bash 3.2 macOS compat (#2117) - @plerohellec — single PR Bucket promotions (existing contributors who moved up): - @dobby-d-elf: 2 → 6 PRs (jumps from two-PR list into top contributors) - @samuelgudi: 1 → 2 - @michael-dg: 1 → 2 - @vcavichini: 1 → 2 - @hualong1009: 1 → 2 Top contributor PR-count updates (top 7 changed materially): | Contributor | Before | After | Delta | Latest release | |-------------------|-------:|------:|------:|---------------| | @franksong2702 | 92 | 117 | +25 | Unreleased | | @Michaelyklam | 81 | 92 | +11 | v0.51.57 | | @bergeouss | 61 | 62 | +1 | v0.51.46 | | @ai-ag2026 | 49 | 55 | +6 | v0.51.47 | | @dso2ng | 21 | 23 | +2 | v0.51.51 | | @jasonjcwu | 13 | 16 | +3 | v0.51.55 | | @Jordan-SkyLF | 6 | 12 | +6 | Unreleased | Header refreshed: 130 → 137 contributors, 568 → 646 PR credits, refresh tag bumped to v0.51.58. Notable contributions paragraphs in both files updated with the new work (manual /compress async pair, worktree status + guarded remove, fork-from-here, opencode-go resolver, the LumenYoung + lucasrc + dobby-d-elf entries). Source of truth: CHANGELOG.md attribution lines `**PR #N** by @user` between the v0.51.44 header and the Unreleased section, plus baseline buckets in the previous CONTRIBUTORS.md. Cross-bucket sanity check passes (no handle appears in multiple buckets; 21 + 13 + 19 + 84 = 137 unique handles).
2026-05-14 02:18:57 +00:00
2. **Squash into a batch release** — your PR is merged together with several other contributor PRs into a single release commit (e.g. `release: v0.51.55 — 9-PR contributor batch`). The original PR closes (not merges) on GitHub but the squashed release commit carries a `Co-authored-by: <you>` trailer plus an entry in `CHANGELOG.md` crediting you by username and PR number.
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
3. **Salvaged from a larger PR** — when a PR mixes one good change with several unrelated or risky ones, we split it: the good parts ship in a clean follow-up PR, you get credit in the CHANGELOG entry, and the original PR is closed with a salvage map showing what went where.
4. **Auto-rebase + auto-fix** — for merge-ready contributor PRs with mechanical blockers (CHANGELOG conflicts, lint, drifted tests), a maintainer rebases the contributor's branch, fixes the blockers, and force-pushes back. The `Co-authored-by` trailer preserves your authorship.
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
All four paths count as a contribution. GitHub's `merged_at` field only catches path 1; paths 2-4 show as "closed" on the contributor's PR even though the work is live in master. That's why this file consults the CHANGELOG attribution lines, not just GitHub's merged-PR list.
## Special thanks
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
- **[@aronprins](https://github.com/aronprins)** — `v0.50.0` UI overhaul (PR #242). The CSS-only redesign that defined the design tokens, theme architecture, and three-panel layout that the rest of the app builds on. PR #242 didn't merge as-is, but it is the design language of the app.
- **[@franksong2702](https://github.com/franksong2702)** — most prolific external contributor across the project's history. 148 PRs spanning the session sidebar, mobile/responsive layout, workspace state machine, profile context, slash autocomplete, breadcrumb navigation, streaming-session exemption, cron output preservation, embedded terminal, the manual-compress async start/status endpoint pair, the worktree status surface (PR #2109) + guarded remove (PR #2156) for the lifecycle umbrella #2057, session post-render dedup (PR #2166), the `/api/session` native-WebUI fast path (PR #2170), tail-window response trim (PR #2171), the second-wave stale-stream guard extension (PR #2158), CSP report collector (PR #2160), and the long tail of polish.
- **[@Michaelyklam](https://github.com/Michaelyklam)** — most prolific contributor of late-2025/early-2026. 117 PRs covering Docker hardening, profile-scoped skills, KaTeX delimiter parsing, Codex quota surfacing, Goal command, Kanban polish, auto-compression toast lifetime, the localization parity backfills, the v0.51.51 mobile Insights bucketing/layout pair (PRs #2120/#2121), the Hermes run adapter RFC (PR #2105 for #1925), the fork-from-here absolute-index fix (PR #2198 for #2184), and the opencode-go custom-provider overlap routing fix (PR #2204 for #1894).
- **[@bergeouss](https://github.com/bergeouss)** — provider-management UI, OAuth status, two-container Docker docs, profile isolation hardening, Reveal-in-Finder, the OpenRouter free-tier live fetch, and most of Settings → Providers. 70 PRs.
- **[@ai-ag2026](https://github.com/ai-ag2026)** — autonomous-AI contributor (Hermes Agent-driven). 67 PRs focused on session recovery (state.db sidecar reconciliation, orphan `.bak` recovery, audit + safe-repair endpoints), workspace/run lifecycle health, the crash-safe turn-journal RFC, the append-only turn-journal helper (PR #2059), the matching lifecycle-events layer (PR #2062), the `Content-Security-Policy-Report-Only` header (PR #2084), and the per-cron toast notification toggle (PR #2100).
docs: refresh CONTRIBUTORS.md and README to v0.51.58 Last refresh was at v0.51.44 (130 contributors / 568 PR credits). Since then, 14 releases shipped (v0.51.45 through v0.51.58) with 78 attributed PRs from 20 distinct contributors, adding 7 first-time contributors: - @lucasrc — auth-hardening trilogy (#2191/#2192/#2193) → sustained 3-PR bucket - @LumenYoung — stale-stream guard + 3 streaming-correctness fixes → sustained 4-PR bucket - @MrFant — 2 PRs (reasoning_content whitelist, message preservation) - @xz-dev — 2 PRs (thinking-card state, session-scoped metering) - @legeantbleu — French (fr) locale (#2142) - @ayushere — ctl.sh bash 3.2 macOS compat (#2117) - @plerohellec — single PR Bucket promotions (existing contributors who moved up): - @dobby-d-elf: 2 → 6 PRs (jumps from two-PR list into top contributors) - @samuelgudi: 1 → 2 - @michael-dg: 1 → 2 - @vcavichini: 1 → 2 - @hualong1009: 1 → 2 Top contributor PR-count updates (top 7 changed materially): | Contributor | Before | After | Delta | Latest release | |-------------------|-------:|------:|------:|---------------| | @franksong2702 | 92 | 117 | +25 | Unreleased | | @Michaelyklam | 81 | 92 | +11 | v0.51.57 | | @bergeouss | 61 | 62 | +1 | v0.51.46 | | @ai-ag2026 | 49 | 55 | +6 | v0.51.47 | | @dso2ng | 21 | 23 | +2 | v0.51.51 | | @jasonjcwu | 13 | 16 | +3 | v0.51.55 | | @Jordan-SkyLF | 6 | 12 | +6 | Unreleased | Header refreshed: 130 → 137 contributors, 568 → 646 PR credits, refresh tag bumped to v0.51.58. Notable contributions paragraphs in both files updated with the new work (manual /compress async pair, worktree status + guarded remove, fork-from-here, opencode-go resolver, the LumenYoung + lucasrc + dobby-d-elf entries). Source of truth: CHANGELOG.md attribution lines `**PR #N** by @user` between the v0.51.44 header and the Unreleased section, plus baseline buckets in the previous CONTRIBUTORS.md. Cross-bucket sanity check passes (no handle appears in multiple buckets; 21 + 13 + 19 + 84 = 137 unique handles).
2026-05-14 02:18:57 +00:00
- **[@Jordan-SkyLF](https://github.com/Jordan-SkyLF)** — Live streaming, session recovery, workspace fallback, and a recent burst of presentation polish: the manual "Refresh usage" button on the Provider quota card (PR #2150), cancelled-turn status classification (PR #2151), Firefox sidebar scroll stabilization (PR #2200), early provisional session titles (PR #2202), target-aware "What's new?" links (PR #2207), and MCP tools overflow fix in Settings (PR #2210). 12 PRs total.
- **[@LumenYoung](https://github.com/LumenYoung)** — contributor focused on the streaming hot path's correctness. 8 PRs including the original stale-stream writeback guard (PR #2136 — the bug class the next two releases extended), gateway-state alive-null classification (PR #2075), compression-banner anchor alignment (PR #2182), and context-progress ring auto-refresh on compression complete (PR #2188).
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
- **[@iRonin](https://github.com/iRonin)** — security hardening sprint (PRs #196–#204): session memory leak fix, CSP + Permissions-Policy headers, slow-client connection timeout, optional HTTPS/TLS, upstream branch tracking, CLI session file-browser support. Six consecutive, focused, high-quality security PRs.
- **[@indigokarasu](https://github.com/indigokarasu)** — visual redesign proposal (PR #213). Icon rail sidebar, design token system, 7 themes. Didn't merge as-is but shaped the design language that landed in v0.50.0.
- **[@zenc-cp](https://github.com/zenc-cp)** — anti-hallucination guard for the ReAct loop (PR #133). Three-layer approach (ephemeral prompt, live token filtering, session-history cleanup) that the streaming pipeline still uses.
- **[@deboste](https://github.com/deboste)** — reverse-proxy auth, mobile responsive layout, model routing (PRs #3, #4, #5). Three of the very first community PRs. Early foundation work.
- **[@Hinotoi-agent](https://github.com/Hinotoi-agent)** — security fixes spanning profile `.env` isolation (PR #351), session-import workspace validation (PR #2048), and bandit B105 hardening. Subtle, high-leverage credential and path-traversal fixes.
docs: refresh CONTRIBUTORS.md and README to v0.51.58 Last refresh was at v0.51.44 (130 contributors / 568 PR credits). Since then, 14 releases shipped (v0.51.45 through v0.51.58) with 78 attributed PRs from 20 distinct contributors, adding 7 first-time contributors: - @lucasrc — auth-hardening trilogy (#2191/#2192/#2193) → sustained 3-PR bucket - @LumenYoung — stale-stream guard + 3 streaming-correctness fixes → sustained 4-PR bucket - @MrFant — 2 PRs (reasoning_content whitelist, message preservation) - @xz-dev — 2 PRs (thinking-card state, session-scoped metering) - @legeantbleu — French (fr) locale (#2142) - @ayushere — ctl.sh bash 3.2 macOS compat (#2117) - @plerohellec — single PR Bucket promotions (existing contributors who moved up): - @dobby-d-elf: 2 → 6 PRs (jumps from two-PR list into top contributors) - @samuelgudi: 1 → 2 - @michael-dg: 1 → 2 - @vcavichini: 1 → 2 - @hualong1009: 1 → 2 Top contributor PR-count updates (top 7 changed materially): | Contributor | Before | After | Delta | Latest release | |-------------------|-------:|------:|------:|---------------| | @franksong2702 | 92 | 117 | +25 | Unreleased | | @Michaelyklam | 81 | 92 | +11 | v0.51.57 | | @bergeouss | 61 | 62 | +1 | v0.51.46 | | @ai-ag2026 | 49 | 55 | +6 | v0.51.47 | | @dso2ng | 21 | 23 | +2 | v0.51.51 | | @jasonjcwu | 13 | 16 | +3 | v0.51.55 | | @Jordan-SkyLF | 6 | 12 | +6 | Unreleased | Header refreshed: 130 → 137 contributors, 568 → 646 PR credits, refresh tag bumped to v0.51.58. Notable contributions paragraphs in both files updated with the new work (manual /compress async pair, worktree status + guarded remove, fork-from-here, opencode-go resolver, the LumenYoung + lucasrc + dobby-d-elf entries). Source of truth: CHANGELOG.md attribution lines `**PR #N** by @user` between the v0.51.44 header and the Unreleased section, plus baseline buckets in the previous CONTRIBUTORS.md. Cross-bucket sanity check passes (no handle appears in multiple buckets; 21 + 13 + 19 + 84 = 137 unique handles).
2026-05-14 02:18:57 +00:00
- **[@lucasrc](https://github.com/lucasrc)** — auth-hardening trilogy in v0.51.57 (PRs #2191/#2192/#2193): thread-safe login rate limiter with PBKDF2 key separation, password-hash cache invalidation on settings change, and the full 64-char HMAC-SHA256 session signature with backwards-compatible migration bridge. Three coordinated security PRs that landed together.
- **[@jasonjcwu](https://github.com/jasonjcwu)** — composer and transcript polish, 16 PRs. Recent: silent compress-status during session switch (PR #2185), concurrent-send loss fix (PR #2186), in-transcript steer message badge (PR #2187), plus sidebar collapse via active-rail click (PR #2054).
- **[@dobby-d-elf](https://github.com/dobby-d-elf)** — frontend reliability and motion polish: workspace fallback on deleted directories (PR #2138), iPhone PWA bottom-scroll fix (PR #2143), the new "Activity: X tools" composer footer animation (PR #2203) and its follow-up tuning (PR #2212).
docs(contributors): refresh contributor stats to v0.51.44 Update CONTRIBUTORS.md and the README contributors section to reflect 130 contributors and 568 PR credits as of v0.51.44 (was 66/142 at v0.50.245). The numbers grew because: - The previous refresh was 1 release-cycle ago (50+ tags + 8 batch releases of contributor PRs ago). - The new counting rule explicitly includes closed-but-absorbed PRs: PRs whose original branch shows "closed" on GitHub but whose content shipped via batch-release squash with a Co-authored-by trailer, or via salvage rewrite with CHANGELOG attribution. This better reflects what users actually contributed. The compilation pipeline: 1. Pull every closed PR from gh api (state=closed, both merged and unmerged on GitHub) — 1421 PRs. 2. Walk CHANGELOG.md release-by-release and extract: - `PR #N by @user` (canonical bullet form) - `(#N by @user`, `(PR #N by @user`, `(#N, @user;` - `PRs #A, #B by @user` (plural) - `@user — PR #N`, `@user — N PR (#A, #B)` - `(credit: @user)` and `(credit: @userA and @userB)` 3. For every PR# mentioned in CHANGELOG, union the explicit @-attributed users with the gh PR author (when external). Maintainer accounts (@nesquena, @nesquena-hermes) are excluded. 4. For PRs merged on GitHub but not mentioned in CHANGELOG (very early PRs, non-noteworthy direct merges), credit the gh author. 5. Three salvaged-design contributors not directly in CHANGELOG are credited in the special-thanks roll: @indigokarasu (#213 → v0.50.0 design language), @andrewy-wizard (#177 → initial Chinese locale absorbed into v0.42.0), @zenc-cp (#133 → anti-hallucination guard absorbed into streaming.py). Pre-cleaning step strips HTML entities (`&#10;` etc.) before PR# scan to avoid false matches. PR# regex requires a whitespace/paren/bracket preceder so identifiers like `--key=123` and `(##10`-style headings don't pollute the count. Per-user first/last release computed from: - For merged-on-GH PRs: the smallest tag whose creator-date is >= the PR's merged_at timestamp. - For absorbed PRs: the release section in CHANGELOG that explicitly attributes to the user (or the earliest release that mentions the PR# if no explicit attribution exists for that user). CONTRIBUTORS.md sections: - Top contributors (5+ PRs) — 20 people, ranked - Sustained contributors (3–4 PRs) — 11 people - Two-PR contributors — 14 people, flat list - Single-PR contributors — 85 people, flat list - How credit is tracked — four paths described - Special thanks — 11 highlight blurbs README contributors section trimmed to top-10 table + notable- contribution blurbs (29 distinct contributors mentioned with concrete PR numbers). Same data, condensed for the README. No code changes. Docs only.
2026-05-11 06:59:42 +00:00
If you've contributed and aren't here, **open a PR**. We cross-check the CHANGELOG on every release, but if a credit fell through (a Co-authored-by trailer that didn't make it into the changelog entry, an attribution in a PR comment that should be in the release notes), this list is the right place to fix it.