Cheolsu Proxy v0.1.1
Cheolsu Proxy v0.1.1
TLS ์๋ ํจ์ค์ค๋ฃจ ์์ ์ฑ ๊ฐํ, ์ธ์ฆ์ ์์ฑ ์์ ํ, ๋ฐ์คํฌํฑ/TUI/CLI ์ฌ์ฉ์ฑ ๊ฐ์ , ๋ฌธ์ ๋ฐ CI ํ๊ฒฝ ์ ๋ฆฌ๋ฅผ ํฌํจํ ์ ์ง๋ณด์ ๋ฆด๋ฆฌ์ฆ์ ๋๋ค.
Highlights
- TLS ์๋ ํจ์ค์ค๋ฃจ ์ ์ฑ ์ ๊ฐํํ๊ณ Never Passthrough ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ณด๊ฐํ์ต๋๋ค.
- CA/Leaf ์ธ์ฆ์ ๋ง๋ฃ ๊ฐ์ง, ์๋ ์ฌ์์ฑ, ํค ํ์ ๋ฏธ๋ฌ๋ง, ์ธ์ฆ์ ์บ์ ์์ ์ฑ์ ๊ฐ์ ํ์ต๋๋ค.
- OpenAPI/Contract Testing, gRPC, SSE, GraphQL, AI ํธ๋ํฝ ๋ถ์ ๋ทฐ๋ฅผ ํ์ฅํ์ต๋๋ค.
- CLI์ MCP ๊ณตํต ๋ก์ง์
cheolsu_ops๋ก ํตํฉํ๊ณ CLI ์๋ธ์ปค๋งจ๋, JSON ์ถ๋ ฅ, completion ์ง์์ ์ถ๊ฐํ์ต๋๋ค. - ๋คํธ์ํฌ ํ ์ด๋ธ, ํํฐ ํ๋ฆฌ์ , ์ฝ๋ ๋ด๋ณด๋ด๊ธฐ, Breakpoint ์์ ํ ์ ๋ฌ ๋ฑ ๋ฐ์คํฌํฑ UX๋ฅผ ๊ฐ์ ํ์ต๋๋ค.
- Rust/JavaScript ์์กด์ฑ, Node 24/Bun 1.3.11 ๊ธฐ๋ฐ CI, OpenSSL ๋ฒ๋ค๋ง ๊ฒ์ฆ ์ํฌํ๋ก์ฐ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค.
Download
Cheolsu.Proxy_0.1.1_aarch64.dmgโ macOS app bundle (Apple Silicon)Cheolsu.Proxy_aarch64.app.tar.gzโ updater archive
Note: This build is unsigned. macOS Gatekeeper will block the app on first launch.
After extracting and moving the app to/Applications, open Terminal and run:xattr -cr /Applications/Cheolsu\ Proxy.appThis removes the quarantine attribute so the app can launch normally. You only need to do this once.
Full Commit History (258 commits since v0.1.0)
Click to expand full commit history
f8508a96 ci: release apple silicon artifact
561dd316 ci: build release sidecars for target triple
d4d81489 chore: release v0.1.1
732e134c Avoid stale Rust cache in OpenSSL bundling CI
b99e7bd4 Fix MCP store warning under CI
5de06971 Use Node 24 in JavaScript workflows
c9c7e30b Harden automatic TLS passthrough
3dca02cf fix(desktop): rule ์คํ ์ด ํ
์คํธ์์ ruleGetters๋ฅผ ๋ช
์์ ์ผ๋ก ๊ฒฉ๋ฆฌ
2086476b fix(desktop): rule ์คํ ์ด ํ
์คํธ์์ zustand persist rehydrate race condition ์์
2432e12f fix(config): CI bun ๋ฒ์ ์ 1.3.11๋ก ์
๋ฐ์ดํธ
5ab97247 fix(desktop): Tauri core mock์ Resource/Channel ์ถ๊ฐ
b7b85290 chore(desktop): ํ๋ก ํธ์๋ ์์กด์ฑ ์ต์ ๋ฒ์ ์
๋ฐ์ดํธ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
33534559 feat(desktop): Monaco ์๋ํฐ ์ปค์คํ
ํ
๋ง ๊ณตํตํ ๋ฐ ์ ์ฒด ์ ์ฉ
a7f2d5c6 fix(proxyapi_v2): ํ์์์ ํด๋ฐฑ ๋ ์ด์ค ์ปจ๋์
์์ ๋ฐ wildcard ๋ก์ง ์ ๋ฆฌ
7f637aca test(proxyapi_v2): ์์ผ๋์นด๋ ์บ์ ๊ณต์ ๋ฐ ๋ฉํธ๋ฆญ ์์ง ํ
์คํธ ์ถ๊ฐ
acf1c1be feat(proxyapi_v2): ์ธ์ฆ์ ์์ฑ ๋ฉํธ๋ฆญ, ํ์์์, ์์ผ๋์นด๋ ์บ์ ์ต์ ํ
0ba272f1 refactor(proxyapi_v2): ALPN ๋ฏธ๋ฌ๋ง ๋ก์ง ๊ณตํต ํจ์ ์ถ์ถ
1bc4aa34 refactor(proxyapi_v2): SPKI ๋น๊ต์์ ๋ถํ์ํ PEM ๋ผ์ด๋ํธ๋ฆฝ ์ ๊ฑฐ
56797f42 refactor(proxyapi_v2): SPKI ๋น๊ต ๊ฐํ ๋ฐ ์ถ๊ฐ ํ
์คํธ ์์ฑ
59ffcc8d refactor(proxyapi_v2): ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ KeyPair ์ค๋ณต ํ์ฑ ์ ๊ฑฐ ๋ฐ ์บ์ ํํธ ์ต์ ํ
2e9a8553 test(proxyapi_v2): ์ธ์ฆ์ ์์ ํ ํ
์คํธ ์ถ๊ฐ
da6bae79 feat(proxyapi_v2): Thundering herd ๋ฐฉ์ง โ moka try_get_with ์ ์ฉ
4a47d69d feat(proxyapi_v2): CA ๋ง๋ฃ ์๋ฐ ์ ์๋ ์ฌ์์ฑ ๋ฐ ํค-์ธ์ฆ์ ๋งค์นญ ๊ฒ์ฆ
7723279f feat(proxyapi_v2): Leaf ์ธ์ฆ์ ์ ํจ๊ธฐ๊ฐ 90์ผ๋ก ๋จ์ถ ๋ฐ CertEvent ์ด๋ฒคํธ ์์คํ
์ถ๊ฐ
6235cc1d refactor(scripting): ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ RwLock ๋จ์ํ ๋ฐ V8 ํ ์ํฅ
94a6a9a7 fix(scripting): V8 ์์ง ํ ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ค์
82547bfc feat(scripting): ScriptHandle์ loaded_path ์ถ์ ์ถ๊ฐ
1736ee3c fix(proxy_daemon): ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ ์คํฌ๋ฆฝํธ ์ํ ์ด๊ธฐ ๋๊ธฐํ ์ถ๊ฐ
13e89b26 fix(desktop): ์ค์ ๋๊ธฐํ ์ block_quic ํ๋ ๋๋ฝ ์์
7cd560e7 refactor(desktop): SettingsSection ๊ณตํต ๋ํผ ์ถ์ถ ๋ฐ QuickSettings ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ณํ
fd22a411 refactor(desktop): ์ค์ ์ปดํฌ๋ํธ ์น์
๋ณ ๋ถํด
d513eeee refactor(desktop): replay-dialog ํ
๋ถ๋ฆฌ ๋ฐ ๋ฆฐํธ ๊ฒฝ๊ณ ์ ๋ฆฌ
88344be8 refactor(desktop): ํ๋ก ํธ์๋ ์ฝ๋ ํ์ง ๊ฐ์
a97edd9a refactor(proxyapi_v2): RcgenAuthority::from_pem ํธ์ ์์ฑ์ ์ถ๊ฐ๋ก ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ ๊ฑฐ
868b3f80 fix: RcgenAuthority doc ์์ ๋๋ฝ ์ธ์ ์์
062b3a7e fix: rcgen 0.14 ๋ง์ด๊ทธ๋ ์ด์
๋๋ฝ ํ์ผ ์์ (tests, benches, examples, docs)
77094481 chore: rand 0.10, rcgen 0.14, reqwest 0.13 ๋ง์ด๊ทธ๋ ์ด์
8d4018ab chore: Rust ์์กด์ฑ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ
786fcaec refactor(proxyapi_v2): Serial Number ์์ฑ ๋ก์ง์ generate_serial_number ํฌํผ๋ก ์ถ์ถ
be97f036 feat(proxyapi_v2): ์๋ฅ ์ธ์ฆ์ Subject DN Country/State ๋ณต์ ์ถ๊ฐ
a7f5703d fix(proxyapi_v2): rcgen leaf ์ธ์ฆ์ Serial Number๋ฅผ 128๋นํธ๋ก ํ๋
ff29e4e9 test(proxyapi_v2): ์ธ์ฆ์ ๊ฒ์ฆ ๋ฐ TTL ๊ด๋ จ ์ ๋ ํ
์คํธ ์ถ๊ฐ
3a4ba629 refactor(proxyapi_v2): ๋ฏธ์ฌ์ฉ ํจ์ ๋ฐ import ์ ๋ฆฌ
3d49ff20 feat(proxyapi_v2): ์๋ฅ ์ธ์ฆ์ ๊ฒ์ฆ ๊ฒฝ๊ณ ๊ธฐ๋ฅ ์ถ๊ฐ
668adb6f feat(proxyapi_v2): CA/Leaf ์ธ์ฆ์ ์ ํจ๊ธฐ๊ฐ ๋ถ๋ฆฌ ๋ฐ ๋ง๋ฃ ์๋ ๊ฐ์ง
23d90e76 refactor: bounded_push ํฌํผ ์ถ์ถ, Default impl ์ถ๊ฐ, ํ
์คํธ ์ด๋
58a7b042 refactor: OpsStore์ Store ๋ก์ง ํตํฉํ์ฌ CLI/MCP ๊ฐ ์ค๋ณต ์ ๊ฑฐ
dba4e5fa feat: Quick Settings์ Block QUIC ์ต์
์ถ๊ฐ
f7064fba refactor(desktop): ์ฝ๋ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์
a85ed41a feat(desktop): ์ปจํ
์คํธ ๋ฉ๋ด์ ๊ท์น ์ถ๊ฐ ์ต์
ํ์ฅ ๋ฐ ๋ค์ด์ผ๋ก๊ทธ ํจํด ํต์ผ
e6f61e29 fix(desktop): ๊ณ ๊ธ ๋ฐ๋ณต ๋ชจ๋ฌ์์ ๊ธด URL์ด ๋ ์ด์์์ ๊นจ๋จ๋ฆฌ๋ ๋ฒ๊ทธ ์์
86962000 fix(desktop): ๋ค๋ฅธ ํ์์ผ๋ก ๋ณต์ฌ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์๋ ๋ฒ๊ทธ ์์
5a968dfd feat(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ์ ์์ฒญ ์๊ฐ(Timestamp) ์ปฌ๋ผ ์ถ๊ฐ
b5096cfe fix(desktop): ํด๋ผ์ด์ธํธ ์
์ ๋ก์ปฌ/์๊ฒฉ ๊ตฌ๋ถ์ผ๋ก ๋ณ๊ฒฝ
e1fb4a5d chore: pre-commit ํ
์ถ๊ฐ (Rust ํฌ๋งท, JS/TS ๋ฆฐํธ/ํฌ๋งท, i18n ๋๊ธฐํ ์ฒดํฌ)
79aec9ab chore(desktop): i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์
๋ฐ์ดํธ
9b876ead refactor(desktop): ์ฝ๋ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์
aa31c67a chore(desktop): i18n ์นดํ๋ก๊ทธ ์
๋ฐ์ดํธ
c4f3ce1e refactor(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ์ TanStack Table๋ก ๋ง์ด๊ทธ๋ ์ด์
c61dca7d test(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ ํต์ฌ ๋ก์ง ์ ๋ ํ
์คํธ ์ถ๊ฐ
e2f57a7e feat(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ์์ ๋ชจ๋ฐ์ผ/ํ๋ธ๋ฆฟ/๋ฐ์คํฌํฑ ๋๋ฐ์ด์ค ๊ตฌ๋ถ ํ์
1fbb0a60 feat(desktop): ์ฟผ๋ฆฌ ํํฐ ์๋ํฐ UX ๊ฐ์
825f9d61 fix(desktop): ํธ๋ํฝ ๋ถ์ ํญ์์ ์๊ฐ์ด Invalid Date๋ก ํ์๋๋ ๋ฒ๊ทธ ์์
33dc6752 style: ๋งํฌ๋ค์ด ํ์ผ ํฌ๋งท ์์
5840ba18 refactor: ์ฝ๋ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ ๋ฐ ๊ธฐ์กด ํ
์คํธ ์คํจ ์์
da70ccb5 test: ์คํ ์ด ๋๊ธฐํ ํจํด ๋ฆฌํฉํ ๋ง ํ
์คํธ ์ถ๊ฐ
0ae468be refactor: ์คํ ์ด-๋ฐ๋ชฌ ๋๊ธฐํ ํจํด ํต์ผ
4786ac0c fix: ์ฑ ์์ ์ ๊ธฐ๋ณธ ํจ์ค์ค๋ฃจ ๋๋ฉ์ธ ๋นํ์ฑํ ์ํ๊ฐ ๋ฐ๋ชฌ์ ๋ฐ์๋์ง ์๋ ๋ฒ๊ทธ ์์
36f63e66 refactor: dead code ์ ๊ฑฐ ๋ฐ ์ฝ๋ ํ์ง ๊ฐ์
7a696987 perf: ํค ํ์
๋ณ leaf ํค ์บ์ ๋์
์ผ๋ก RSA ํค ์์ฑ ๋น์ฉ ์ ๊ฑฐ
25f50c3e refactor: ํค ์์ฑ ๋ก์ง ์ค๋ณต ์ ๊ฑฐ ๋ฐ dead code ์ ๋ฆฌ
c7d52a51 feat(tls): ์ธ์ฆ์ ํค ํ์
๋ฏธ๋ฌ๋ง ๋ฐ ClientHello ๋ฏธ๋ฌ๋ง ๊ตฌํ
803dc9fc docs: CLI ๋ฌธ์์ client-certificate, ssl-proxying-list ์์ ์ถ๊ฐ
2d41d961 fix(cli): ๋๋ฝ๋ settings ์๋ธ์ปค๋งจ๋ 2๊ฐ ์ถ๊ฐ
d3568bff feat(cli): --version, --output json, completion, daemon ์ฐ๊ฒฐ ๊ฐ์
8a332191 feat(cli): install-skills/uninstall-skills ์ปค๋งจ๋ ์ถ๊ฐ
3b09b014 docs: rspress ๋ฌธ์์ CLI ๊ฐ์ด๋ ์ถ๊ฐ (ํ/์)
7dcca1e0 feat: Claude ์คํฌ ์ปค๋งจ๋ + CLI ํตํฉ ํ
์คํธ ์ถ๊ฐ
c598c094 fix: ๋น๋ ์คํฌ๋ฆฝํธ์์ cheolsu โ cheolsu-tui ๋ฐ์ด๋๋ฆฌ ์ด๋ฆ ๋ฐ์
fc8be66d refactor: CLI ๋ฐ์ด๋๋ฆฌ๋ฅผ cheolsu๋ก, TUI๋ฅผ cheolsu-tui๋ก ํตํฉ
4bd295dc docs: CLAUDE.md์ CLI ์๋ธ์ปค๋งจ๋ ๊ฐ์ด๋๋ผ์ธ ์ถ๊ฐ
6b49239d feat(cli): MCP์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ CLI ํฌ๋ ์ดํธ ์ถ๊ฐ
95d7ae2f refactor: cheolsu_ops ํตํฉ ๋ฆฌ๋ทฐ ๋ฐ์ ์ ๋ฆฌ
8074fb0e refactor(mcp): ๋๋จธ์ง ๋๊ตฌ ์ ์ฒด๋ฅผ cheolsu_ops thin wrapper๋ก ๋ณํ
e277b433 refactor: cheolsu_ops์ ๋๋จธ์ง ๋๊ตฌ ๋ชจ๋ 7๊ฐ ์ถ๊ฐ
01765f4a refactor(mcp): CRUD ๋๊ตฌ 6๊ฐ๋ฅผ cheolsu_ops thin wrapper๋ก ๋ณํ
1cc376d8 refactor: cheolsu_ops์ CRUD ๋๊ตฌ 6๊ฐ ๋ชจ๋ ์ถ๊ฐ
5643c633 refactor(mcp): settings ๋๊ตฌ๋ฅผ cheolsu_ops thin wrapper๋ก ๋ณํ
b002dd7e refactor: MCP/CLI ๊ณต์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ cheolsu_ops ํฌ๋ ์ดํธ ์์ฑ
e78be6b4 fix(desktop): ํธ๋ํฝ ๋ถ์ duration์ด ๋๋
ธ์ด๋ฅผ ๋ฐ๋ฆฌ์ด๋ก ์๋ชป ํ์ํ๋ ๋ฒ๊ทธ ์์
0264fc27 fix(desktop): next-themes classList.add() InvalidCharacterError ์์
8d28ec57 docs: ๋ก๋๋งต ๋ฌธ์๋ฅผ rspress์์ ๋ด๋ถ ๋ฌธ์(docs/)๋ก ์ด๋
9c60c0de refactor(tui): format_size_boundary ํ
์คํธ์์ ์ค๋ณต assertion ์ ๊ฑฐ
be3c8d87 test(tui): TUI ํฌ๋ ์ดํธ ์ ๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ํ์ถฉ
9da8eabd refactor(desktop): HAR ์ํ ์ฝ๋ ํ
์คํธ์์ buildHarLog ํธ์ถ ํ์ ์ต์ ํ
fc428cd2 test(desktop): ํ๋ก ํธ์๋ ์ ๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ํ์ถฉ
423a768c fix(desktop): Alert destructive variant ๋ฐฐ๊ฒฝ์์ ๊ธฐ์กด ์คํ์ผ๊ณผ ์ผ์น์ํด
7c442ece refactor(desktop): shadcn Alert/Progress ์ปดํฌ๋ํธ ์ถ๊ฐ ๋ฐ ์ปค์คํ
div ๊ต์ฒด
58dfe78c fix(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ ์
์์ง ์ ๋ ฌ ํต์ผ
8e44fe8b fix(desktop): API ๊ฒ์ฆ ๋ฆฌํฌํธ ์์ฝ ํต๊ณ ๊ฐ์ด๋ฐ ์ ๋ ฌ
47057ff7 chore(desktop): i18n ์นดํ๋ก๊ทธ ์์ค ๋ผ์ธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
08cd3189 refactor(desktop): ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ ํ์
์์ ์ฑ ๊ฐํ, ๋ถํ์ํ ๋ฐ๋ณต ๊ณ์ฐ ์ ๊ฑฐ
152c373c refactor(desktop): ์บ์ ์ ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ โ ๋ฐฐ์น ์ญ์ ๋ฐ ์ ํธ ํจ์ ์ฌ์ฌ์ฉ
7b358c7d feat(desktop): ์บ์ ์ฉ๋ ํ๊ณ ์ค์ ๋ฐ ์บ์ ์ญ์ ๊ธฐ๋ฅ ์ถ๊ฐ
131d607f fix(desktop): Vite 8 MPA ์ค์ ์ผ๋ก ํธ๋ ์ด ํจ๋ 404 ์๋ฌ ์์
a6558874 refactor(desktop): ์ฝ๋ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ โ ํ
๋ง ํค ์ค๋ณต ์ ๊ฑฐ, ๋ฏธ์ฌ์ฉ ์ฝ๋ ์ ๋ฆฌ, ์ฑ๋ฅ ๊ฐ์
3d16ccf1 feat(desktop): ํํฐ ํ๋ฆฌ์
์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
3f563d05 feat(desktop): ์ปค์คํ
๋คํฌ ํ
๋ง 5์ข
์ถ๊ฐ (Dracula, Nord, Monokai, Solarized Dark, GitHub Dark)
e3c59b3a test: ๋ฆฌํฉํ ๋ง๋ Rust ์ฝ๋ ๋จ์ ํ
์คํธ ์ถ๊ฐ
911ff66c fix: oxfmt ํฌ๋งท ์์
33d01690 test: ํ๋ก ํธ์๋ ๋ฆฌํฉํ ๋ง ์ฝ๋์ ๋ํ ๋จ์ ํ
์คํธ ์ถ๊ฐ
79287152 refactor(analytics): ๋๊ท๋ชจ analytics.rs ํ์ผ์ ๋
ผ๋ฆฌ์ ์๋ธ๋ชจ๋๋ก ๋ถํ
fa4db709 fix: i18n ์นดํ๋ก๊ทธ ์
๋ฐ์ดํธ
a9562fa4 fix: oxfmt ํฌ๋งท ์์
27984765 refactor(network-dashboard): ์ปค์คํ
ํ
์ผ๋ก ์ํ ๋ก์ง ๋ถ๋ฆฌ
4402f268 refactor(validator): ContractViolation ์์ฑ ํฌํผ ํจ์ ์ถ์ถ ๋ฐ ํ์
๋ณ ๊ฒ์ฆ ๋ถ๋ฆฌ
7bd3681f refactor(api): proxy.ts API ๋ํผ๋ฅผ ๋๋ฉ์ธ๋ณ ํ์ผ๋ก ๋ถ๋ฆฌ
2247b766 refactor(mocks): mock-data.ts๋ฅผ ๋๋ฉ์ธ๋ณ ํ์ผ๋ก ๋ถ๋ฆฌ
7b151eaf refactor: ws-content-view๋ฅผ ํ๋กํ ์ฝ๋ณ ๋ชจ๋๋ก ๋ถ๋ฆฌ
ba47b47f fix: ๋ฆฌ๋ทฐ ๋ฐ์ โ ๋น times ๋ฒกํฐ์ ๋ํ division by zero ๋ฐฉ์ด ์ถ๊ฐ
3bee6736 refactor: ํ๋ก๋์
์ฝ๋์ .unwrap() ํธ์ถ์ ์์ ํ ์๋ฌ ์ฒ๋ฆฌ๋ก ๊ต์ฒด
623e9258 fix: ๋ฆฌ๋ทฐ ๋ฐ์ โ ๋ถํ์ํ Controller ์ ๊ฑฐ ๋ฐ ํ๊ตญ์ด ๋ฒ์ญ ์ถ๊ฐ
e4c0ce74 refactor(intercept-rule-form): rule-form-dialog๋ฅผ ์ก์
ํ์
๋ณ ํ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ
71c8d619 refactor: HeaderEntry ์ธํฐํ์ด์ค ํตํฉ ๋ฐ ์ค๋ณต ์ ๊ฑฐ
3383cb63 fix: oxfmt ํฌ๋งท ์์
6a5a5ae1 refactor(App): ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ปค์คํ
ํ
์ผ๋ก ๋ถ๋ฆฌ
46edae8b refactor(websocket): ์ค๋ณต๋ WebSocketConfig ์ค์ ์ฝ๋๋ฅผ ํฌํผ ํจ์๋ก ์ถ์ถ
7868ce56 refactor(proxy_v2_models): Clippy ๊ฒฝ๊ณ ์์
da05cffb fix(proxyapi_v2): ๋ฆฌ๋ทฐ ๋ฐ์ โ Duration ์์ ํต์ผ, ํ์์์ ํ
์คํธ ์ถ๊ฐ
2750b409 fix(config): macOS ํ
์คํธ ๋ฐ์ด๋๋ฆฌ OpenSSL rpath ์ค์ ์ถ๊ฐ
ce3297b4 refactor: ์ฑ๋ ์ฉ๋ ๋งค์ง ๋๋ฒ๋ฅผ ๋ช
๋ช
๋ ์์๋ก ์ถ์ถ ๋ฐ ๋ฌธ์ํ
5cd64cf1 fix(proxy_daemon): ๋ฐฉ์ด์ ์ฝ๋ฉ ๊ฐํ ๋ฐ ์ข
๋ฃ ํ์์์ ํ๋
55d3a685 feat(proxyapi_v2): TCP ์ฐ๊ฒฐ ํ์์์ ๋ฐ ์ฐ๊ฒฐ ํ ์ ํ ์ถ๊ฐ
c1c96cfc fix(proxy_daemon): simplify ๋ฆฌ๋ทฐ ๋ฐ์ โ Ordering ๊ฐํ, ๋นํธ ๋ ์ด์์ ๋ฌธ์ํ
ea9e751d refactor(proxy_daemon): hot-path ์ต์ ํ โ QuickSettings lock-free ์ ํ, Regex ์บ์ ๊ฐ์
3e6a718d fix(proxyapi_v2): simplify 2์ฐจ ๋ฆฌ๋ทฐ ๋ฐ์ โ flush ์กฐ๊ฑด ๋ฒ๊ทธ, double snapshot, O(n*m) ์์
5180dd57 perf(proxyapi_v2): hot-path ํ์ผ ์ ์ฅ debounce โ dirty flag ๊ธฐ๋ฐ ์ง์ฐ ์ ์ฅ
cd827c3d refactor(proxyapi_v2): simplify ๋ฆฌ๋ทฐ ๋ฐ์ โ ์ค๋
์ท ํฌํผ, double lookup, TOCTOU ์์
14fa4bc0 fix(proxyapi_v2): TLS Passthrough race condition ํด๊ฒฐ โ RwLock์ DashMap์ผ๋ก ๊ต์ฒด
69344ed9 fix: simplify ๋ฆฌ๋ทฐ ๋ฐ์ โ lock contention, dirty tracking, ์ค๋ณต ํธ์ถ ์์
ce4742d5 fix: i18n ์นดํ๋ก๊ทธ ์
๋ฐ์ดํธ โ Never Passthrough ๋ฐ ๊ฒ์ ํํฐ ๋ฒ์ญ ์ถ๊ฐ
ce35b1dc feat(desktop): Never Passthrough ์ค์ UI ์ถ๊ฐ
c515bfd3 feat(desktop): TLS Passthrough ๋ชฉ๋ก ๊ฒ์ ํํฐ ์ถ๊ฐ
58a75705 feat(desktop): Never Passthrough Tauri IPC ์ปค๋งจ๋ ์ถ๊ฐ
064d48f0 feat(proxyapi_v2): Never Passthrough ๋๋ฉ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ
fe215f92 refactor(desktop): HTTP_METHODS/STATUS_CODES๋ฅผ @/shared๋ก ์ด๋ โ FSD ์๋ฐ ์์
b61c6b28 fix: i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
0c5f4d25 refactor(desktop): formatBytes ์ค๋ณต ์ ๊ฑฐ โ analytics-dashboard 2๊ฐ ํ์ผ
cc3f67cb fix(desktop): formatBytes TB ์ด์ ๊ฐ์์ undefined ํ์๋๋ ๋ฒ๊ทธ ์์
5d16b293 fix: i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
4da62914 refactor(desktop): HTTP_METHODS ์ค๋ณต ์ ๊ฑฐ โ ์ค์ ์์ ์ฌ์ฉ
7f1287de refactor(desktop): TYPE_COLORS ์ค๋ณต ์ ๊ฑฐ โ ๊ณต์ ํ์ผ๋ก ์ถ์ถ
fa78ac23 refactor(desktop): formatSize ์ค๋ณต ์ ๊ฑฐ โ ๊ธฐ์กด formatBytes ์ ํธ๋ก ๋์ฒด
66896110 refactor: formatTime/formatDuration ๊ณต์ ์ ํธ๋ก ์ถ์ถ โ 8๊ฐ ํ์ผ ์ค๋ณต ์ ๊ฑฐ
2a5a42cf fix: i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
9acbc5b6 fix: oxfmt ํฌ๋งท ์์
14b73116 fix: biome ํฌ๋งท ์์ โ ๋ฌธ์ ๋ฐ ํ๋ก ํธ์๋ ํ์ผ
4313cbc0 refactor: simplify ๋ฆฌ๋ทฐ ๋ฐ์ โ ์ค๋ณต ์ ๊ฑฐ ๋ฐ ํ์
์ ๋ฆฌ
ccacac4a feat: gRPC ๋์๋ณด๋ ๊ตฌํ โ ํ๋ก ํธ์๋ ์ ์ฉ gRPC ํธ๋ํฝ ๋ทฐ์ด
002504c3 docs: ๋ฆฌ๋ทฐ ๋ฐ์ โ TUI ์น์
์ถ๊ฐ, gRPC ๋ฌธ์, ๋ก๋๋งต ์
๋ฐ์ดํธ
8b29c9ce docs: ๋๋ฝ๋ ๊ธฐ๋ฅ ๋ฌธ์ 9๊ฐ ์ถ๊ฐ ๋ฐ ์ฌ์ด๋๋ฐ/๋ก๋๋งต ์
๋ฐ์ดํธ
b318c279 fix: i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
9201cd69 fix: oxfmt ํฌ๋งท ์์ ๋ฐ jamf.payhere.in ํ
์คํธ ์ ๊ฑฐ
ff646cbf refactor: simplify ๋ฆฌ๋ทฐ ๋ฐ์ โ ์ฝ๋ ํ์ง ๋ฐ ํจ์จ์ฑ ๊ฐ์
c66fe8b2 refactor: SharedTlsConfig์ Arc<RwLock>์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋ฐํ์ ๊ท์น ์์ ๊ฐ๋ฅํ๊ฒ
6ed207bd feat: TLS ํ์ต ๊ธฐ๋ฐ ํด๋ฐฑ ๋ฐ ์ค์ ๋์ ๊ด๋ฆฌ ์ถ๊ฐ
6b60c419 chore(desktop): Vite 8 ์
๊ทธ๋ ์ด๋
c7ae6e30 feat(desktop): k6, Playwright, Vitest ์ฝ๋ ๋ด๋ณด๋ด๊ธฐ ์ถ๊ฐ
f4febfc0 test: ์ฝ๋ ๋ด๋ณด๋ด๊ธฐ ๋ฐ TLS ์ธ์ฆ์ ๋ทฐ ํ
์คํธ ์ถ๊ฐ
79bc0c4b refactor: ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ โ ์ธ์ฆ์ ํ์ฑ ์ค๋ณต ์ ๊ฑฐ ๋ฐ ๊ตฌ์กฐ ์ ๋ฆฌ
2caa5ded feat: ์๋ฒ TLS ์ธ์ฆ์ ์์ธ ๋ทฐ ์ถ๊ฐ (๋ฐฑ์๋ + ํ๋ก ํธ์๋)
8904fee5 feat(desktop): PowerShell, Node.js Fetch ์ฝ๋ ๋ด๋ณด๋ด๊ธฐ ์ถ๊ฐ
fac3086b feat(tui): AI ํธ๋ํฝ ๋ถ์ ํญ ๊ตฌํ
22695990 fix: oxlint ++ ์ฐ์ฐ์ ์๋ฌ ์์
04a4b03e fix: i18n ๋๋ฝ ํ๊ตญ์ด ๋ฒ์ญ ์ถ๊ฐ ๋ฐ rebase ์ถฉ๋ ํด๊ฒฐ
a4acbd37 feat(desktop): AI ํธ๋ํฝ ๋ถ์ ๋์๋ณด๋ ๊ตฌํ
27f6f3f3 fix: i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ์ฐธ์กฐ ์
๋ฐ์ดํธ
726dd697 style: GraphQL ๋ทฐ์ด ์ฝ๋ ํฌ๋งทํ
์์
583d0305 fix: GraphQL ์ฟผ๋ฆฌ ์ฃผ์ ํ์ฑ ๊ฐ์ ๋ฐ ํ
์คํธ ์ฝ๋ ์ถ๊ฐ
cc664981 feat: GraphQL ์ ์ฉ ๋ทฐ์ด/๋์๋ณด๋ ๊ธฐ๋ฅ ๊ตฌํ
9bb8cc20 fix: AI ํธ๋ํฝ ๋ถ์ ์ฝ๋ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ ๋ฐ ํ
์คํธ ์ถ๊ฐ
706689b1 feat: AI ํธ๋ํฝ ๋ถ์ ๊ธฐ๋ฅ ๊ตฌํ
40242acc fix: ํ๋ก์ ๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ ์ฃผ์๋ฅผ 0.0.0.0์ผ๋ก ๋ณ๊ฒฝ
2e07e359 fix(tui): ๋ธ๋ ์ดํฌํฌ์ธํธ ํธ์ง ํผ์์ Shift+Enter๋ก ๊ฐํ ์
๋ ฅ ์ง์
5563c1b8 feat(tui): ๋ธ๋ ์ดํฌํฌ์ธํธ ์์ ํ ์ ๋ฌ(modify_and_forward) TUI ๊ตฌํ
e41fb357 fix(desktop): ๋ธ๋ ์ดํฌํฌ์ธํธ ํธ์ง ๋ค์ด์ผ๋ก๊ทธ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์
117133cd style(desktop): ๋ธ๋ ์ดํฌํฌ์ธํธ ์์ ํ ์ ๋ฌ UI ํ๊ตญ์ด ๋ฒ์ญ ์ถ๊ฐ
ad6adc02 feat(desktop): ๋ธ๋ ์ดํฌํฌ์ธํธ ์์ ํ ์ ๋ฌ(modify_and_forward) UI ๊ตฌํ
e761d0bb fix(desktop): ๋คํธ์ํฌ ํ
์ด๋ธ ํค๋-ํ ๊ฐ ์ปฌ๋ผ ์ ๋ ฌ ๋ถ์ผ์น ์์
1a38d2b6 fix(desktop): ๋คํธ์ํฌ ํญ ์ ํ ์ ๊ฐ์ํ ํ
์ด๋ธ ๋ ๋๋ง ์ ๋๋ ๋ฌธ์ ์์
6c4be3c3 fix: MapRemote ์๋ SSL ์ธํฐ์
ํธ ๊ฐ์ ๋ฐ UI ํ๊ทธ ํ์
854f8bd6 fix: MapRemote ๊ท์น์ ๋์ ํฌํธ์ ๋ํ ์๋ SSL ์ธํฐ์
ํธ
24cfa1fb fix: TLS ์ธํฐ์
ํธ ์ฑ๊ณต ์ ์ด์ ์คํจ ๊ธฐ๋ก ํด๋ฆฌ์ด
6426c302 refactor: upgrade ๋ก์ง ์ค๋ณต ์ ๊ฑฐ ๋ฐ handle_tls_passthrough ๋ฐ๋ ์ฝ๋ ์ญ์
a012f3ef fix: SSL Proxying ๋ช
์์ ์ธํฐ์
ํธ ์ ์๋ TLS ๋ฐ์ดํจ์ค ๋ฌด์
9805cdaa style(desktop): i18n ์นดํ๋ก๊ทธ ํฌ๋งท ์์
e79ddf8a fix(desktop): API ๊ฒ์ฆ(Contract Testing) ํ์ด์ง ํ๊ตญ์ด ๋ฒ์ญ ์ถ๊ฐ
5362b587 fix(desktop): API ๊ฒ์ฆ ํ์ด์ง ๋ ์ด์์์ ๋ค๋ฅธ ํ์ด์ง์ ์ผ๊ด์ฑ ์๊ฒ ์์
b255d1f3 fix: proxy-store ํ
์คํธ ์์ ๋ฐ i18n ํฌ๋งท ์์
e55df700 fix(frontend): ๋ฆฌ๋ทฐ ๋ฐ์ โ ํฌํธ ์ ํจ์ฑ ๊ฒ์ฆ, proxy-store ์ ๋ฆฌ
86f84ca5 chore: package.json์์ tauri:headless ์คํฌ๋ฆฝํธ ์ ๊ฑฐ
d26b8214 feat(frontend): ์ค์ ์์ ํ๋ก์ ํฌํธ ๋ณ๊ฒฝ ๊ธฐ๋ฅ ์ถ๊ฐ
7a3aa789 docs: README์์ CLI headless ๋ชจ๋ ๊ด๋ จ ๋ด์ฉ ์ ๊ฑฐ
4d6a15bb fix: ๋ฆฌ๋ทฐ ๋ฐ์ โ ScriptStatus broadcast ํตํฉ, Basic auth case-insensitive ์ฒ๋ฆฌ
a29d8d54 chore: cargo ํ
์คํธ/๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ package.json์ ์ถ๊ฐ
ada11267 refactor(rust): ๋์ผ ๋ชฉ์ ์ฝ๋ ์ ๋ฆฌ โ broadcast ํฌํผ, auth ํ์ฑ, ์์ถ ์ฒดํฌ
4737bbf6 style(frontend): i18n ์นดํ๋ก๊ทธ ์ค ๋ฒํธ ๋๊ธฐํ
5a3f1f2b fix: 2์ฐจ ๋ฆฌ๋ทฐ ๋ฐ์ โ useShallow, ์ํ $ref ๋ณดํธ, i18n ๋๋ฝ ๋ฒ์ญ
10bb48f4 feat: ๋ฆฌ๋ทฐ ๋ฐ์ โ RequestInfo named struct, $ref ์ง์, required ๊ฒ์ฆ, ์์ฒญ body ๊ฒ์ฆ
1a8e290b fix: ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ ํ์ง ๋ฐ ์ฑ๋ฅ ๊ฐ์
3dd54f00 feat(frontend): Contract Testing UI ๊ตฌํ
f6c93a26 feat(desktop): Tauri IPC ์ปค๋งจ๋ ๋ฐ ์ด๋ฒคํธ ์ฐ๊ฒฐ
11e814eb feat(proxy_daemon): ContractValidator ์๋น์ค ๋ฐ IPC ์ปค๋งจ๋ ๊ตฌํ
1c033d56 feat(proxy_v2_models): Contract Testing ๊ฒ์ฆ ํ์
๋ฐ ๋ก์ง ์ถ๊ฐ
d7432256 style(frontend): media-preview.tsx ํฌ๋งท ์์
0cd65dc1 fix(frontend): ๊ธฐ์กด TypeScript ์๋ฌ ์์
5eae2e19 refactor(frontend): FSD ์ํคํ
์ฒ ์๋ฐ ์์
f09188bd fix(proxy): ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ UI ์ถ๊ฐ, ๊ฒ์ฆ ๊ฐํ, ํ
์คํธ ์ถ๊ฐ
ee3d8432 feat(proxy): ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ชจ๋ ๊ตฌํ
bba7a5a5 docs(document): ํ๋ก์ ์ฐ๊ฒฐ ๋ก๋๋งต์์ ๊ตฌํ ์๋ฃ๋ ๊ธฐ๋ฅ ์ ๋ฆฌ
f75db0de fix(proxy_v2_models): ์ธ๋ผ์ธ SVG ํฌํจ๋ HTML/JS๊ฐ Image๋ก ์๋ชป ๊ฐ์ง๋๋ ๋ฒ๊ทธ ์์
0591eef3 fix(mcp): ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ RPS ๊ณ์ฐ, body ํ๋ณ, HAR ๋น๋, ์
๋ ฅ ๊ฒ์ฆ
9c903bc8 test(mcp): SSE, Server Replay, ํฌํผ ํ
์คํธ ์ถ๊ฐ
1d251ab7 feat(mcp): ์ ๋๊ตฌ ๋ฑ๋ก ๋ฐ generate_openapi_spec ๋ฏธ๋ฑ๋ก ์์
ffc663c7 feat(mcp): MCP ๋๊ตฌ 15๊ฐ ์ถ๊ฐ โ SSE, Server Replay, Settings, Export ๋ฑ
94ebe8a4 feat(mcp): Store์ SSE ์ด๋ฒคํธ ๋ฐ Server Replay ์ ์ฅ์ ์ถ๊ฐ
46f1d2fc fix: ํ
์คํธ ์ฝ๋์ ๋๋ฝ๋ proxy_auth_user ํ๋ ์ถ๊ฐ ๋ฐ ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ
0da2c787 style: oxfmt ํฌ๋งท ์์ (roadmap-qa-enterprise.md ํ
์ด๋ธ ์ ๋ ฌ)
f4c6746b fix: ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ RequestState.client_addr ์ค๋ณต ์ ๊ฑฐ ๋ฐ IPv6 ํฌํธ ํ์ฑ ๊ฐ์
83076597 docs: ํด๋ผ์ด์ธํธ ํธ๋ํฝ ๋ถ๋ฆฌ ๊ตฌํ ์๋ฃ ๋ฐ์ ๋ฐ i18n ์
๋ฐ์ดํธ
4bdac1e8 feat(desktop): ํด๋ผ์ด์ธํธ ํ๊ทธ ์ค์ UI ์ถ๊ฐ
c6f2ae3f feat(desktop): ํด๋ผ์ด์ธํธ๋ณ ํธ๋ํฝ ํํฐ๋ง ๊ธฐ๋ฅ ์ถ๊ฐ
d194755f feat(proxy_daemon): ํด๋ผ์ด์ธํธ ํธ๋ํฝ ๋ถ๋ฆฌ๋ฅผ ์ํ proxy_auth_user ์ง์
f8b23914 fix: ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ โ ์์ ์ฑ ๋ฐ ํ์
์ ํ์ฑ ๊ฐ์
88b7cc98 refactor: ์ปฌ๋ผ ๊ฐ์์ฑ์ Tauri Store๋ก ์ด๋ + ์ค์ ํ์ด์ง UI ์ถ๊ฐ
33a5e2fe feat: ๋คํธ์ํฌ ํ
์ด๋ธ ์ปฌ๋ผ ํ ๊ธ ๊ธฐ๋ฅ ์ถ๊ฐ
a4b64cc6 fix: i18n ์นดํ๋ก๊ทธ ํ๋ฒํธ ๋๊ธฐํ
8cee2e80 refactor: Timing ํญ์์ DNS/TCP/TLS ๊ตฌ๊ฐ ์ ๊ฑฐ, TTFB + Content Download๋ง ํ์
2254cf16 fix: Timing์์ TTFB์ Content Download ๊ตฌ๊ฐ ๋ถ๋ฆฌ
3fb45f06 fix: WebSocket/SSE ์์ธ ํจ๋ ์ด๋ฆผ ์ ์ปค๋ฅ์
ํจ๋ ๋๋น ๋ณ๊ฒฝ ๋ฐฉ์ง
651f8ae0 fix: oxfmt ํฌ๋งท ์์ (sse-dashboard, table-row, sse-message-detail)
c8c23aa0 feat: SSE UI ๋ทฐ์ด, Timing ํญ, ํด๋ผ์ด์ธํธ๋ณ ํธ๋ํฝ ๋ถ๋ฆฌ ์ถ๊ฐ
1eabfd41 feat(desktop): gRPC Proto ๋์ฝ๋ฉ ์ฐ๋ โ .proto ๋ฑ๋ก ์ ํ๋๋ช
ํ์
15224170 feat(proxy_daemon): ์กฐ๊ฑด๋ถ Throttle ์๋ต ์คํธ๋ฆผ ์๋ ์ ํ ์ ์ฉ
2c229639 fix: i18n ์นดํ๋ก๊ทธ ํ๋ฒํธ ๋๊ธฐํ ๋ฐ ๋๋ฝ ๋ฒ์ญ ์ถ๊ฐ
bc7c2c58 feat(desktop): Waterfall์ ํฌ๋กฌ DevTools ์คํ์ผ ์๊ฐ์ถ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝ
e4f684ee fix(desktop): handleExportOpenApi ๋ณ์ ์ด๊ธฐํ ์์ ์ค๋ฅ ์์
3e97572f fix(desktop): OpenAPI ๋ด๋ณด๋ด๊ธฐ ๋์ ์ฐ์ ์์ ์ ์ฉ
f334dbce feat(desktop): gRPC Proto ํ์ผ ๊ด๋ฆฌ UI ์ถ๊ฐ
a8be3873 feat(desktop): OpenAPI ์คํ ๋ด๋ณด๋ด๊ธฐ UI ์ถ๊ฐ
0a9000dd fix(desktop): Waterfall ๋ฐ ์ฐจํธ๋ฅผ ๋ก๊ทธ ์ค์ผ์ผ ์๋ ๋น์จ๋ก ๊ฐ์
e1edaf11 fix: CI ์คํจ ์์ (ํ
์คํธ ์ปดํ์ผ ์๋ฌ + README ํฌ๋งท)
f4518931 feat(proxy_daemon): gRPC ๋์ฝ๋ฉ ๊ฐํ๋ฅผ ์ํ ProtoRegistry ์ถ๊ฐ
e0914ec7 feat(proxy_v2_models): OpenAPI 3.0 ์คํ ์๋ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ
ca2c5732 feat(proxy_v2_models): ์ฑ๋ฅ Waterfall ํ์ด๋ฐ ์ธก์ ๋ฐ ์๊ฐํ ์ถ๊ฐ
0b53c782 feat(proxy_daemon): ์กฐ๊ฑด๋ถ Throttle ์ธํฐ์
ํธ ์ก์
์ถ๊ฐ
a9064c2b docs: v0.1.0 ๋ฆด๋ฆฌ์ฆ ๋
ธํธ ์
๋ฐ์ดํธ ๋ฐ ์ค์น ๊ฐ์ด๋ ์ถ๊ฐ
db73dfba fix(desktop): ๋ฆด๋ฆฌ์ฆ ๋น๋์์ unused_mut ๊ฒฝ๊ณ ๋ก ์ธํ CI ์คํจ ์์