# OmniRoute โ€” Dashboard Features Gallery (ํ•œ๊ตญ์–ด) ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../../../guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡น [am](../../../am/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฆ [ar](../../../ar/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฟ [az](../../../az/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฌ [bg](../../../bg/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฉ [bn](../../../bn/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฆ [bs](../../../bs/docs/guides/FEATURES.md) ยท ๐Ÿ‡จ๐Ÿ‡ฟ [cs](../../../cs/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ฐ [da](../../../da/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ช [de](../../../de/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ท [el](../../../el/docs/guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡ธ [es](../../../es/docs/guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡ช [et](../../../et/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ท [fa](../../../fa/docs/guides/FEATURES.md) ยท ๐Ÿ‡ซ๐Ÿ‡ฎ [fi](../../../fi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ซ๐Ÿ‡ท [fr](../../../fr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ช [ga](../../../ga/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [gu](../../../gu/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ha](../../../ha/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฑ [he](../../../he/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [hi](../../../hi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ญ๐Ÿ‡ท [hr](../../../hr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ญ๐Ÿ‡บ [hu](../../../hu/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฒ [hy](../../../hy/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฉ [id](../../../id/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ig](../../../ig/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡น [it](../../../it/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฏ๐Ÿ‡ต [ja](../../../ja/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ช [ka](../../../ka/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [km](../../../km/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [kn](../../../kn/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡น [lt](../../../lt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ป [lv](../../../lv/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ml](../../../ml/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [mr](../../../mr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡พ [ms](../../../ms/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡น [mt](../../../mt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡ฒ [my](../../../my/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ต [ne](../../../ne/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฑ [nl](../../../nl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ด [no](../../../no/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [or](../../../or/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [pa](../../../pa/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ญ [phi](../../../phi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ฑ [pl](../../../pl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡น [pt](../../../pt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ท [pt-BR](../../../pt-BR/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡ด [ro](../../../ro/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡บ [ru](../../../ru/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ฐ [si](../../../si/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฐ [sk](../../../sk/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฎ [sl](../../../sl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡ธ [sr](../../../sr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ช [sv](../../../sv/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ช [sw](../../../sw/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ta](../../../ta/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [te](../../../te/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ญ [th](../../../th/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ท [tr](../../../tr/docs/guides/FEATURES.md) ยท ๐Ÿ‡บ๐Ÿ‡ฆ [uk-UA](../../../uk-UA/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ฐ [ur](../../../ur/docs/guides/FEATURES.md) ยท ๐Ÿ‡บ๐Ÿ‡ฟ [uz](../../../uz/docs/guides/FEATURES.md) ยท ๐Ÿ‡ป๐Ÿ‡ณ [vi](../../../vi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [yo](../../../yo/docs/guides/FEATURES.md) ยท ๐Ÿ‡จ๐Ÿ‡ณ [zh-CN](../../../zh-CN/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ผ [zh-TW](../../../zh-TW/docs/guides/FEATURES.md) --- ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../../../guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡น [am](../../../am/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฆ [ar](../../../ar/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฟ [az](../../../az/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฌ [bg](../../../bg/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฉ [bn](../../../bn/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ฆ [bs](../../../bs/docs/guides/FEATURES.md) ยท ๐Ÿ‡จ๐Ÿ‡ฟ [cs](../../../cs/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ฐ [da](../../../da/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ช [de](../../../de/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ท [el](../../../el/docs/guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡ธ [es](../../../es/docs/guides/FEATURES.md) ยท ๐Ÿ‡ช๐Ÿ‡ช [et](../../../et/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ท [fa](../../../fa/docs/guides/FEATURES.md) ยท ๐Ÿ‡ซ๐Ÿ‡ฎ [fi](../../../fi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ซ๐Ÿ‡ท [fr](../../../fr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ช [ga](../../../ga/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [gu](../../../gu/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ha](../../../ha/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฑ [he](../../../he/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [hi](../../../hi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ญ๐Ÿ‡ท [hr](../../../hr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ญ๐Ÿ‡บ [hu](../../../hu/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฒ [hy](../../../hy/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฉ [id](../../../id/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ig](../../../ig/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡น [it](../../../it/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฏ๐Ÿ‡ต [ja](../../../ja/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ช [ka](../../../ka/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [km](../../../km/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [kn](../../../kn/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡น [lt](../../../lt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ป [lv](../../../lv/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ml](../../../ml/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [mr](../../../mr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡พ [ms](../../../ms/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡น [mt](../../../mt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฒ๐Ÿ‡ฒ [my](../../../my/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ต [ne](../../../ne/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฑ [nl](../../../nl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ด [no](../../../no/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [or](../../../or/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [pa](../../../pa/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ญ [phi](../../../phi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ฑ [pl](../../../pl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡น [pt](../../../pt/docs/guides/FEATURES.md) ยท ๐Ÿ‡ง๐Ÿ‡ท [pt-BR](../../../pt-BR/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡ด [ro](../../../ro/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡บ [ru](../../../ru/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ฐ [si](../../../si/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฐ [sk](../../../sk/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฎ [sl](../../../sl/docs/guides/FEATURES.md) ยท ๐Ÿ‡ท๐Ÿ‡ธ [sr](../../../sr/docs/guides/FEATURES.md) ยท ๐Ÿ‡ธ๐Ÿ‡ช [sv](../../../sv/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ช [sw](../../../sw/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ta](../../../ta/docs/guides/FEATURES.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [te](../../../te/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ญ [th](../../../th/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ท [tr](../../../tr/docs/guides/FEATURES.md) ยท ๐Ÿ‡บ๐Ÿ‡ฆ [uk-UA](../../../uk-UA/docs/guides/FEATURES.md) ยท ๐Ÿ‡ต๐Ÿ‡ฐ [ur](../../../ur/docs/guides/FEATURES.md) ยท ๐Ÿ‡บ๐Ÿ‡ฟ [uz](../../../uz/docs/guides/FEATURES.md) ยท ๐Ÿ‡ป๐Ÿ‡ณ [vi](../../../vi/docs/guides/FEATURES.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [yo](../../../yo/docs/guides/FEATURES.md) ยท ๐Ÿ‡จ๐Ÿ‡ณ [zh-CN](../../../zh-CN/docs/guides/FEATURES.md) ยท ๐Ÿ‡น๐Ÿ‡ผ [zh-TW](../../../zh-TW/docs/guides/FEATURES.md) OmniRoute ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ชจ๋“  ์„น์…˜์„ ์„ค๋ช…ํ•˜๋Š” ์‹œ๊ฐ์  ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. > ๐Ÿ“… **๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-06-28 โ€” **v3.8.40** --- ## โœจ v3.8.0 ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ v3.7.x โ†’ v3.8.0 ์ฃผ๊ธฐ์—๋Š” ์„ค์ •์ด ํ•„์š” ์—†๋Š” ์ž๋™ ๋ผ์šฐํŒ…, ์ƒˆ๋กœ์šด ์ œ๊ณต์ž, OAuth ํ๋ฆ„, ํ•œ์ธต ๊ฐ•ํ™”๋œ ๋ณต์›๋ ฅ, ๋”์šฑ ํ’๋ถ€ํ•ด์ง„ CLI ๊ฒฝํ—˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์„ธ๋ถ€ ์ •๋ณด๋Š” ์ด ๋ฌธ์„œ์˜ ๋’ท๋ถ€๋ถ„๊ณผ ๋งํฌ๋œ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”. - ๐Ÿค– **Auto Combo / ์„ค์ •์ด ํ•„์š” ์—†๋Š” ์ž๋™ ๋ผ์šฐํŒ…** โ€” `auto/coding`, `auto/fast`, `auto/cheap`, `auto/offline`, `auto/smart`, `auto/lkgp`, `auto/chaos` ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 16๊ฐ€์ง€ ์š”์†Œ์˜ ์ ์ˆ˜ ์‚ฐ์ • ์—”์ง„๊ณผ ์—„์„ ๋œ 6๊ฐœ์˜ **๋ชจ๋“œ ํŒฉ**(ship-fast, cost-saver, quality-first, offline-friendly, reliability-first, chaos-mode)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. - ๐Ÿ†• **Command Code ์ œ๊ณต์ž** (#2199) โ€” ๋ชจ๋ธ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ์„ ํฌํ•จํ•œ ์ผ๊ธ‰ ๋“ฑ๋ก ๊ธฐ๋Šฅ - ๐Ÿ†• **Z.AI ์ œ๊ณต์ž** โ€” ํ• ๋‹น๋Ÿ‰ ๋ ˆ์ด๋ธ”์„ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฌด๋ฃŒ ํ‹ฐ์–ด ์ œ๊ณต์ž - ๐ŸŽฌ **KIE ๋ฏธ๋””์–ด ํ™•์žฅ** โ€” ๋™์˜์ƒ ์ƒ์„ฑ ๋ชจ๋ธ์„ ํฌํ•จํ•˜๋„๋ก ์นดํƒˆ๋กœ๊ทธ ํ™•์žฅ - ๐Ÿ” **Devin ์ธ์ฆ** โ€” Desktop์€ ๊ธฐ์กด Devin API ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, CLI๋Š” ๋กœ์ปฌ `devin auth login` ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉ - ๐Ÿ†“ **์ƒˆ๋กœ์šด ๋ฌด๋ฃŒ ์ œ๊ณต์ž 8๊ฐœ** โ€” LLM7, Lepton, UncloseAI, BazaarLink, Completions, Enally, FreeTheAi, Command Code - ๐ŸŽฏ **๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ธ์‹ ํ‹ฐ์–ด ๋ผ์šฐํŒ… W1โ€“W4** โ€” ์ œ๊ณต์ž ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ค‘์น˜๊ฐ€ ์ ์šฉ๋œ ํ‹ฐ์–ด ์„ ํƒ - ๐ŸŽจ **Cursor์˜ ์™„์ „ํ•œ OpenAI ํ˜ธํ™˜์„ฑ** โ€” ๋„๊ตฌ ํ˜ธ์ถœ, ์ŠคํŠธ๋ฆฌ๋ฐ, ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ์—”๋“œํˆฌ์—”๋“œ๋กœ ์ง€์› - ๐Ÿ“Š **Cursor Pro ํ”Œ๋žœ ์‚ฌ์šฉ๋Ÿ‰** โ€” ์ œ๊ณต์ž ํ•œ๋„ ๋Œ€์‹œ๋ณด๋“œ์— ํ• ๋‹น๋Ÿ‰ ๋ฐ ์ฃผ๊ธฐ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ - โšก **์„œ๋น„์Šค ํ‹ฐ์–ด ๋ถ„์„ / Codex ๊ณ ์† ํ‹ฐ์–ด ๋ถ„์„** โ€” ํ‹ฐ์–ด๋ณ„ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ€์‹œ์„ฑ ์ œ๊ณต - ๐Ÿ“Œ **์„ธ์…˜๋ณ„ ๊ณ ์ • ๋ผ์šฐํŒ…** โ€” Codex ์„ธ์…˜์ด ํ„ด ์‚ฌ์ด์—๋„ ๋™์ผํ•œ ๊ณ„์ •์— ๊ณ ์ •๋จ - ๐Ÿ”Š **Inworld TTS ๊ฐœ์„ ** โ€” ์Œ์„ฑ ์นดํƒˆ๋กœ๊ทธ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐœ์„  - ๐Ÿ”‘ **Kiro ํ—ค๋“œ๋ฆฌ์Šค ์ธ์ฆ** โ€” ๋ธŒ๋ผ์šฐ์ € ์—†์ด ๋กœ์ปฌ `kiro-cli` SQLite ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ - ๐Ÿ“‰ **DeepSeek ํ• ๋‹น๋Ÿ‰ ๋ฐ ํ•œ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง** โ€” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ผ๋ณ„/์›”๋ณ„ ์‚ฌ์šฉ๋Ÿ‰ ์ œ๊ณต - ๐Ÿ”„ **์žฌ์„ค์ • ์ธ์‹ ๋ผ์šฐํŒ… ์ „๋žต** โ€” ์ด์ œ ์ฝค๋ณด๋Š” ํ• ๋‹น๋Ÿ‰ ๊ธฐ๊ฐ„์ด ๊ฐ€์žฅ ๋นจ๋ฆฌ ์žฌ์„ค์ •๋˜๋Š” ๊ณ„์ •์„ ์šฐ์„  ์„ ํƒ - โฑ๏ธ **`fallbackDelayMs`** ๋ฐ **๋™์  ๋„๊ตฌ ํ•œ๋„ ๊ฐ์ง€** โ€” ๋” ์„ธ๋ฐ€ํ•œ ํด๋ฐฑ ํƒ€์ด๋ฐ๊ณผ ์ œ๊ณต์ž๋ณ„ ๋„๊ตฌ ๊ฐœ์ˆ˜ ํ•œ๋„ - ๐Ÿ”ง **๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ ์„ฑ๋Šฅ ์ €ํ•˜ ์ฒ˜๋ฆฌ(Responses API)** โ€” ์—…์ŠคํŠธ๋ฆผ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํด๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ตฌ์กฐํ™”๋œ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๋™๊ธฐ ๋ชจ๋“œ๋กœ ํด๋ฐฑ - ๐Ÿšฆ **์ œ๊ณต์ž๋ณ„ 429 ๋ถ„๋ฅ˜** + `useUpstream429BreakerHints` ํ† ๊ธ€ โ€” ์—…์ŠคํŠธ๋ฆผ ์†๋„ ์ œํ•œ ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋ธŒ๋ ˆ์ด์ปค ๋™์ž‘ ์ œ์–ด - ๐Ÿฉบ **๋ชจ๋ธ ์ฟจ๋‹ค์šด ๋Œ€์‹œ๋ณด๋“œ** โ€” ๋ชจ๋ธ๋ณ„ ์ž ๊ธˆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  UI์—์„œ ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ํ™œ์„ฑํ™” - ๐Ÿ”’ **MITM ๋™์  Linux ์ธ์ฆ์„œ ๊ฐ์ง€** โ€” Debian/Ubuntu, Fedora/RHEL, Arch ๋ฐ ๊ธฐํƒ€ ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ - ๐Ÿ’ป **CLI ๊ฐœ์„  ๊ธฐ๋Šฅ ๋ชจ์Œ** โ€” `omniroute providers`, `omniroute combos`, `omniroute doctor`, `omniroute setup`์„ ํฌํ•จํ•œ 20๊ฐœ ์ด์ƒ์˜ ๋ช…๋ น์–ด - ๐Ÿ” **Qdrant ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๊ฒ€์ƒ‰** โ€” ์ž๋™ ๋ฒกํ„ฐ ์ €์žฅ์†Œ ๋ชจ๋ธ ํƒ์ƒ‰ - ๐Ÿ”‘ **`manage` ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ API ํ‚ค / Bearer ํ‚ค** โ€” API๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ ์ž‘์—… ์ˆ˜ํ–‰ - ๐Ÿฅ **์ฝค๋ณด ๋Œ€์ƒ ์ƒํƒœ ๋ถ„์„** + **๊ตฌ์กฐํ™”๋œ ์ฝค๋ณด ๋นŒ๋”** โ€” ๋Œ€์ƒ๋ณ„ ์ƒํƒœ ์ •๋ณด์™€ `(provider, model, connection)` ๋‹จ๊ณ„๋ฅผ ์กฐํ•ฉํ•˜๊ธฐ ์œ„ํ•œ UI ๋นŒ๋” - ๐Ÿค **GitLab Duo OAuth ์ œ๊ณต์ž** โ€” GitLab ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ๋กœ๊ทธ์ธ - ๐Ÿง  **Reasoning Replay Cache** โ€” ์ถ”๋ก  ์ถ”์ ์„ ์œ„ํ•œ ์ธ๋ฉ”๋ชจ๋ฆฌ + SQLite ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์˜์†์„ฑ ๐Ÿ“š **๊ด€๋ จ ๋ฌธ์„œ:** [Skills ํ”„๋ ˆ์ž„์›Œํฌ](../frameworks/SKILLS.md) ยท [๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ](../frameworks/MEMORY.md) ยท [ํด๋ผ์šฐ๋“œ ์—์ด์ „ํŠธ](../frameworks/CLOUD_AGENT.md) ยท [์›นํ›…](../frameworks/WEBHOOKS.md) ยท [Reasoning Replay Cache](../routing/REASONING_REPLAY.md) --- ## ๐Ÿ”Œ ์ œ๊ณต์—…์ฒด AI ์ œ๊ณต์—…์ฒด ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค: OAuth ์ œ๊ณต์—…์ฒด(Claude Code, Codex), API ํ‚ค ์ œ๊ณต์—…์ฒด(Groq, DeepSeek, OpenRouter), ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด(Qoder, Kiro). Kiro ๊ณ„์ •์€ ํฌ๋ ˆ๋”ง ์ž”์•ก ์ถ”์ ์„ ์ง€์›ํ•˜๋ฉฐ, Dashboard โ†’ Usage์—์„œ ๋‚จ์€ ํฌ๋ ˆ๋”ง, ์ดํ•œ๋„ ๋ฐ ๊ฐฑ์‹  ๋‚ ์งœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenRouter ์—ฐ๊ฒฐ์€ Advanced Settings์—์„œ ์—ฐ๊ฒฐ๋ณ„ `preset`์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •๋œ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์—์„œ ์ž์ฒด `preset`์„ ์ด๋ฏธ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด OmniRoute๋Š” ์ด๋ฅผ OpenRouter์˜ ์ตœ์ƒ์œ„ ์š”์ฒญ ํ•„๋“œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: `"preset": "email-copywriter"`. ![์ œ๊ณต์—…์ฒด ๋Œ€์‹œ๋ณด๋“œ](../screenshots/01-providers.png) --- ## ๐ŸŽจ ์ฝค๋ณด 19๊ฐ€์ง€ ๊ณต๊ฐœ ์ „๋žต์œผ๋กœ ๋ชจ๋ธ ๋ผ์šฐํŒ… ์ฝค๋ณด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค: priority, weighted, round-robin, context-relay, fill-first, p2c(power-of-two choices), random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp(last-known-good-provider), context-optimized, cache-optimized, **fusion**(์—ฌ๋Ÿฌ ๋ชจ๋ธ ํŒจ๋„์— ๋ณ‘๋ ฌ๋กœ ์š”์ฒญํ•œ ๋‹ค์Œ ์‹ฌ์‚ฌ ๋ชจ๋ธ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ๋‹ต๋ณ€์œผ๋กœ ์ข…ํ•ฉ), **pipeline**. ๊ฐ ์ฝค๋ณด๋Š” ์ž๋™ ํด๋ฐฑ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๋น ๋ฅธ ํ…œํ”Œ๋ฆฟ๊ณผ ์ค€๋น„ ์ƒํƒœ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ ์ฝค๋ณด ๊ฐœ์„  ์‚ฌํ•ญ: - **๊ตฌ์กฐํ™”๋œ ์ฝค๋ณด ๋นŒ๋”** โ€” ์ œ๊ณต์—…์ฒด, ๋ชจ๋ธ ๋ฐ ์ •ํ™•ํ•œ ๊ณ„์ •/์—ฐ๊ฒฐ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑ - **๋™์ผ ์ œ๊ณต์—…์ฒด ๋ฐ˜๋ณต ์ง€์›** โ€” `(provider, model, connection)` ํŠœํ”Œ์ด ๊ณ ์œ ํ•˜๋‹ค๋ฉด ํ•˜๋‚˜์˜ ์ฝค๋ณด์—์„œ ๋™์ผํ•œ ์ œ๊ณต์—…์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ - **์ฝค๋ณด ๋Œ€์ƒ ์ƒํƒœ** โ€” ๋ถ„์„ ๋ฐ ์ƒํƒœ ํ™”๋ฉด์—์„œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ชจ๋ธ ๋ฌธ์ž์—ด๋กœ ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„ ์ฝค๋ณด ๋Œ€์ƒ/๋‹จ๊ณ„๋ฅผ ๊ตฌ๋ถ„ - **๋ณตํ•ฉ ํ‹ฐ์–ด ์ˆœ์„œ** โ€” ์ด์ œ `defaultTier -> fallbackTier`๊ฐ€ ์ตœ์ƒ์œ„ ์ฝค๋ณด ๋‹จ๊ณ„์˜ ๋Ÿฐํƒ€์ž„ ์‹คํ–‰/ํด๋ฐฑ ์ˆœ์„œ์— ์˜ํ–ฅ์„ ์คŒ - **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ** โ€” ์ฝค๋ณด `system_message`๋Š” ์„œ๋ฒ„ ์ธก `{{MODEL_ID}}`, `{{PROVIDER_ID}}`, `{{ACCOUNT}}` ๋ฐ `{{FINGERPRINT}}` ์ž๋ฆฌํ‘œ์‹œ์ž๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋””์ŠคํŒจ์น˜ ์ง์ „์— ์‹ค์ œ๋กœ ๋ผ์šฐํŒ…๋œ ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ํ—ˆ์šฉ ๋ชฉ๋ก ๊ธฐ๋ฐ˜์ด๋ฉฐ ์žฌ๊ท€์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์ž๋ฆฌํ‘œ์‹œ์ž๋Š” ๋ฆฌํ„ฐ๋Ÿด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ , ๋นˆ ๊ฐ’์€ ๋นˆ ๋ฌธ์ž์—ด๋กœ ํ™•์žฅ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋Š” ์ ˆ๋Œ€ ๋‹ค์‹œ ์ž‘์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `{{FINGERPRINT}}`๋Š” ๊ณ ์ •๋˜๊ฑฐ๋‚˜ ์ž๋™ ์ˆœํ™˜๋˜๋Š” ํ•‘๊ฑฐํ”„๋ฆฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•‘๊ฑฐํ”„๋ฆฐํŠธ ๊ธฐ๋ฐ˜ ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด์—์„œ๋งŒ ํ•ด์„๋˜๋ฉฐ, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ(์˜ˆ: ๋‹จ์ผ ํ•‘๊ฑฐํ”„๋ฆฐํŠธ ์—ฐ๊ฒฐ, ๋น„-fp ์ œ๊ณต์—…์ฒด)์—๋Š” ๋นˆ ๋ฌธ์ž์—ด๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์€ ํ‘œ์ค€ ๋””์ŠคํŒจ์น˜ ๋ฃจํ”„, round-robin ๋ฐ ๊ณ ์ •๋œ ์ปจํ…์ŠคํŠธ ์บ์‹œ ์„ธ์…˜์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. fusion, chaos, pipeline ๋ฐ nested-execute ์ „๋žต์€ ์•„์ง ์ž๋ฆฌํ‘œ์‹œ์ž๋ฅผ ํ™•์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ![์ฝค๋ณด ๋Œ€์‹œ๋ณด๋“œ](../screenshots/02-combos.png) --- ## ๐Ÿ“Š ๋ถ„์„ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰, ๋น„์šฉ ์ถ”์ •์น˜, ํ™œ๋™ ํžˆํŠธ๋งต, ์ฃผ๊ฐ„ ๋ถ„ํฌ ์ฐจํŠธ ๋ฐ ์ œ๊ณต์—…์ฒด๋ณ„ ์„ธ๋ถ€ ๋‚ด์—ญ์„ ํฌํ•จํ•œ ์ข…ํ•ฉ์ ์ธ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ![๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ](../screenshots/03-analytics.png) --- ## ๐Ÿฅ ์‹œ์Šคํ…œ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: ๊ฐ€๋™ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, ๋ฒ„์ „, ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐฑ๋ถ„์œ„์ˆ˜(p50/p95/p99), ์บ์‹œ ํ†ต๊ณ„, ์ œ๊ณต์—…์ฒด ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ํ™œ์„ฑ ํ• ๋‹น๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง ์„ธ์…˜ ๋ฐ ์ฝค๋ณด ๋Œ€์ƒ ์ƒํƒœ. ![์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ](../screenshots/04-health.png) --- ## ๐Ÿ”ง ๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ API ๋ฒˆ์—ญ์„ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ๋„ค ๊ฐ€์ง€ ๋ชจ๋“œ: **ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ**(ํ˜•์‹ ๋ณ€ํ™˜๊ธฐ), **์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ**(์‹ค์‹œ๊ฐ„ ์š”์ฒญ), **ํ…Œ์ŠคํŠธ ๋ฒค์น˜**(์ผ๊ด„ ํ…Œ์ŠคํŠธ), **๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ**(์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ). ![๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ](../screenshots/05-translator.png) --- ## ๐ŸŽฎ ๋ชจ๋ธ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ _(v2.0.9+)_ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋ชจ๋“  ๋ชจ๋ธ์„ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ณต์ž, ๋ชจ๋ธ ๋ฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  Monaco Editor๋กœ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ์‘๋‹ต์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ณ , ์ŠคํŠธ๋ฆฌ๋ฐ ๋„์ค‘ ์ค‘๋‹จํ•˜๋ฉฐ, ํƒ€์ด๋ฐ ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## ๐ŸŽจ ํ…Œ๋งˆ _(v2.0.5+)_ ์ „์ฒด ๋Œ€์‹œ๋ณด๋“œ์˜ ์ƒ‰์ƒ ํ…Œ๋งˆ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 7๊ฐ€์ง€ ์‚ฌ์ „ ์„ค์ • ์ƒ‰์ƒ(Coral, Blue, Red, Green, Violet, Orange, Cyan) ์ค‘์—์„œ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” 16์ง„์ˆ˜ ์ƒ‰์ƒ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ํ…Œ๋งˆ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ดํŠธ, ๋‹คํฌ ๋ฐ ์‹œ์Šคํ…œ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. --- ## โš™๏ธ ์„ค์ • **7๊ฐœ์˜ ํƒญ**์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ข…ํ•ฉ ์„ค์ • ํŒจ๋„: - **์ผ๋ฐ˜** โ€” ์‹œ์Šคํ…œ ์ €์žฅ์†Œ, ๋ฐฑ์—… ๊ด€๋ฆฌ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ) - **๋ชจ์–‘** โ€” ํ…Œ๋งˆ ์„ ํƒ๊ธฐ(๋‹คํฌ/๋ผ์ดํŠธ/์‹œ์Šคํ…œ), ์ƒ‰์ƒ ํ…Œ๋งˆ ์‚ฌ์ „ ์„ค์ • ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ์ƒ‰์ƒ, ์ƒํƒœ ๋กœ๊ทธ ํ‘œ์‹œ ์—ฌ๋ถ€, ์‚ฌ์ด๋“œ๋ฐ” ํ•ญ๋ชฉ ๋ฐ ๊ทธ๋ฃน ๊ตฌ๋ถ„์„  ํ‘œ์‹œ ์—ฌ๋ถ€ ์ œ์–ด, ์—”๋“œํฌ์ธํŠธ ํ„ฐ๋„ ํ‘œ์‹œ ์—ฌ๋ถ€ ์ œ์–ด - **AI** โ€” AI ์–ด์‹œ์Šคํ„ดํŠธ ๊ธฐ๋Šฅ, ๊ธฐ๋ณธ ๋ผ์šฐํŒ… ์‚ฌ์ „ ์„ค์ •(Auto Combo `auto/coding`, `auto/fast`, `auto/cheap`, `auto/smart`), ์ถ”๋ก  ์žฌ์ƒ ์บ์‹œ ๋ฐ ์Šคํ‚ฌ/๋ฉ”๋ชจ๋ฆฌ ํ† ๊ธ€ - **๋ณด์•ˆ** โ€” API ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ, ์‚ฌ์šฉ์ž ์ง€์ • ์ œ๊ณต์ž ์ฐจ๋‹จ, IP ํ•„ํ„ฐ๋ง, ์„ธ์…˜ ์ •๋ณด - **๋ผ์šฐํŒ…** โ€” ๋ชจ๋ธ ๋ณ„์นญ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์„ฑ๋Šฅ ์ €ํ•˜, ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ธ์‹ ํ‹ฐ์–ด ๋ผ์šฐํŒ…(W1โ€“W4), `fallbackDelayMs`, ์„ธ์…˜๋ณ„ ๊ณ ์ • ๋ผ์šฐํŒ… - **๋ณต์›๋ ฅ** โ€” ์†๋„ ์ œํ•œ ์œ ์ง€, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์กฐ์ •, ์ฐจ๋‹จ๋œ ๊ณ„์ • ์ž๋™ ๋น„ํ™œ์„ฑํ™”, ์ œ๊ณต์ž ๋งŒ๋ฃŒ ๋ชจ๋‹ˆํ„ฐ๋ง, **Context Relay** ํ•ธ๋“œ์˜คํ”„ ์ž„๊ณ„๊ฐ’ ๋ฐ ์š”์•ฝ ๋ชจ๋ธ ๊ตฌ์„ฑ, ์ œ๊ณต์ž๋ณ„ 429 ๋ถ„๋ฅ˜ ๋ฐ `useUpstream429BreakerHints` ํ† ๊ธ€, ๋ชจ๋ธ ์ฟจ๋‹ค์šด - **๊ณ ๊ธ‰** โ€” ๊ตฌ์„ฑ ์žฌ์ •์˜, ๊ตฌ์„ฑ ๊ฐ์‚ฌ ์ถ”์ , ํด๋ฐฑ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ชจ๋“œ, Responses API์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ ์„ฑ๋Šฅ ์ €ํ•˜ ![์„ค์ • ๋Œ€์‹œ๋ณด๋“œ](../screenshots/06-settings.png) --- ## ๐Ÿ”ง CLI ๋„๊ตฌ AI ์ฝ”๋”ฉ ๋„๊ตฌ๋ฅผ ์œ„ํ•œ ์›ํด๋ฆญ ๊ตฌ์„ฑ: Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline, Continue, Cursor ๋ฐ Factory Droid. ์ž๋™ํ™”๋œ ๊ตฌ์„ฑ ์ ์šฉ/์ดˆ๊ธฐํ™”, ์—ฐ๊ฒฐ ํ”„๋กœํ•„ ๋ฐ ๋ชจ๋ธ ๋งคํ•‘ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ![CLI ๋„๊ตฌ ๋Œ€์‹œ๋ณด๋“œ](../screenshots/07-cli-tools.png) --- ## ๐Ÿค– CLI ์—์ด์ „ํŠธ _(v2.0.11+)_ CLI ์—์ด์ „ํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์‹œ๋ณด๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ 16๊ฐœ์˜ ๊ธฐ๋ณธ ์ œ๊ณต ์—์ด์ „ํŠธ(Codex, Claude, Goose, OpenClaw, Aider, OpenCode, Cline, ForgeCode, Amazon Q, Open Interpreter, Cursor CLI, Warp, **Windsurf**, **Devin CLI**, **Kimi Coding**, **Command Code**)๋ฅผ ๊ทธ๋ฆฌ๋“œ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค: - **์„ค์น˜ ์ƒํƒœ** โ€” ๋ฒ„์ „ ๊ฐ์ง€๋ฅผ ํ†ตํ•œ ์„ค์น˜๋จ/์ฐพ์„ ์ˆ˜ ์—†์Œ ํ‘œ์‹œ - **ํ”„๋กœํ† ์ฝœ ๋ฐฐ์ง€** โ€” stdio, HTTP ๋“ฑ - **์‚ฌ์šฉ์ž ์ง€์ • ์—์ด์ „ํŠธ** โ€” ์–‘์‹(์ด๋ฆ„, ๋ฐ”์ด๋„ˆ๋ฆฌ, ๋ฒ„์ „ ๋ช…๋ น์–ด, ์‹คํ–‰ ์ธ์ˆ˜)์„ ํ†ตํ•ด ๋ชจ๋“  CLI ๋„๊ตฌ ๋“ฑ๋ก - **CLI ์ง€๋ฌธ ๋งค์นญ** โ€” ํ”„๋ก์‹œ IP๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฐจ๋‹จ ์œ„ํ—˜์„ ์ค„์ด๋„๋ก ๋„ค์ดํ‹ฐ๋ธŒ CLI ์š”์ฒญ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ์ œ๊ณต์ž๋ณ„ ํ† ๊ธ€ - **๋กœ์ปฌ Devin ์ธ์ฆ** โ€” Devin CLI๋Š” `devin auth login`์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € OAuth ํ๋ฆ„์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --- ## ๐Ÿ”— ์ปจํ…์ŠคํŠธ ๋ฆด๋ ˆ์ด _(v3.5.5+)_ ๋Œ€ํ™” ๋„์ค‘ ๊ณ„์ •์ด ๊ต์ฒด๋˜์–ด๋„ ์„ธ์…˜ ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์ฝค๋ณด ์ „๋žต์ž…๋‹ˆ๋‹ค. ํ™œ์„ฑ ๊ณ„์ •์˜ ํ• ๋‹น๋Ÿ‰์ด ์†Œ์ง„๋˜๊ธฐ ์ „์— OmniRoute๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ตฌ์กฐํ™”๋œ ์ธ๊ณ„ ์š”์•ฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์š”์ฒญ์ด ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๋ผ์šฐํŒ…๋˜๋ฉด ํ•ด๋‹น ์š”์•ฝ์ด ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๋กœ ์‚ฝ์ž…๋˜์–ด ์ƒˆ ๊ณ„์ •์—์„œ๋„ ์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ๋Œ€ํ™”๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝค๋ณด ์ˆ˜์ค€ ๋˜๋Š” ์ „์—ญ ์„ค์ •์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: - **์ธ๊ณ„ ์ž„๊ณ„๊ฐ’** โ€” ์š”์•ฝ ์ƒ์„ฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ํ• ๋‹น๋Ÿ‰ ์‚ฌ์šฉ๋ฅ (๊ธฐ๋ณธ๊ฐ’ 85%) - **์š”์•ฝํ•  ์ตœ๋Œ€ ๋ฉ”์‹œ์ง€ ์ˆ˜** โ€” ์š”์•ฝํ•  ์ตœ๊ทผ ๊ธฐ๋ก์˜ ๋ฒ”์œ„ - **์š”์•ฝ ๋ชจ๋ธ** โ€” ์ธ๊ณ„ ์š”์•ฝ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•  ์„ ํƒ์  ์žฌ์ •์˜ ๋ชจ๋ธ ํ˜„์žฌ Codex ๊ณ„์ • ๊ต์ฒด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. [์ปจํ…์ŠคํŠธ ๋ฆด๋ ˆ์ด ๋ฌธ์„œ](../architecture/ARCHITECTURE.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. --- ## ๐Ÿ—œ๏ธ ํ”„๋กฌํ”„ํŠธ ์••์ถ• _(v3.7.9+)_ ์ด์ œ ์ปจํ…์ŠคํŠธ ๋ฐ ์บ์‹œ์—์„œ Caveman, RTK, ์••์ถ• ์ฝค๋ณด ์ „์šฉ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: - **Caveman** โ€” ์–ธ์–ด ์ธ์‹ ๊ทœ์น™ ํŒฉ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ถœ๋ ฅ ๋ชจ๋“œ ์ œ์–ด ๋ฐ ๋ถ„์„ - **RTK** โ€” ์…ธ, git, ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ํŒจํ‚ค์ง€, Docker, ์ธํ”„๋ผ, JSON ๋ฐ ์Šคํƒ ์ถ”์  ์ถœ๋ ฅ์„ ์œ„ํ•œ ๋ช…๋ น์–ด ์ธ์‹ ์••์ถ• - **์••์ถ• ์ฝค๋ณด** โ€” ๋ผ์šฐํŒ… ์ฝค๋ณด์— ํ• ๋‹น๋˜๋Š” `rtk -> caveman`๊ณผ ๊ฐ™์€ ๋ช…๋ช…๋œ ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค. ๋‘ ์—”์ง„์ด ๋ชจ๋‘ ์ ์šฉ๋  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ˆ„์  ๊ณ„์‚ฐ ๊ธฐ์ค€์œผ๋กœ ํ‰๊ท  `~89%`, ์••์ถ• ๊ฐ€๋Šฅํ•œ ์ปจํ…์ŠคํŠธ ๊ธฐ์ค€ `78-95%`์˜ ์ ˆ๊ฐ๋ฅ ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค - **์›์‹œ ์ถœ๋ ฅ ๋ณต๊ตฌ** โ€” ์••์ถ•๋œ ์ถœ๋ ฅ์˜ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ์„ ํƒ์  ๋น„์‹๋ณ„ํ™” RTK ์›์‹œ ์ถœ๋ ฅ ํฌ์ธํ„ฐ [์••์ถ• ๊ฐ€์ด๋“œ](../compression/COMPRESSION_GUIDE.md), [RTK ์••์ถ•](../compression/RTK_COMPRESSION.md) ๋ฐ [์••์ถ• ์—”์ง„](../compression/COMPRESSION_ENGINES.md)์„ ์ฐธ์กฐํ•˜์„ธ์š”. --- ## ๐Ÿ›ก๏ธ ํ”„๋ก์‹œ ๋ณด์•ˆ ๊ฐ•ํ™” _(v3.5.5+)_ ์ „์ฒด ์š”์ฒญ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ฑธ์นœ ํฌ๊ด„์ ์ธ ํ”„๋ก์‹œ ๊ตฌ์„ฑ ์ ์šฉ: - **ํ† ํฐ ์ƒํƒœ ํ™•์ธ** โ€” ์ด์ œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ OAuth ์ƒˆ๋กœ ๊ณ ์นจ์ด ์—ฐ๊ฒฐ๋ณ„๋กœ ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ํ™•์ธํ•˜์—ฌ ํ”„๋ก์‹œ๊ฐ€ ํ•„์ˆ˜์ธ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค - **API ํ‚ค ๊ฒ€์ฆ** โ€” ๊ณต๊ธ‰์ž ํ‚ค ๊ฒ€์ฆ(`POST /api/providers/validate`)์ด `runWithProxyContext`๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๋˜์–ด ๊ณต๊ธ‰์ž ์ˆ˜์ค€ ๋ฐ ์ „์—ญ ํ”„๋ก์‹œ ์„ค์ •์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค - **undici ๋””์ŠคํŒจ์ฒ˜ ์ˆ˜์ •** โ€” ํ”„๋ก์‹œ ๋””์ŠคํŒจ์ฒ˜๊ฐ€ Node์˜ ๋‚ด์žฅ fetch ๋Œ€์‹  undici ์ž์ฒด fetch ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ Node.js 22์—์„œ ๋ฐœ์ƒํ•˜๋Š” `invalid onRequestStart method` ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค - **Node.js ๋ฒ„์ „ ๊ฐ์ง€** โ€” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” Node.js ๋ฒ„์ „(24+)์„ ์‚ฌ์ „์— ๊ฐ์ง€ํ•˜๊ณ  Node 22 LTS ์‚ฌ์šฉ ์•ˆ๋‚ด๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ๊ณ  ๋ฐฐ๋„ˆ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค --- ## ๐Ÿ“ง ์ด๋ฉ”์ผ ๊ฐœ์ธ์ •๋ณด ๋งˆ์Šคํ‚น _(v3.5.6+)_ ์Šคํฌ๋ฆฐ์ƒท์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋ฐ๋ชจ๋ฅผ ๋…นํ™”ํ•  ๋•Œ ์‹ค์ˆ˜๋กœ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด OAuth ๊ณ„์ • ์ด๋ฉ”์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์Šคํ‚น๋ฉ๋‹ˆ๋‹ค(์˜ˆ: `di*****@g****.com`). ์„ค์ • โ†’ ์™ธ๊ด€ โ†’ ๊ณ„์ • ์ด๋ฉ”์ผ ํ‘œ์‹œ ์—ฌ๋ถ€์—์„œ ๊ณต๊ธ‰์ž, ์ฝค๋ณด, ๋กœ๊ทธ, ํ• ๋‹น๋Ÿ‰ ๋ฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ํ™”๋ฉด ์ „๋ฐ˜์— ํ‘œ์‹œ๋˜๋Š” ์ „์ฒด ๊ณ„์ • ์ด๋ฉ”์ผ์„ ์ „์—ญ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋งˆ์Šคํ‚นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## ๐Ÿ‘๏ธ ๋ชจ๋ธ ํ‘œ์‹œ ์—ฌ๋ถ€ ์ „ํ™˜ _(v3.5.6+)_ ์ด์ œ ๊ณต๊ธ‰์ž ํŽ˜์ด์ง€์˜ ๋ชจ๋ธ ๋ชฉ๋ก์— ๋‹ค์Œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค: - **์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰/ํ•„ํ„ฐ ํ‘œ์‹œ์ค„** โ€” ํŠน์ • ๋ชจ๋ธ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - **๋ชจ๋ธ๋ณ„ ํ‘œ์‹œ ์—ฌ๋ถ€ ์ „ํ™˜**(๐Ÿ‘ ์•„์ด์ฝ˜) โ€” ์ˆจ๊ฒจ์ง„ ๋ชจ๋ธ์€ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ `/v1/models` ์นดํƒˆ๋กœ๊ทธ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค - **ํ™œ์„ฑ ๊ฐœ์ˆ˜ ๋ฐฐ์ง€**(`N/M ํ™œ์„ฑ`) โ€” ์ „์ฒด ๋ชจ๋ธ ๋Œ€๋น„ ํ™œ์„ฑํ™”๋œ ๋ชจ๋ธ ์ˆ˜๋ฅผ ํ•œ๋ˆˆ์— ๋ณด์—ฌ์ค๋‹ˆ๋‹ค --- ## ๐Ÿ”ง OAuth ํ™˜๊ฒฝ ๋ณต๊ตฌ _(v3.6.1+)_ ๋ˆ„๋ฝ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ณต์›ํ•˜๊ณ  ์†์ƒ๋œ ์ธ์ฆ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” OAuth ์ œ๊ณต์—…์ฒด์šฉ ์›ํด๋ฆญ "ํ™˜๊ฒฝ ๋ณต๊ตฌ" ์ž‘์—…์ž…๋‹ˆ๋‹ค. `Dashboard โ†’ Providers โ†’ [OAuth Provider] โ†’ Repair env`์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. - ๋ˆ„๋ฝ๋œ OAuth ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… - ์†์ƒ๋œ ํ™˜๊ฒฝ ํŒŒ์ผ ํ•ญ๋ชฉ - ๋ฐฑ์—… ๊ฒฝ๋กœ ์ •๋ฆฌ --- ## ๐Ÿ—‘๏ธ ์ œ๊ฑฐ / ์™„์ „ ์ œ๊ฑฐ _(v3.6.2+)_ ๋ชจ๋“  ์„ค์น˜ ๋ฐฉ์‹์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊น”๋”ํ•œ ์ œ๊ฑฐ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. | ๋ช…๋ น์–ด | ์ž‘์—… | | ------------------------ | ---------------------------------------------------------------------- | | `npm run uninstall` | ์‹œ์Šคํ…œ ์•ฑ์„ ์ œ๊ฑฐํ•˜์ง€๋งŒ `~/.omniroute`์˜ **DB์™€ ๊ตฌ์„ฑ์€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค**. | | `npm run uninstall:full` | ์•ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  **๋ชจ๋“  ๊ตฌ์„ฑ, ํ‚ค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค**. | --- ## ๐Ÿ–ผ๏ธ ๋ฏธ๋””์–ด _(v2.0.3+)_ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ด๋ฏธ์ง€, ๋™์˜์ƒ, ์Œ์•…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI, AnimateDiff, Stable Audio Open ๋ฐ MusicGen์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ“ ์š”์ฒญ ๋กœ๊ทธ ์ œ๊ณต์—…์ฒด, ๋ชจ๋ธ, ๊ณ„์ • ๋ฐ API ํ‚ค๋ณ„ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์š”์ฒญ ๋กœ๊น… ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ, ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰, ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐ ์‘๋‹ต ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ![์‚ฌ์šฉ๋Ÿ‰ ๋กœ๊ทธ](../screenshots/08-usage.png) --- ## ๐ŸŒ API ์—”๋“œํฌ์ธํŠธ ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ตฌ๋ถ„๋œ ํ†ตํ•ฉ API ์—”๋“œํฌ์ธํŠธ๋กœ, Chat Completions, Responses API, Embeddings, Image Generation, Reranking, Audio Transcription, Text-to-Speech, Moderations ๋ฐ ๋“ฑ๋ก๋œ API ํ‚ค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด Cloudflare Quick Tunnel, Tailscale Funnel, ngrok Tunnel ๋ฐ ํด๋ผ์šฐ๋“œ ํ”„๋ก์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ![์—”๋“œํฌ์ธํŠธ ๋Œ€์‹œ๋ณด๋“œ](../screenshots/09-endpoint.png) --- ## ๐Ÿ”‘ API ํ‚ค ๊ด€๋ฆฌ API ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ณ , ํ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ‚ค๋Š” ์ „์ฒด ์•ก์„ธ์Šค ๋˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ๊ถŒํ•œ์œผ๋กœ ํŠน์ • ๋ชจ๋ธ/์ œ๊ณต์—…์ฒด์— ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์‹œ๊ฐ์  ํ‚ค ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ“‹ ๊ฐ์‚ฌ ๋กœ๊ทธ ์ž‘์—… ์œ ํ˜•, ํ–‰์œ„์ž, ๋Œ€์ƒ, IP ์ฃผ์†Œ ๋ฐ ํƒ€์ž„์Šคํƒฌํ”„๋ณ„ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•˜๋Š” ๊ด€๋ฆฌ ์ž‘์—… ์ถ”์  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ๋ณด์•ˆ ์ด๋ฒคํŠธ ๊ธฐ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ–ฅ๏ธ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Windows, macOS ๋ฐ Linux์šฉ ๋„ค์ดํ‹ฐ๋ธŒ Electron ๋ฐ์Šคํฌํ†ฑ ์•ฑ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ํ†ตํ•ฉ, ์˜คํ”„๋ผ์ธ ์ง€์›, ์ž๋™ ์—…๋ฐ์ดํŠธ ๋ฐ ์›ํด๋ฆญ ์„ค์น˜ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ OmniRoute๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ: - ์„œ๋ฒ„ ์ค€๋น„ ์ƒํƒœ ํด๋ง(์ฝœ๋“œ ์Šคํƒ€ํŠธ ์‹œ ๋นˆ ํ™”๋ฉด ๋ฐฉ์ง€) - ํฌํŠธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด - ์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ… - ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ์ž ๊ธˆ - ์žฌ์‹œ์ž‘ ์‹œ ์ž๋™ ์—…๋ฐ์ดํŠธ - ํ”Œ๋žซํผ๋ณ„ ์กฐ๊ฑด๋ถ€ UI(macOS ํŠธ๋ž˜ํ”ฝ ๋ผ์ดํŠธ, Windows/Linux ๊ธฐ๋ณธ ์ œ๋ชฉ ํ‘œ์‹œ์ค„) - ๊ฐ•ํ™”๋œ Electron ๋นŒ๋“œ ํŒจํ‚ค์ง• โ€” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ฒˆ๋“ค์—์„œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋œ `node_modules`๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ํŒจํ‚ค์ง• ์ „์— ๊ฑฐ๋ถ€ํ•จ์œผ๋กœ์จ ๋นŒ๋“œ ๋จธ์‹ ์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ์ข…์†์„ฑ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(v2.5.5+). - **์ •์ƒ ์ข…๋ฃŒ** โ€” Electron `before-quit`๊ฐ€ Next.js๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•˜์—ฌ SQLite WAL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž ๊ธˆ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(v3.6.2+). ๐Ÿ“– ์ „์ฒด ๋ฌธ์„œ๋Š” [`electron/README.md`](../../electron/README.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. --- ## ๐ŸŒ V1 WebSocket ๋ธŒ๋ฆฌ์ง€ _(v3.6.6+)_ ์ด์ œ OmniRoute๋Š” `/v1/ws` ์—…๊ทธ๋ ˆ์ด๋“œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด **OpenAI ํ˜ธํ™˜ WebSocket ํด๋ผ์ด์–ธํŠธ**๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • `scripts/dev/v1-ws-bridge.mjs` ์„œ๋ฒ„๋Š” Next.js๋ฅผ ๋ž˜ํ•‘ํ•˜๊ณ  WS ์—ฐ๊ฒฐ์„ ์™„์ „ํ•œ ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ ์„ธ์…˜์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์—๋Š” HTTP ์š”์ฒญ๊ณผ ๋™์ผํ•œ API ํ‚ค ๋˜๋Š” ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋™์ž‘: - ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๊ธฐ ์ „์— `src/lib/ws/handshake.ts`์—์„œ WS ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ฒ€์ฆ - ์„ธ์…˜ ์ข…๋ฃŒ ๋˜๋Š” ์—…์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ŠคํŠธ๋ฆผ์„ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ - ๊ธฐ์กด HTTP+SSE ์ŠคํŠธ๋ฆฌ๋ฐ ๊ฒฝ๋กœ์™€ ๋™์‹œ์— ์ž‘๋™ --- ## ๐Ÿ”‘ ๋™๊ธฐํ™” ํ† ํฐ ๋ฐ ๊ตฌ์„ฑ ๋ฒˆ๋“ค _(v3.6.6+)_ ์ด์ œ **๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ๋™๊ธฐํ™” ํ† ํฐ**์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ ๋ฐ ์™ธ๋ถ€ ์šด์˜์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **`POST /api/sync/tokens`** โ€” ์ƒˆ ๋™๊ธฐํ™” ํ† ํฐ ๋ฐœ๊ธ‰(๋ฒ”์œ„ ์ง€์ •, ์„ ํƒ์  ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„ ์„ค์ • ๊ฐ€๋Šฅ) - **`DELETE /api/sync/tokens/:id`** โ€” ํ† ํฐ ํ๊ธฐ - **`GET /api/sync/bundle`** โ€” ๋ฒ„์ „์ด ์ง€์ •๋˜๊ณ  ETag๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ์˜ JSON ์Šค๋ƒ…์ƒท ๋‹ค์šด๋กœ๋“œ(๋™๊ธฐํ™” ํ† ํฐ์œผ๋กœ๋งŒ ์ธ์ฆ). ๋Œ€์‹œ๋ณด๋“œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ์ธ์ฆ ์„ค์ •์€ ์ œ๊ฑฐ๋˜์ง€๋งŒ ์ œ๊ณต์ž ์ž๊ฒฉ ์ฆ๋ช…๊ณผ API ํ‚ค๋Š” ํฌํ•จ๋˜๋ฏ€๋กœ, ํ•ด๋‹น ํŒŒ์ผ์„ ๋น„๋ฐ€ ์ •๋ณด๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”. ๊ตฌ์„ฑ ๋ฒˆ๋“ค์€ `src/lib/sync/bundle.ts`์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์†Œ๋น„์ž๋Š” ์ „์ฒด ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `ETag` ์‘๋‹ต ํ—ค๋”๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. CLI์—์„œ๋Š” `omniroute sync bundle --token `(๋˜๋Š” `OMNIROUTE_SYNC_TOKEN`)์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์œ ์ž๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿง  GLM Thinking ํ”„๋ฆฌ์…‹ _(v3.6.6+)_ ์ด์ œ **GLM Thinking (`glmt`)**์ด ์ •์‹ ๊ณต๊ธ‰์ž๋กœ ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์ถœ๋ ฅ ํ† ํฐ 65 536๊ฐœ, ์‚ฌ๊ณ  ์˜ˆ์‚ฐ 24 576๊ฐœ, ๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ œํ•œ 900์ดˆ, Claude ํ˜ธํ™˜ API ํ˜•์‹, GLM ์ œํ’ˆ๊ตฐ๊ณผ์˜ ์‚ฌ์šฉ๋Ÿ‰ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ† ํฐ ๊ณ„์‚ฐ**๋„ v3.6.6์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Claude ํ˜ธํ™˜ ๊ณต๊ธ‰์ž๊ฐ€ `/messages/count_tokens`๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ OmniRoute๋Š” ๋Œ€๊ทœ๋ชจ ์š”์ฒญ ์ „์— ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” ์›ํ™œํ•˜๊ฒŒ ์ถ”์ • ๋ฐฉ์‹์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ›ก๏ธ ์•ˆ์ „ํ•œ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ SSRF ๋ฐฉ์–ด _(v3.6.6+)_ ์ด์ œ ๋ชจ๋“  ๊ณต๊ธ‰์ž ๊ฒ€์ฆ ๋ฐ ๋ชจ๋ธ ํƒ์ƒ‰ ํ˜ธ์ถœ์€ 2๊ณ„์ธต ์•„์›ƒ๋ฐ”์šด๋“œ ๋ฐฉ์–ด๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. 1. **URL ๋ฐฉ์–ด** (`src/shared/network/outboundUrlGuard.ts`) โ€” ์†Œ์ผ“์ด ์—ด๋ฆฌ๊ธฐ ์ „์— ์‚ฌ์„ค/๋ฃจํ”„๋ฐฑ/๋งํฌ ๋กœ์ปฌ IP ๋ฒ”์œ„๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. 2. **์•ˆ์ „ํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ž˜ํผ** (`src/shared/network/safeOutboundFetch.ts`) โ€” URL ๋ฐฉ์–ด๋ฅผ ์ ์šฉํ•˜๊ณ , ์‹œ๊ฐ„ ์ œํ•œ์„ ์ •๊ทœํ™”ํ•˜๋ฉฐ, ์ผ์‹œ์  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„๋กœ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ์–ด ์ •์ฑ… ์œ„๋ฐ˜์€ HTTP 422(`URL_GUARD_BLOCKED`)๋กœ ํ‘œ์‹œ๋˜๋ฉฐ `providerAudit.ts`๋ฅผ ํ†ตํ•ด ๊ทœ์ • ์ค€์ˆ˜ ๊ฐ์‚ฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ”„ ์ฟจ๋‹ค์šด ์ธ์‹ ์žฌ์‹œ๋„ _(v3.6.6+)_ ์ด์ œ ์—…์ŠคํŠธ๋ฆผ ๊ณต๊ธ‰์ž๊ฐ€ ๋ชจ๋ธ ๋ฒ”์œ„์˜ ์ฟจ๋‹ค์šด์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ฑ„ํŒ… ์š”์ฒญ์ด **์ž๋™์œผ๋กœ ์žฌ์‹œ๋„**๋ฉ๋‹ˆ๋‹ค. `REQUEST_RETRY`(๊ธฐ๋ณธ๊ฐ’: 2) ๋ฐ `MAX_RETRY_INTERVAL_SEC`(๊ธฐ๋ณธ๊ฐ’: 30์ดˆ)๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `x-ratelimit-reset-requests`, `x-ratelimit-reset-tokens`, `Retry-After` ์ „๋ฐ˜์—์„œ ์†๋„ ์ œํ•œ ํ—ค๋” ํ•™์Šต์ด ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉฐ, ๋ชจ๋ธ๋ณ„ ์ฟจ๋‹ค์šด ์ƒํƒœ๋Š” ๋ณต์›๋ ฅ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## ๐Ÿ“‹ ๊ทœ์ • ์ค€์ˆ˜ ๊ฐ์‚ฌ v2 _(v3.6.6+)_ ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€๋„ค์ด์…˜, ์š”์ฒญ ์ปจํ…์ŠคํŠธ ๋ณด๊ฐ•(์š”์ฒญ ID, ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ, IP), ๊ตฌ์กฐํ™”๋œ ์ธ์ฆ ์ด๋ฒคํŠธ, ์ฐจ์ด ์ปจํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๊ณต๊ธ‰์ž CRUD ์ด๋ฒคํŠธ, SSRF ์ฐจ๋‹จ ๊ฒ€์ฆ ๋กœ๊น…์„ ์ง€์›ํ•˜๋„๋ก ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ด๋ฒคํŠธ๋Š” `src/lib/compliance/providerAudit.ts`์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.