็ฎไฝไธญๆ | English | ๆฅๆฌ่ช | ํ๊ตญ์ด | ะ ัััะบะธะน | Espaรฑol | Portuguรชs (Brasil)
์์ค์์ AnyModelBot์ ์คํํ๊ฑฐ๋ ํจํค์งํ๊ณ ๊ธฐ์ฌํ๋ ค๋ ๋ถ์ ์ํ ์๋ด์ ๋๋ค. ์ฑ์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ ค๋ฉด ๋ฆด๋ฆฌ์ค์์ ์ค์น ํ์ผ์ ๋ฐ์ผ์ธ์. README๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- ๋ด์ ์ญํ , ๊ธฐ๋ณธ ๋ชจ๋ธ, ๊ธฐ์ต์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ณ์ ์ ์ ์ญ ์ค์ (์ค์ โบ ์ฑํ ์ฑ๋)์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๋ชจ๋ ๋ด์ด ๊ณต์ ํฉ๋๋ค. ์๋น์ค๋ณ ๊ณ์ ์๋ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ ์ฌ๋์ด ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉํ๋ ํ๊ฒฝ์ ๋์์ผ๋ก ํฉ๋๋ค.
- ๋ชจ๋ธ์ Modelflare ๊ณ์ ๋๋ ๋ด ๊ณต์ API ํค๋ก ์ฌ์ฉํฉ๋๋ค. Modelflare์์ ์ ๊ณตํฉ๋๋ค. ์ฒ์ ์คํํ ๋ ๋ก๊ทธ์ธํ๊ฑฐ๋ ๊ฐ์ ํ๋ฉด ๋ชจ๋ธ ๋ชฉ๋ก์ด ์๋์ผ๋ก ๋ํ๋ฉ๋๋ค. ์์ฒญ์ ๋ด์ฅ magpie ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ฑฐ์นฉ๋๋ค.
- ํ๋์ ์ฝ๋๋ก ์ธ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์คํํฉ๋๋ค: ๋ฐ์คํฌํฑ ์ฑ(Electron), ๋ช
๋ น์ค
npm start, Docker.
src/
core/ ๊ณตํต ๋ฉ์์ง ํ์
, ์ธ์
๋๊ธฐ์ด๊ณผ ์ค๋ณต ์ ๊ฑฐ, ๋ฐํ์(/model /reset, ์คํธ๋ฆฌ๋ฐ), ์ฌ์์ ์๋ด, ์ ๊ทผ ํ๊ฐ(์์ ์+ํ์ฉ ๋ชฉ๋ก), ์๊ตฌ ๋ณด๋ผ ํธ์งํจ
delivery/ ๋จผ์ ๋ณด๋ด๋ ๋ฉ์์ง ์ ๋ฌ: ๋ฐฉํด ๊ธ์ง ์๊ฐ, ํ๋ฃจ ์ํ, ์์ฝ ๋ฌถ์, WeChat 24์๊ฐ ์ฐฝ๊ณผ ์ฐ์ฅ ์๋ฆผ
agent/ ์์ด์ ํธ ๋ชจ๋: DSH ํธ์คํธยท๋ธ๋ฆฌ์ง, ์น์ธ, ๊ถํ ํ๋ฆฌ์
, ๊ธฐ์ตยท์ปจํ
์คํธ ๊ด๋ฆฌ์, DSH ์ธ์
ํด๋
prompts/ ์์ด์ ํธ ๋ชจ๋ธ์ด ์ฝ๋ ๋ชจ๋ ํ๋กฌํํธ: ์ญํ , ๋ํ ๊ท์น, ๊ธฐ์ต ์๋ด, ๊ตฌ๊ฐ ์ฒซ ๋ฉ์์ง, ์คํฌ
tools/ ์์ด์ ํธ๊ฐ ์ฐ๋ ๊ธฐ๋ฅ: ์น ๊ฒ์(search.ts), ์ด๋ฏธ์งยท๋์์ ์์ฑ(media/), ์ปดํจํฐ ์ฌ์ฉ(computer-use/), Windows PowerShell(pwsh/), ์ฑ ์ฐ๊ฒฐ โ ๊ธฐ๋ณธ ์ ๊ณต ์ฑ ์ปค๋ฅํฐ์ ์ปค์คํ
MCP(apps/), ๊ธฐ์กด NotionยทFeishu ๊ณ์ (accounts/)
llm/ OpenAI ํธํ ํด๋ผ์ด์ธํธ(๋ชจ๋ธ ์ ๊ทผ ์ธํฐํ์ด์ค)
magpie/ magpie ๊ด๋ฆฌ: ๊ฒฉ๋ฆฌ ํด๋, ๋น ํฌํธ, ๋น๋ฐ ๊ฐ ์์ฑ, ์ํ ๊ฒ์ฌ, ์ถฉ๋ ํ ์ฌ์์, ์ ์ ์ข
๋ฃ
channels/ feishu/(์ง์ ์ฐ๊ฒฐ+CardKit) weixin/(iLink; MIT ๊ณ ์ง๋ LICENSE.openclaw-weixin) messenger/(TelegramยทSlackยทDiscord ๊ณตํต ์ก์์ ๊ฒฝ๋ก)
tasks/ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๊ณผ ๊ท์น: ์คํ, ๋จ๊ณ, ๋น์ฉ, ๋ณด์กด๊ณผ ์ ๋ฆฌ, ์ผ์
botkit/ ์นดํ๋ก๊ทธ ๋ด ํ๋ ์์ํฌ: ํจํค์ง ํ์, ๊ฒ์ฌ, ํจํน๊ณผ ์๋ช
, ์นดํ๋ก๊ทธ, ์ค์น, UI ์ ์ ๊ฒฝ๋ก(docs/bot-framework.md ์ฐธ๊ณ )
skills/ ์ฌ์ฉ์๊ฐ ์ง์ ์ค์นํ๋ ์คํฌ(ZIP ํจํค์ง)
store/ SQLite(node:sqlite, ๋ค์ดํฐ๋ธ ๋น๋ ๋ถํ์)
domain/ ์์ ๋ฐ์ดํฐ ํํ์ ๊ท์น: ๋ด ์ค์ , ๋ฐฉํด ๊ธ์ง ์๊ฐ, ์ผ์ , ์นดํ๋ก๊ทธ ๋ด ๊ธฐ๋ก, ์์ด์ ํธ ๋จ๊ณ. I/O ์์, i18n์๋ง ์์กด. store๋ ์ฌ๊ธฐ์๋ง ์์กด(์์กด ๋ฐฉํฅ์ test/architecture.unit.test.ts์์ ๊ฒ์ฌ)
account/ Modelflare ๊ณ์ : PKCE ๋ฃจํ๋ฐฑ ๋ก๊ทธ์ธ, ํ ํฐ ๊ต์ฒด, ์์กยท์๋ฆผ, ๋ด๋ณ ์์ฐ ํค, ๋ชจ๋ธ ๊ธฐ๋ฅยท์ฐธ๊ณ ๊ฐ๊ฒฉ
web/ ์ฝ์ ์๋ฒ: server.ts๊ฐ ์์ยท์ธ์ฆยท๋ถ๋ฐฐ, routes/์ ์์ญ๋ณ API(JSON API+SSE ์ค์๊ฐ ๋ํ), http.ts๋ ๊ณต์ฉ ๋์ฐ๋ฏธ
cli/ ์ฒซ ์คํ init ๋ง๋ฒ์ฌ, weixin-login
providers/ ๋ชจ๋ธ ์ถ์ฒ: modelflare.ts(๊ฒฝ๋ก, ํค ๊ฒ์ฆ GET /v1/models, ๋ชจ๋ธ ๋ผ์ฐํ
ยท์ถ์ฒ ํ์), modelflare-domains.ts(๊ฒฝ๋ก ์๋ ์ธก์ ), official.ts(๊ณต์ API ์ ๊ณต์
์ฒด ๋ชฉ๋ก, ์ฃผ์ ๊ณ ์ )
updates/ ์
๋ฐ์ดํธ: check.ts(์ ๋ฒ์ ํ์ธ), desktop.ts(๋ฐ์คํฌํฑ ๋ค์ด๋ก๋์ ์ฌ์์)
guide.ts ์์ ์ฒดํฌ๋ฆฌ์คํธ ์งํ ์ํ
i18n/ ์๋ฒ ๋ค๊ตญ์ด: ์ค๋ฅ, ์ํ ๋ฌธ๊ตฌ, ํธ๋ ์ด ๋ฉ๋ด, ๋ด ์์คํ
๋ฉ์์ง(messages/<namespace>.ts)
diagnostics.ts ๋ฌธ์ ํด๊ฒฐ: ์ง๋จ ์์ฒญ, ์ต๊ทผ ๋ก๊ทธ, ๋น๋ฐ ์ ๋ณด๋ฅผ ๊ฐ๋ฆฐ ์ง๋จ ๋ณด๊ณ ์
version.ts ์ฑ ๋ฒ์ (package.json)
main.ts ๋ช
๋ น์ค ์ง์
์
electron/ ๋ฐ์คํฌํฑ ๋ฉ์ธ ํ๋ก์ธ์ค(์คํ๊ธฐ+ํธ๋ ์ด)
ui/ ์ฝ์ ํ๋ฉด(Preact+htm, ๋ณ๋ ๋น๋ ์์)
design/ ๋์์ธ ์์คํ
: tokens/, base/, components/, ๋ด ์บ๋ฆญํฐ bots/
locales/ ํ๋ฉด ๋ฌธ๊ตฌ: zh-CN/, en/ ๋ฑ ์ธ์ด๋ณยท๋ค์์คํ์ด์ค๋ณ ํ์ผ
css/ lib/ components/ screens/ assets/ main.js
dsh-runtime/ DSH ์์ด์ ํธ ๋ฐํ์ ์์กด์ฑ ๋ฐ AnyModelBot ํ๋ฌ๊ทธ์ธ(plugins/)
scripts/ setup / build-magpie / fetch-cua-driver / prepare-dsh / bundle-dsh / electron-smoke / check-readme ๋ฑ
vendor/ Git ์๋ธ๋ชจ๋: magpie(๋น๋ ์ ์ปดํ์ผ), deepseek-harness, kimi-computer-use
site/ ์น์ฌ์ดํธ(Astro ์ ์ ์ฌ์ดํธ), site/README.md ์ฐธ์กฐ
docs/ ๊ฐ๋ฐ ์๋ด, ๊ฐ์ธ์ ๋ณด ์๋ด, README ์๋ฃ(docs/assets/)
Node.js 22.13 ์ด์๊ณผ magpie ์์ค ์ปดํ์ผ์ ์ํ Go 1.26.8 ์ด์์ด ํ์ํฉ๋๋ค.
npm install
npm run setup # vendor/magpie ์๋ธ๋ชจ๋์ ๊ฐ์ ธ์ build/bin/์ ์ปดํ์ผ
npm run init # ์ ํ: ํฐ๋ฏธ๋์์ ์ฒซ ์ค์ (Modelflare ๋ก๊ทธ์ธ, Feishu ์ธ์ฆ ์ ๋ณด)
npm start # ๊ฒ์ดํธ์จ์ด+๋ด+http://127.0.0.1:3600/ ์ฝ์ ์์๊ธฐ๋ณธ ๋ฐ์ดํฐ ํด๋๋ ./data์ด๋ฉฐ AMB_DATA_DIR๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์๋ .env.example์ ํ์ธํ์ธ์.
npm run electron:dev # ๊ฐ๋ฐ ๋ชจ๋ ์คํ
npm run electron:smoke # ์ค๋ชจํฌ ํ
์คํธ(ํ๋ฉด ์๋ Linux๋ xvfb-run ์๋ ์ฌ์ฉ)
npm run dist # ํ์ฌ ํ๋ซํผ์ฉ ํจํค์ง(magpie๋ resources/magpie/์ ํฌํจ)
npm run dist:linux | dist:mac | dist:win
npm run test:dsh-bundle # ํจํค์ง๋ build/dsh์ ์ค์ DSH ํตํฉ ํ
์คํธ(Electron, ๋จผ์ prepare:dsh+bundle:dsh ์คํ)- DSH ์์ด์ ํธ ๋ฐํ์:
scripts/prepare-dsh.mjs๊ฐ ๋์ ํ๋ซํผ์ ๋ง๊ฒdsh-runtime/์ ์ค์นํ๊ณscripts/bundle-dsh.mjs๊ฐresources/dsh/dsh.asar(๋ชจ๋ JavaScript๋ฅผ ํ ํ์ผ๋ก)์resources/dsh/node_modules/(๋ค์ดํฐ๋ธ ํจํค์ง๋ง, ์ฝ 55๊ฐ ํ์ผ)๋ก ๋ฌถ์ต๋๋ค. Electron ๋ฉ์ธ ํ๋ก์ธ์ค์ELECTRON_RUN_AS_NODE์์ ํ๋ก์ธ์ค๋ asar๋ฅผ ์ง์ ์ฝ์ผ๋ฉฐ ์ฒซ ์คํ ๋ ์์ถ์ ํ์ง ์์ต๋๋ค. ์ค์น ํ๋ก๊ทธ๋จ์ด ์๋ฐฑ ๊ฐ์ ํ์ผ๋ง ํ๋ฉด ๋๋ฏ๋ก Windows์ ์์ถ ํด์ ์ ํ์ผ๋ณ ๋ฐฑ์ ๊ฒ์ฌ๋ก ์ธํ ์ง์ฐ์ ์ค์ ๋๋ค. ๊ฐ๋ฐ ์ค์๋dsh-runtime/์ ์ง์ ์ฌ์ฉํฉ๋๋ค. - Windows ์์ด์ ํธ ๋ช
๋ น์ฉ PowerShell: ์๋๋ฐ์ค์์ Windows PowerShell 5.1์ ๋ช
๋ น๋น 20~30์ด, PowerShell 7์ ์ฝ 1์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ์ ํ ์์๋ ์์คํ
์ ์ฌ์ฉ ๊ฐ๋ฅํ PowerShell 7(DSH์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ ๋ฒ ์ํํ๋ฉฐ ๋ค์ด๋ก๋ํ์ง ์์) โ ์ฑ ์ ์ฉ PowerShell 7 โ Windows PowerShell 5.1์
๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ 7์ด ์๊ณ ์์ด์ ํธ ๋ชจ๋๊ฐ ์ผ์ ธ ์์ผ๋ฉด ๊ณต์ PowerShell 7.6.9(LTS) zip์ ๋ฐฑ๊ทธ๋ผ์ด๋์์
%LOCALAPPDATA%\AnyModelBot\pwsh\๋ก ๋ค์ด๋ก๋ํฉ๋๋ค. ๊ด๋ฆฌ์ ๊ถํ, ๋ ์ง์คํธ๋ฆฌ ์ฐ๊ธฐ, PATH ๋ณ๊ฒฝ์ด ํ์ ์์ผ๋ฉฐ ๊ธฐ์กด PowerShell์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฒ์ ๊ณผ x64/arm64 zip์ SHA256์src/tools/pwsh/private.ts์ ๊ณ ์ ํฉ๋๋ค(node scripts/pwsh-hashes.mjs <version>์ผ๋ก ๊ฐฑ์ ). ๋ค์ด๋ก๋ ํ ํด์, ์์ถ ํด์ ํ Microsoft Authenticode ์๋ช ์ ํ์ธํ๊ณ DSH ๋ฐฉ์์ ์ํ ์คํ(๋ฒ์ , ์์ ํ์ผ ์ฝ๊ธฐยท์ฐ๊ธฐ, ์ธ๋ถ ํ๋ก๊ทธ๋จ ์คํ)์ ํต๊ณผํด์ผ ์ฌ์ฉํฉ๋๋ค. ์คํจํ๊ฑฐ๋ ๋ฏธ์๋ฃ๋ ์ค์น๋ ์ฌ์ฉํ์ง ์๊ณ ๋ค์ ์คํ ์ ์ ๋ฆฌํฉ๋๋ค. ์ค์น ์ค์๋ ๋ํ ํ๋ฉด, ์ค์ โ ์ผ๋ฐ,/status์ ์งํ ์ํฉ์ ํ์ํ๋ฉฐ ์ค๋น๋ ๋๊น์ง 5.1์ ์ฌ์ฉํฉ๋๋ค. ๋๊ธฐ ์ค์ธ ์์ด์ ํธ๋ ์ฑ ์ฌ์์ ์์ด ์ ํ๋ฉ๋๋ค. ์คํ ์ค ์์ํ ์ ์๊ฒ ๋๋ฉด(์ญ์ ยท๋ฐฑ์ ๊ฒฉ๋ฆฌยท์ ์ฑ ์ฐจ๋จ) ์ด์ ์ ํ์ง๋ก ๋์๊ฐ๊ณ ์ด์ ๋ฅผ ์๋ดํฉ๋๋ค. ์ค์ โ ๋ฌธ์ ํด๊ฒฐ์์ ์ค์นยท์ฌ์ค์นยท์์คํ ๊ธฐ๋ณธ๊ฐ ๋ณต๊ท๊ฐ ๊ฐ๋ฅํฉ๋๋ค. Windows 10 1607 / Server 2016๋ณด๋ค ์ค๋๋ ์์คํ ์์๋ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค. ๋ฐ์คํฌํฑ ์ฑ์ Chromium ๋คํธ์ํฌ ์คํ์ผ๋ก ์์คํ ํ๋ก์๋ฅผ ์ฌ์ฉํ๊ณ ๋ช ๋ น์ค์ Node fetch๋ฅผ ์ฌ์ฉํฉ๋๋ค(์ต๊ทผ Node์์๋NODE_USE_ENV_PROXY=1์ผ ๋HTTPS_PROXY์ ์ฉ).AMB_PWSH_MIRROR๋ก ๋ฏธ๋ฌ ์ ๋์ฌ๋ฅผ ์ง์ ํด๋ ํด์์ ์๋ช ์ ๊ฒ์ฌํ๋ฉฐAMB_PWSH_AUTO_INSTALL=0์ผ๋ก ์๋ ์ค์น๋ฅผ ๋๋๋ค. - ์์ด์ ํธ ๋ช
๋ น์ ๋คํธ์ํฌ์ ์ ๊ทผํ๋ฉฐ ํ๋ก์๋ฅผ ์ฌ์ฉํฉ๋๋ค(์๋๋ฐ์ค๋ ์ฐ๊ธฐ๋ง ์ ํ).
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXY์ ์๋ฌธ์ ํํ, ์ธ์ฆ์ยทํจํค์ง ์ธ๋ฑ์ค ๋ณ์(SSL_CERT_FILE,REQUESTS_CA_BUNDLE,NODE_EXTRA_CA_CERTS,PIP_INDEX_URL,npm_config_registry,GOPROXY๋ฑ)๋ฅผ ์ฑ ํ๊ฒฝ์์ ์ ๋ฌํฉ๋๋ค. ํ๊ฒฝ์ ํ๋ก์๊ฐ ์์ผ๋ฉด ๋ฐ์คํฌํฑ ์ฑ์ด ์์ด์ ํธ ์์๋ง๋ค ์์คํ ์ค์ ๊ณผ PAC๋ฅผ ์กฐํํดhttp://host:portํํ๋ก ์ ๋ฌํฉ๋๋ค(src/agent/proxy-env.ts). ๋ฃจํ๋ฐฑ(127.0.0.1,localhost,::1)์ ํญ์NO_PROXY์ ์ถ๊ฐํ๋ฉฐ ํ๋ก์๋ฅผ ๊ฑฐ์น์ง ์์ต๋๋ค. - ๋ฐ์ดํฐ ํด๋:
<userData>/data(macOS~/Library/Application Support/anymodel bot/data, Windows%APPDATA%\anymodel bot\data, Linux~/.config/anymodel bot/data). ๋ก๊ทธ๋ ๋ฐ์ดํฐ ํด๋์logs/app.log์ ์์ต๋๋ค. - ๋จ์ผ ์ธ์คํด์ค๋ก ์คํํฉ๋๋ค. ์ฐฝ์ ๋ซ์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋ ์ด์ ์จ๊น๋๋ค(์ค์ โ ์ผ๋ฐ์์ ์ข ๋ฃํ๋๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ). ํธ๋ ์ด ๋ฉ๋ด: ์ด๊ธฐ / ๋ธ๋ผ์ฐ์ ์์ ์ด๊ธฐ / ๋ก๊ทธ์ธ ์ ์คํ(macOS, Windows) / ๋ฐ์ดํฐ ํด๋ ์ด๊ธฐ / ์ข ๋ฃ.
- macOS ์ฐฝ์๋ ์ ๋ชฉ ํ์์ค์ด ์๊ณ ์ฐฝ ์ ์ด ๋ฒํผ์ ์ฌ์ด๋๋ฐ ์๋จ์ ์์ต๋๋ค. ์ต์ ์ฐฝ ๋๋น๋ 860์ ๋๋ค.
- ์ฝ์์ 127.0.0.1์์๋ง ์์ ๋๊ธฐํ๊ณ ์์๋ง๋ค ์์ ์ ๊ทผ ํ ํฐ์ ์์ฑํ์ฌ ๋ค๋ฅธ ๋ก์ปฌ ํ๋ก๊ทธ๋จ์ ๊ด๋ฆฌ API ์ง์ ํธ์ถ์ ๋ง์ต๋๋ค.
- ์ข ๋ฃ ์ ์ฑ๋์ ๋จผ์ ์ค์งํ๊ณ magpie๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด์ ์คํ์ด ๊ฐ์ ์ข ๋ฃ๋์ด magpie๊ฐ ๋จ์๋ค๋ฉด ๋ค์ ์คํ์์ ์ ๋ฆฌํฉ๋๋ค(Linux/macOS).
๋ฆด๋ฆฌ์ค: CHANGELOG.md, CHANGELOG_en.md, CHANGELOG_ja.md, CHANGELOG_ko.md, CHANGELOG_ru.md, CHANGELOG_es.md, CHANGELOG_pt.md์ ํด๋น ๋ฒ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ์์ฑํฉ๋๋ค(์น์ฌ์ดํธ๋ ๋ด๋ถ ๊ตฌํ๋ณด๋ค ์ฌ์ฉ์๊ฐ ๋๋ผ๋ ๋ณ๊ฒฝ ์ค์ฌ, ์๋ฌธ ์ฌ์ดํธ๋ WeChatยทFeishu๊ฐ ์ธ๊ธ๋ ์ค ์ ์ธ). package.json์ version์ ์ฌ๋ฆฌ๊ณ ์ปค๋ฐํ ๋ค v<version> ํ๊ทธ๋ฅผ ํธ์ํฉ๋๋ค. ๋ณ๊ฒฝ ๋ด์ญ์ด ์์ผ๋ฉด ๋ฆด๋ฆฌ์ค ์ํฌํ๋ก๊ฐ ์ฒ์์ ์คํจํฉ๋๋ค. ์์ผ๋ฉด GitHub Release ๋
ธํธ์ ์ฌ์ดํธ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ฐ์๋ฉ๋๋ค. ์ฑ์ โ์
๋ฐ์ดํธ ๋ด์ฉโ ๋ํ์์๋ ๊ฐ์ ๋ณ๊ฒฝ ๋ด์ญ์ ์ฝ์ต๋๋ค. CHANGELOG*.md๋ ์ค์น ํ์ผ๊ณผ Docker ์ด๋ฏธ์ง์ ํฌํจ๋๋ฉฐ(src/changelog.ts), ์์ง ์ค์นํ์ง ์์ ์ ๋ฒ์ ์ ๋ด์ฉ์ ์ฌ์ฉ์๊ฐ ์ด ๋ ํด๋น ๋ฒ์ ํ๊ทธ์์ ์ฝ์ด ์ต๋๋ค. .github/workflows/release.yml์ด 6๊ฐ OS/์ํคํ
์ฒ ๋ฌ๋์์ ๋น๋ํ๊ณ ์ค์น ํ์ผ๊ณผ SHA256SUMS๋ฅผ GitHub Release์ ๊ฒ์ํฉ๋๋ค. ์๋ช
ยท๊ณต์ฆ์ ํ์ํ ์ ์ฅ์ ๋น๋ฐ ๊ฐ์ ํด๋น ํ์ผ ์๋จ ์ฃผ์์ ํ์ธํ์ธ์. ๊ฐ์ ํ๊ทธ๊ฐ .github/workflows/docker.yml๋ ์คํํ์ฌ x64+arm64 ์ด๋ฏธ์ง๋ฅผ ghcr.io/modelflare-ai/anymodel-bot์ <version>, latest ํ๊ทธ๋ก ๊ฒ์ํฉ๋๋ค. ํ๊ทธ๋ก ๋ฐฐํฌํ ๋ macOS ์ค์น ํ์ผ์ Developer ID ์๋ช
๊ณผ ๊ณต์ฆ์ด ํ์์ด๋ฉฐ, ํจํค์ง ํ .app๊ณผ DMG ์์ .app์ spctl ๋ฑ์ผ๋ก ๊ฒ์ฌํด ํต๊ณผํ์ง ๋ชปํ๋ฉด ์คํจํฉ๋๋ค. ์ ์ ๋น๋๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋๋๋ค. ๋๋ฒ๊ทธ ๋น๋๊ฐ ํ์ํ๋ฉด npm run dist:debug๋ฅผ ์ฐ๊ฑฐ๋ Release๋ฅผ ์๋ ์คํํ ๋ debug_build๋ฅผ ์ ํํฉ๋๋ค(ํ์ผ ์ด๋ฆ์ -debug-๊ฐ ๋ถ๊ณ , ํ๊ทธ์์๋ ๊ฑฐ๋ถ๋๋ฉฐ, scripts/check-build-flavor.mjs๊ฐ ํจํค์ง ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค).
๋ฒ์ ์ ๋ฐฐํฌํ ๋๋ง๋ค ๊ณต์ ์ฌ์ดํธ, ๊ด๋ จ ๋ฌธ์์ ๋ชจ๋ ์ธ์ด์ README๋ฅผ ํจ๊ป ์
๋ฐ์ดํธํฉ๋๋ค. npm --prefix site run sync๋ก ์ฌ์ดํธ ๋ด์ฉ์ ๋๊ธฐํํ๊ณ GitHub Release์ Docker ์ด๋ฏธ์ง ๊ฒ์ ํ ์ฌ์ดํธ ๋ฐฐํฌ ์๋ด์ ๋ฐ๋ผ ์ด์ ์ฌ์ดํธ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. /download, /changelog, /bots์ ๋ฒ์ , ๋ค์ด๋ก๋ ๋งํฌ์ ์ค๋ช
์ด ์ผ์นํ๋์ง ํ์ธํ๋ฉฐ ์ด์ ์ฌ์ดํธ๊น์ง ๋ฐ์๋์ด์ผ ๋ฐฐํฌ๊ฐ ์๋ฃ๋ฉ๋๋ค.
์ฑ ๋ด ์
๋ฐ์ดํธ๋ 0.1.29๋ถํฐ ํจํค์ง๋ macOS, Windows, Linux AppImage์์ electron-updater๋ก ์ ๊ณตํฉ๋๋ค. ui.autoDownloadUpdates์ ๊ธฐ๋ณธ๊ฐ์ true์ด๋ฉฐ ์ค์ โ ์ผ๋ฐ์์ ๋ณ๊ฒฝํฉ๋๋ค. ๋ค์ด๋ก๋ ํ ์๋ฆผ๋ง ํ์ํ๊ณ ์ผ๋ฐ ์ข
๋ฃ ์์๋ ์ค์นํ์ง ์์ต๋๋ค. ์ฌ์์ ์ ์ ์คํ ์ค์ธ ๋ํ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ํ์ธํฉ๋๋ค. 0.1.28 ์ด์ ์ฌ์ฉ์๋ ์
๋ฐ์ดํธ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๋ฒ์ ์ ํ ๋ฒ ์ง์ ์ค์นํด์ผ ํฉ๋๋ค. GitHub ๋น๋๋ macOS DMG์ ์
๋ฐ์ดํธ์ฉ ZIP, ์ํคํ
์ฒ๋ณ latest-${arch} ๋ฉํ๋ฐ์ดํฐ์ blockmap์ ๋ง๋ค๊ณ ๋ชจ๋ ํ์ผ ์
๋ก๋ ํ Release๋ฅผ ๊ณต๊ฐํฉ๋๋ค. CLI, Docker์ ํจํค์งํ์ง ์์ ๊ฐ๋ฐ ์คํ์ ์๋ ์
๋ฐ์ดํธ๋ฅผ ์ ์งํฉ๋๋ค.
์ฌ์ฉ์๋ ๊ฒ์๋ ์ด๋ฏธ์ง๋ก ์คํํฉ๋๋ค: docker run -d --name amb -p 3600:3600 -v amb-data:/data ghcr.io/modelflare-ai/anymodel-bot. ์์ค์์ ์ง์ ๋น๋ํ๋ ค๋ฉด:
git submodule update --init --depth 1 vendor/magpie
docker build -t anymodel-bot .
docker run -d --name amb -p 3600:3600 -v amb-data:/data anymodel-bot
docker exec amb cat /data/ui-token # http://<host>:3600/?token=<token> ์ด๊ธฐ์ปจํ ์ด๋ ๋ด๋ถ ์ฝ์์ 0.0.0.0์์ ์์ ๋๊ธฐํ๋ฏ๋ก ํ ํฐ ์ ๊ทผ์ด ํ์์ ๋๋ค. 3600 ํฌํธ๋ฅผ ์ธํฐ๋ท์ ์ง์ ๋ ธ์ถํ์ง ๋ง์ธ์. WeChat QR ๋ก๊ทธ์ธ์ ์ค์ โบ ์ฑํ ์ฑ๋์ ์์ต๋๋ค.
- ์ฒซ ํ๋ฉด์ โModelflare ๋ก๊ทธ์ธ / ํ์๊ฐ์
โ์ ๋๋ฅด๋ฉด ์์คํ
๋ธ๋ผ์ฐ์ ์์ ๋ก๊ทธ์ธยท๊ฐ์
ํ๊ณ ๊ณ์ ๋ฒํผ์ผ๋ก ์ ๊ทผ์ ํ์ฉํฉ๋๋ค. ์ฑ์ผ๋ก ๋์์ค๋ฉด ์ด ์ปดํจํฐ ์ ์ฉ API ํค๋ฅผ ๋ฐ๊ธยท์ฐ๊ฒฐํ๊ณ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ์ ํํ ๋ค ๋ํ๋ฅผ ์์ํฉ๋๋ค. Dockerยท์๊ฒฉ ๋ฐฐํฌ๋ ๋ธ๋ผ์ฐ์ ์ฝ๋ฐฑ์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก, ๋ก๊ทธ์ธ ํ ์ด๋ํ๋ ์ด๋ฆฌ์ง ์๋
127.0.0.1์ฃผ์์ ๋งํฌ๋ฅผ ์ฒซ ํ๋ฉด์ ๋ถ์ฌ ๋ฃ์ต๋๋ค(POST /amb/api/account/login/complete, state์ PKCE ๊ฒ์ฆ์ ๋์ผ). ์ด์ ๋ฒ์ ์์ API ํค๋ฅผ ์ ๋ ฅํ๊ณ ๋ก๊ทธ์ธํ์ง ์์ ๊ฒฝ์ฐ ์ ๊ทธ๋ ์ด๋ํ ๋ ํค๋ฅผ ๊ธฐ๊ธฐ์์ ์ ๊ฑฐํ๋ฏ๋ก ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ฝ๋ฐฑ ํ์ด์ง๋ ๋จผ์ โ๋ก๊ทธ์ธ์ ์๋ฃํ๋ ์คโ์ ๋ณด์ฌ ์ฃผ๊ณ , ํ ํฐ ๊ตํยท๊ณ์ ์กฐํยท๊ธฐ๊ธฐ ์ ์ฉ ํค ๋ฐ๊ธยท๊ฒ์ดํธ์จ์ด ์ฐ๊ฒฐ์ด ๋ชจ๋ ์ฑ๊ณตํ ๋ค์์ผ โ๋ก๊ทธ์ธ ์ฑ๊ณตโ์ ํ์ํฉ๋๋ค(์คํจํ๋ฉด ์ด์ ํ์). ๋ฐ์คํฌํฑ ์ฑ์anymodelbot://๋งํฌ๋ฅผ ๋ฑ๋กํ๊ณ , ํ์ด์ง๋ ์ด๋ฆด ๋ ํ ๋ฒ ์ฑ์ ์ด์ด ๋ณด๋ฉฐ โAnyModelBot ์ด๊ธฐโ๋ก ๋ค์ ์๋ํ ์ ์์ต๋๋ค. ์ฑ์ด ์ค์ ๋ก ๊ทธ ๋งํฌ๋ฅผ ๋ฐ์์ ๋๋ง โ๋์๊ฐ์ต๋๋คโ๋ฅผ ํ์ํฉ๋๋ค. ์ง์ API ํค๋ฅผ ์ฐ๋ ํ๋ฉด์์๋ Modelflare ๊ณ์ ์ผ๋ก ๋ฐ๋ก ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค. ์ฒ์ ์ฐ๊ฒฐํ ๋ ์ ์ญ ๊ธฐ๋ณธ ๋ชจ๋ธ์ด ๋น์ด ์์ผ๋ฉดsrc/account/first-model.ts์ ๊ท์น(๋๊ตฌ ํธ์ถ ์ง์, 1ํ ์ ์ ๊ธ์ก๊ณผ ๋ํ ์์ ๋น์ฉ์ด ์ฒดํ ํ๋ ์, DeepSeek ์ฐ์ )์ผ๋ก ์ฒซ ์ฌ์ฉ ๋ชจ๋ธ์ ํ ๋ฒ ๊ณ ๋ฆ ๋๋ค. ๋ง๋ ๋ชจ๋ธ์ด ์์ผ๋ฉด ๋ฏธ๋ฆฌ ๊ณ ๋ฅด์ง ์๊ณ ์ฌ์ฉ์๊ฐ ๊ณ ๋ฆ ๋๋ค. - ๋ก๊ทธ์ธ ๋ฐฉ์์ RFC 8252์ ๋ค์ดํฐ๋ธ ์ฑ์ ๋ง์ถ OIDC ์ธ์ฆ ์ฝ๋+PKCE(RFC 7636)์
๋๋ค. ๊ณต๊ฐ ํด๋ผ์ด์ธํธ(
client_id:anymodel-bot)๋ก์ ํด๋ผ์ด์ธํธ ๋น๋ฐ ๊ฐ์ด ์๊ณ ํ์ํ์ง๋ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋127.0.0.1์ ์์ ํฌํธ๋ก ์ ๋ฌ๋ฉ๋๋ค. Modelflare ํ๋กํ์ ์ธ์ฆ๋ ์ฑ์์ ๊ถํ์ ์ทจ์ํ๋ฉด ์ฑ์ด ์ด๋ฅผ ๊ฐ์งํด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋์์ต๋๋ค. - ๊ฐฑ์ ํ ํฐ์ ๋ฐ์ดํฐ ํด๋์
modelflare-account.json(๊ถํ 600)์ ์ ์ฅํ๋ฉฐ, ๋ด์ฅ ๊ฒ์ดํธ์จ์ด์ API ํค์ฒ๋ผ ํ์ผ ๊ถํ์ผ๋ก๋ง ๋ณดํธํ๊ณ ์์คํ ํค์ฒด์ธ์ ์ฐ์ง ์์ต๋๋ค(0.1.30 ์ดํ ๋ฐ์คํฌํฑ ์ฑ์ด ์ํธํํ ํ์ผ์ ์ฒ์ ์ฝ์ ๋ ํ๋ฌธ์ผ๋ก ๋ค์ ์๋๋ค). ํ๋ฉด์๋ ๊ณ์ ์ด๋ฆ๋ง ์ ๋ฌํฉ๋๋ค. ๋ก๊ทธ์์ํ๋ฉด ์ปดํจํฐ์ ๊ถํ์ ์ทจ์ํ๊ณ Modelflare๊ฐ ๋ก๊ทธ์ธ ์ ์ปดํจํฐยท๋ด์ ๋ฐ๊ธํ ํค๋ฅผ ์ญ์ ํฉ๋๋ค. - ์์ก์ ์์ ํ์ํ์ง ์์ต๋๋ค. ์ฌ์ด๋๋ฐ ์ผ์ชฝ ์๋ ์๋ฐํ ๋๋ ์ค์ โ ๋ชจ๋ธ์์ ์ง๊ฐ ์์ก์ ํ์ธํฉ๋๋ค. ์ถฉ์ ์ Modelflare ์น์ฌ์ดํธ๋ฅผ ์ด๊ณ ์ฑ์ผ๋ก ๋์์ค๋ฉด ์์ก์ ๊ฐฑ์ ํฉ๋๋ค. ์๋ฆผ ๊ธฐ์ค(๊ธฐ๋ณธ US$1, ๋ณ๊ฒฝยทํด์ ๊ฐ๋ฅ) ์๋๊ฐ ๋๋ฉด ํ ๋ฒ ์๋ฆฌ๋ฉฐ WeChat/Feishu๋ก๋ ๋ณด๋ผ ์ ์์ต๋๋ค.
- ๋ก๊ทธ์ธํ๋ฉด ์ค์ โ ๋ชจ๋ธ์ ์ผ๋ณยท๋ชจ๋ธ๋ณ ์ฌ์ฉ๋, Modelflare ์๋ฆผ, ์ด๋ ๋งํฌ๋ ํ์ํฉ๋๋ค.
- ๋ด ์์ฐ(๋ก๊ทธ์ธ ํ์): ๋ด ์ค์ โ ์์ฐ. ์ผ๋ฉด ์ค์ ๊ธ์ก์ด ํ๋์ธ ์ ์ฉ ํค(๊ฒ์ดํธ์จ์ด์ ๋ณ๋ provider)๋ฅผ ์ฐ๊ณ ๋๋ฉด ๊ณต์ ํค๋ก ๋์๊ฐ๋๋ค.
- ์ถ๋ก ๊ฐ๋: ๋ชจ๋ธ ์ ํ ํจ๋ ๋๋ ์ค์ โ ๋ชจ๋ธ์์ ๊ณ ๋ฆ
๋๋ค(์๋ / ๋ฎ์ / ๋ณดํต / ๋์). ์ ์ญ ์ค์ ํ๋์ด๋ฉฐ ๋ค์ ํด๋ถํฐ ์ ์ฉ๋ฉ๋๋ค. ์๋์ด๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด๋ด์ง ์๊ณ ๋ชจ๋ธ ๊ธฐ๋ณธ๊ฐ์ ์๋๋ค. ์ง์ํ๋ ๋ชจ๋ธ์๋ง ์ ์ฉ๋ฉ๋๋ค. Responses API์ ์ถ๋ก ๋ชจ๋ธ, ๋ชจ๋ธ ํ๋กํ์ ์ถ๋ก ์ผ๋ก ํ์๋ Chat ๋ฐ Claude์
๋๋ค(Claude 4.6 ์ด์์ adaptive์
output_config.effort, ์ด์ ๋ชจ๋ธ์budget_tokens). - ์ด๋ฏธ์งยท๋์์ ์์ฑ: ์์ด์ ํธ์
media_models(๋ชจ๋ธยท๊ธฐ๋ณธ๊ฐยท๋งค๊ฐ๋ณ์ ๋ฒ์ยท์ฐธ๊ณ ๊ฐ๊ฒฉ),media_docs(docs.modelflare.dev์์ ์์ฒญ ํ์ ์ค์๊ฐ ์กฐํ),generate_image,generate_video์ ๋ด์ฅ ๋ฏธ๋์ด ์คํฌ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ธ๋ง๋ค ํ์์ด ๋ฌ๋ผ ๋ฌธ์๋ฅผ ๋ณด๊ณ ์์ฒญ ๋ณธ๋ฌธ์ ์์ฑํฉ๋๋ค. ์์ ๊ณต๊ฐ์ ์ฐธ๊ณ ์ด๋ฏธ์ง๋workspace:path๋ก ์ง์ ํฉ๋๋ค. ํค๋ ์ฑ์ ๋ฒ์ด๋์ง ์์ต๋๋ค. ์ฑ์ด ๋ด ํค๋ก Modelflare๋ฅผ ํธ์ถํ๊ณ ์์ ๊ณต๊ฐmedia/์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋ํ๋ก ์ ๋ฌํฉ๋๋ค. - ์์ฑ ์ ํ์ธ: ๊ธฐ๋ณธ์ ์ผ๋ก ์ฆ์ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ ๋ชจ๋ธ์ด ์๋๊ฑฐ๋ ์์ฒญ์ด ๋ชจํธํ๋ค๋ ์ด์ ๋ง์ผ๋ก ๋ฌป์ง ์๊ณ ํฉ๋ฆฌ์ ์ผ๋ก ํด์ํ ๋ค ๊ฒฐ๊ณผ์์ ์ฌ์ฉํ ๋ด์ฉ์ ํ ์ค๋ก ์ค๋ช ํฉ๋๋ค. ์์ ๋น์ฉ์ด $0.5๋ฅผ ๋์ ๋๋ง ํ๋กฌํํธยท๋งค๊ฐ๋ณ์ยท์ฐธ๊ณ ๊ฐ๊ฒฉยทํ์ธ ์ด์ ์ ํจ๊ป ๋ชจ๋ธ์ ๋ฌป์ต๋๋ค(์ด๋ฏธ์ง ์, ๋์์ ๊ธธ์ดยทํด์๋ ๋ฑ์ผ๋ก ๊ณ์ฐํ๋ฉฐ ๋น์ฉ์ ์ถ์ ํ ์ ์๋ ๋์์๋ ํฌํจ). ์น์ธยท๋ชจ๋ธ ๋ณ๊ฒฝยท์ทจ์๊ฐ ๊ฐ๋ฅํ๋ฉฐ WeChat์์๋ ๋ฒํธ๋ ๋ชจ๋ธ ์ด๋ฆ์ผ๋ก, Feishu/์น์์๋ ํด๋ฆญ์ผ๋ก ๋ตํฉ๋๋ค. 10๋ถ ๋ด ๋ต์ด ์์ผ๋ฉด ์์ฑํ์ง ์์ต๋๋ค. ํญ์ ํ์ธํ๋ ค๋ฉด ๋ด ์ค์ โ ์ด๋ฏธ์ง์ ๋์์ โ ์์ฑ ์ ์ ํ์ธ โ ํญ์ ํ์ธ์ ์ ํํ์ธ์.
- ์น ๊ฒ์:
web_search๋ DeepSeek ํค๊ฐ ํ์ํ ์์ฒด ๊ฒ์์ ์ฐ์ง ์๊ณamb-web-searchํ๋ฌ๊ทธ์ธ์ ํตํด ์ฑ์ ์์ํฉ๋๋ค. ๊ธฐ๋ณธ ๊ฒ์์ ๋ฌด๋ฃ์ด๋ฉฐ Exa ๊ณต๊ฐ MCP, Bing, DuckDuckGo๋ฅผ ์์๋๋ก ์๋ํ๋ ์ต๊ทผ ์ฑ๊ณตํ ๊ฒ์ ์ฐ์ ํฉ๋๋ค. ์คํจํ ์ ๊ณต์ ์ฒด(์์ฒญ ์ ํ, ๋ด ๊ฒ์ฌ, ๋ฌด๊ดํ Bing ๊ฒฐ๊ณผ)๋ 10๋ถ๊ฐ ๊ฑด๋๋๋๋ค. ์ค์ โ ๋คํธ์ํฌ ๋ฐ ์ ๊ทผ โ ์น ๊ฒ์์์ Tavily, Exa, Bocha, Zhipu(ํค ํ์), ์์ฒด SearXNG๋ฅผ ์ง์ ํ๋ฉด ์ฐ์ ์ฌ์ฉํ๊ณ ์คํจ ์ ๋ฌด๋ฃ ๊ฒ์์ผ๋ก ๋์ฒดํฉ๋๋ค. ํค๋ ์ฑ๋ ํ ํฐ์ฒ๋ผ ๋ก์ปฌ DB์ ์ ์ฅํ๋ฉฐ ์์ด์ ํธ์ ์ ๋ฌํ์ง ์์ต๋๋ค. ๋ฐ์คํฌํฑ์ ์์คํ ํ๋ก์, ๋ช ๋ น์ค์ Node fetch(NODE_USE_ENV_PROXY=1์ด๋ฉดHTTPS_PROXY์ ์ฉ)๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์ฑํ
์ฑ๋ ๊ณ์ (
src/core/routes.ts): WeChat, Feishu, Telegram, Slack, Discord๋ ์ ์ญ ๊ณ์ ์ ๋๋ค. ์ค์ โบ ์ฑํ ์ฑ๋์์ ์ถ๊ฐํ๊ณ ๋ณ์นญ์ ์ง์ ํฉ๋๋ค. ๋ฉ์์ง ์์ ๋ด์ ์ฌ์ฉ์๊ฐ/bot์ผ๋ก ์ ํํ ๋ด โ ๊ณ์ ๊ธฐ๋ณธ ๋ด โ ์ฒซ ๋ฒ์งธ ๋ด ์์์ ๋๋ค./bot์ ๋ชฉ๋ก,/bot name์ ์ ํ ํ ์ ํ ์ ์ฅ์ ๋๋ค. ๊ฐ ๋ด์ ์์คํ ํ๋กฌํํธ์ ๋ค๋ฅธ ๋ด๊ณผ ์ ํ๋ฒ์ ๋ฃ์ด ๊ด๋ จ ์ง๋ฌธ์ ๋ตํ๊ฒ ํฉ๋๋ค. ์์ ์ยทํ์ฉ ๋ชฉ๋ก์ ๊ณ์ ์ ์ํ๋ฏ๋ก ํ์ฉ๋ ์ฌ์ฉ์๋ ๋ชจ๋ ๋ด๊ณผ ๋ํํ ์ ์์ต๋๋ค. ๊ณ์ ํค๋ ๋ค์์คํ์ด์ค์ด๋ฉฐ ๊ธฐ์กด ์ฑ๋์ ์ด์ ๋ด ID๋ฅผ ์ ์งํด ๋ก๊ทธ์ธยทํ๋ยทํ์ฉ ๋ชฉ๋กยท๋๊ธฐ์ด๊ณผ ๊ธฐ๋ณธ ๋ด์ด ๊ทธ๋๋ก ๋จ์ต๋๋ค. ๋ด ์ญ์ ๋ ๊ณ์ ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. - ์ฑ ์ฐ๊ฒฐ(
src/tools/apps/service.ts): ์ ์ญ ๋ชฉ๋ก ํ๋(์๋ฐํ ๋ฉ๋ด โบ ์ฑ ์ฐ๊ฒฐ)์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ด์ด ์ฐ๊ฒฐ๋ ์ฑ์ ์ฌ์ฉํ ์ ์๊ณ , ๋ด๋ณยท๋๊ตฌ๋ณ๋ก ์ขํ ์ ์์ต๋๋ค(๋ด ์ค์ โบ ์ฑ). ์ฑ์ ์ฑ ํ์ด์ง์์ ์นด๋ ํ๋๋ก ํ์๋๋ฉฐ ์ฌ๋ฌ ๊ณ์ ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ค ๋ด์๊ฒ๋ โ์ฒซ ๋ฒ์งธ Feishu์ ๋ ๋ฒ์งธ Feishu ํ์ธํด ์คโ๋ผ๊ณ ํ ์ ์๊ณ , ๊ณ์ ์ ๋๊ตฌ์account์ธ์(๋ฒํธ ๋๋ ์ด๋ฆ)๋ก ๊ณ ๋ฆ ๋๋ค.- ๊ธฐ๋ณธ ์ ๊ณต ์ฑ(
catalog.ts): Feishu, Tencent Docs, DingTalk, Amap, Yuque, Notion, GitHub, Linear, Atlassian, Canva. ์ธ์ฆ ๋ฐฉ์์ ์ปค์คํ ์ปค๋ฅํฐ์ ๊ฐ์ต๋๋ค: ๋ก๊ทธ์ธ ์ธ์ฆ(OAuth, ๋์ ๋ฑ๋ก,oauth.ts), ์์ฒญ ํค๋, ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์, ์ ์ฉ URL. Yuque๋ ์ฑ์ ํฌํจ๋ ๋ก์ปฌ ํ๋ก๊ทธ๋จ(vendor/yuque-mcp,scripts/vendor-yuque-mcp.mjs๋ก ์์ฑ)์ด๋ฉฐ ์ฌ์ฉ์๋ ํ ํฐ๋ง ๋ถ์ฌ๋ฃ์ต๋๋ค. - ์ปค์คํ
์ปค๋ฅํฐ: ์๊ฒฉ Streamable HTTP(์ฐ๊ฒฐ๋์ง ์์ผ๋ฉด ๊ตฌํ SSE) ๋๋ ๋ก์ปฌ ๋ช
๋ น, ์ต๋ 20๊ฐ. ๋ถ์ฌ๋ฃ๊ธฐ ์ธ์๊ณผ ์์ โ JSON ๋ณํ์
ui/lib/connector-config.js์ ์์ต๋๋ค. ๋ก์ปฌ ๋ช ๋ น์ ๋ก๊ทธ์ธ ์ ธ์ PATH(shell-path.ts)๋ก ์คํํ๋ฉฐ, ์ฒ์์ ํจํค์ง๋ฅผ ๋ด๋ ค๋ฐ๋ ์คํ๊ธฐ(npx, uvx)๋ ๋ ์ค๋ ๊ธฐ๋ค๋ฆฝ๋๋ค. - ์ฐ๊ฒฐ์ ๋ฉ์ธ ํ๋ก์ธ์ค๊ฐ ํฉ๋๋ค(
mcp-client.ts, ๊ณต์@modelcontextprotocol/client): ์๊ฒฉ ์ฆ๋ช ์ ๋ฉ์ธ ํ๋ก์ธ์ค์๋ง ์๊ณapp-secrets.json(๊ถํ 600, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ,secrets.ts)์ ์ ์ฅ๋ฉ๋๋ค.amb-connectionsํ๋ฌ๊ทธ์ธ์ด ๊ฐ ๋๊ตฌ ํธ์ถ์ bridge๋ฅผ ํตํด ์ฑ์ ๋๊น๋๋ค. MCP ์ฐ๊ฒฐ์ ๋๊ตฌ๋ ํ๋์ฉ ๋ฑ๋กํ์ง ์๊ณ , ๋ชจ๋ธ์๋ ๊ณ ์ ๋ ๋๊ตฌ ์ธ ๊ฐ๋ฅผ ์ค๋๋ค:app_tools(๋๊ตฌ ์ฐพ๊ธฐ),app_tool_schema(๋งค๊ฐ๋ณ์ ๋ณด๊ธฐ),app_call(์คํ). ๊ทธ๋ฆฌ๊ณapp_connect๋ก ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐ์ ์์ฒญํ ์ ์์ต๋๋ค(๋ํ์ ์นด๋๊ฐ ๋ํ๋๊ณ , ์ฐ๊ฒฐ๋๋ฉด ์์ ์ ์ด์ด๊ฐ๋๋ค). - ์น์ธ(
service.ts์gate, ์ฌ์ฉ์์๊ฒ ๋ฌป๋ ๋ถ๋ถ์agent/manager.ts): ์ฝ๊ธฐ๋ ๋ฐ๋ก ์คํํฉ๋๋ค. ์ฐ๊ธฐ๋ ๋ด์ ๊ถํ ์์ค์ ๋ฐ๋ฆ ๋๋ค(์ฝ๊ธฐ ์ ์ฉ ๋ด์๋ ์ฃผ์ง ์๊ณ , ๊ธฐ๋ณธ ์์ค์์๋ ๋จผ์ ๋ฌป๋ โ์์ผ๋ก ์ด ๋๊ตฌ๋ ํญ์ ํ์ฉโ์ ๊ณ ๋ฅผ ์ ์์ผ๋ฉฐ, ์ ์ฒด ๊ถํ์์๋ ๋ฐ๋ก ์คํ). ์ญ์ ์ ์ธ๋ถ ์ ์ก์ ๋งค๋ฒ ๋ฌป๊ณ , โ๊ด์ฐฐ๋งโ ํ๋ ๊ท์น์ ์ธ ์ ์์ต๋๋ค. ๋๊ตฌ์ ์ข ๋ฅ๋classify.ts์์ ์ ํฉ๋๋ค: ๊ธฐ๋ณธ ์ ๊ณต ์ฑ์ ๋ด์ฅ ๋ชฉ๋ก๊ณผ ๊ณต์ ์ฃผ์์ ์ฐ๊ณ , ์ปค์คํ ์ปค๋ฅํฐ์ ์ฃผ์์ ์ด๊น๊ฐ์ผ ๋ฟ ์ฌ์ฉ์๊ฐ ๋ฐ๊ฟ ์ ์์ต๋๋ค. - ๊ธฐ์กด NotionยทFeishu ๊ณ์ (
src/tools/accounts/): ์ ๊ทธ๋ ์ด๋ ์ ์ ์ฐ๊ฒฐํ ๊ณ์ ์ ๋ค์ ์ธ์ฆํ์ง ์์๋ ๊ทธ๋๋ก ์ธ ์ ์๊ณ , ํ ํฐ์ ์ฒซ ์คํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์app-secrets.json์ผ๋ก ์ฎ๊ฒจ์ง๋๋ค. Notion(notion.ts)์ ํ ๋ฒ์ ์ ๊ทผ ํ์ฉ ๋๋ ํ ํฐ์ ์ฌ์ฉํฉ๋๋ค: ํ ํฐ์ REST API, ์ ๊ทผ ํ์ฉ์ OAuth + PKCE + ๋์ ๋ฑ๋ก์ผ๋ก ๋ก์ปฌ/oauth/notion/callback์ ๋์์จ ๋ค ๊ณต์ ์๊ฒฉ MCP(mcp.notion.com)๋ฅผ ํธ์ถํฉ๋๋ค. ๋ชจ๋ธ์๋ ์ฌ์ ํnotion_search,notion_read_page,notion_query_database,notion_create_page,notion_update_page๊ฐ ๋ณด์ด๋ฉฐ ์ญ์ ๋ ์์ต๋๋ค. Feishu(feishu.ts)์ ๊ธฐ์กด ๊ณ์ ์ ์ฌ์ฉ์ ์ ์์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฝ๊ธฐ๋ง ํฉ๋๋ค(feishu_list_chats,feishu_read_chat,feishu_search_messages). ์๋ก ์ฐ๊ฒฐํ๋ Feishu ๊ณ์ ์ ๊ณต์ ์๊ฒฉ MCP(ํด๋ผ์ฐ๋ ๋ฌธ์ ์ฝ๊ธฐ/์ฐ๊ธฐ + ๋ฉ์์ง ์ฝ๊ธฐ)๋ฅผ ์ฐ๊ณ , ๊ธฐ์กด ๊ณ์ ๋ ๋ค์ ์ธ์ฆํ๋ฉด ์ด์ชฝ์ผ๋ก ๋ฐ๋๋๋ค.
- ๊ธฐ๋ณธ ์ ๊ณต ์ฑ(
- ๊ธฐ๋ณธ ์ด๋ฏธ์งยท๋์์ ๋ชจ๋ธ์ ์ฒซ ์ค์ ๋ ํ ์คํธ ๋ชจ๋ธ๊ณผ ํจ๊ป ์ ํํ๊ณ ์ค์ โ ๋ชจ๋ธ์์ ๋ณ๊ฒฝํฉ๋๋ค. ์๋์ ์ถ์ฒ ์์ ์ค ์ฐธ๊ณ ์๋ฃ๊ฐ ํ์ ์๋ ์ฒซ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ชจ๋ธ ์ ํ๊ธฐ๋ ์ปจํ ์คํธ ๊ธธ์ด, ์ด๋ฏธ์ง ์ดํดยท๋๊ตฌยท์ถ๋ก ๊ธฐ๋ฅ, ๊ณต๊ฐ ๊ฐ๊ฒฉํ์ 100๋ง ์ ๋ ฅ/์ถ๋ ฅ ํ ํฐ๋น ์ต์ ์ฐธ๊ณ ๊ฐ๊ฒฉ์ ํ์ํฉ๋๋ค. ์ต์ข ๊ธ์ก์ ์ฒญ๊ตฌ์ ๊ธฐ์ค์ ๋๋ค.
- ๊ฐ์ฑ๋น(๋ก๊ทธ์ธ ํ์): ์ปดํจํฐ ํค์ ๋ด ์์ฐ ํค์ Modelflare Smart Key์
routing_strategy๋ฅผ ๋ฃ์ต๋๋ค. ์ ๋ ดํ ๊ฐ๊ฒฉlow_cost๋ ์ต์ ๋ฐฐ์๋ถํฐ, ๊ท ํbalanced๋ ์ค๊ฐ ๊ฐ๊ฒฉ๋ถํฐ(๊ธฐ๋ณธ๊ฐ), ํ์งstable์ ์ต๊ณ ๋ฐฐ์๋ถํฐ ์๋ํฉ๋๋ค. ์ค์ โ ๋ชจ๋ธ โ ๊ฐ์ฑ๋น ๋๋ ๋ชจ๋ธ ์ ํ๊ธฐ ์ฒซ ์ฌ๋ผ์ด๋์์ ๋ฐ๊พธ๋ฉด ๊ธฐ์กด ํค๋PATCH /api/connected-app/api-keys/<id>๋ก ๊ฐฑ์ ํ๊ณ ๋ก์ปฌ DBaccount.routing์ ์ ์ฅํฉ๋๋ค. ์ ํ ์ด๋ ฅ์ด ์๋ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ ์ฒซ ํค ๊ฒ์ฌ ๋ ๊ธฐ์กด ํค์ ๊ท ํ์ ํ ๋ฒ ์ ์ฉํฉ๋๋ค(๋ก๊ทธ:applied the default key routing strategy). Modelflare๊ฐrouting_strategy๋ฅผ ์๋ต์ ๋๋ ค์ค์ผ ์ง์์ผ๋ก ํ์ ํฉ๋๋ค. ํ๋๋ฅผ ๊ฑฐ๋ถํ๋ฉด(400/422) ์ ์ธํ๊ณ ๋ค์ ๋ฐ๊ธํ๋ฏ๋ก ๋ฐ๊ธยท๊ฒ์ฌยท์์ฐ ๊ธฐ๋ฅ์ด ์คํจํ์ง ์์ต๋๋ค. ๋ฌด์ํ์ฌ ์๋ต์ ์์ ๋๋ ๋ฏธ์ง์์ผ๋ก ๋ณด๊ณ ์ค์ ์ ์จ๊ธด ๋ค ํ๋ฃจ ํ ์ฌ์๋ํฉ๋๋ค. - ์ง๋ฅ(๋ ๋ฒ์งธ ์ฌ๋ผ์ด๋): ๊ณ์ ์ด ์ฌ์ฉํ ์ ์๊ณ Artificial Analysis ๋ฐ์ดํฐ๊ฐ ์๋ ๋ชจ๋ธ์ ์ง๋ฅ ์ง์(๋์์๋ก ์ข์)์ ์์
๋น ๋น์ฉ(๋ฎ์์๋ก ์ข์)์ผ๋ก ํ๋ ํ ๊ฒฝ๊ณ๋ฅผ ๊ตฌํด ์ต๋ 5๊ฐ ์ง์ ์ ์ ์ํ๋ฉฐ ์ต์ ๊ฐยท์ต๊ณ ์ฑ๋ฅ ๋ชจ๋ธ์ ํญ์ ํฌํจํฉ๋๋ค. ์ค์ ์ถ๋ก ๊ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฏ๋ก Responses API ์ถ๋ก ๋ชจ๋ธ์ ๊ธฐ๋ณธ medium์ ๋ง๋ AA ํ, ๊ทธ ์ธ๋ ๊ธฐ๋ณธ ํ์ ์ฌ์ฉํฉ๋๋ค(
src/account/model-quality.ts). ๋น์ฉ์ AA ๊ณต์ ๊ฐ๊ฒฉ ๊ธฐ์ค ์์ ๋น ๋น์ฉ ร ํ์ฌ ๊ฐ์ฑ๋น ์ค์ ์ ๊ฐ๊ฒฉ ๊ณ์(์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ ๊ทธ๋ฃน ๋ฐฐ์ ร ํ๋งค ๋ฐฐ์)์ ๋๋ค. ์ ๋ ดํ ๊ฐ๊ฒฉ์ ์ต์ , ํ์ง์ ์ต๊ณ , ๊ท ํ์ ์ค๊ฐ์ ์ฐ๊ณ ๊ธฐ์ ์ ์ฉ ๊ทธ๋ฃน์ ์ ์ธํฉ๋๋ค. ๋ก๊ทธ์์ยท๋ฏธ์ง์์ ๊ท ํ์ผ๋ก ๊ณ์ฐํฉ๋๋ค. ์ฌ๋ผ์ด๋๋ก ๋ชจ๋ธ์ ์ ํํ๋ฉฐ ์ด๋ฆ์ ๋๋ฅด๋ฉด ์ ์ฒด ๋ชฉ๋ก์์ ์ง์ ์ ํํฉ๋๋ค. ์ง์ ์ ์๋ ๋ชจ๋ธ์ ์ฌ์ฉ์ ์ง์ ์ผ๋ก ํ์ํ๊ณ ์ง์ ์ด ๋ ๊ฐ ๋ฏธ๋ง์ด๋ฉด ๋ชฉ๋ก๋ง ๋ณด์ฌ ์ค๋๋ค. ๊ณ์ฐ์ui/lib/frontier.js์ ์์ต๋๋ค. - AA ๋ฐ์ดํฐ๋
assets/model-quality.json(updatedAt,source, ํ์ํ ํ๋๋ง, Modelflare ID ๋งคํ ์๋ฃ)์ ํฌํจํฉ๋๋ค.node scripts/update-model-quality.mjs๋ ๊ณต๊ฐ ์์ https://artificialanalysis.ai/leaderboards/models ์ Modelflare ๊ณต๊ฐ ๊ฐ๊ฒฉํ๋ฅผ ์ฝ์ต๋๋ค.AA_API_KEY๊ฐ ์์ผ๋ฉด ๊ณต์ API๋ฅผ ์ฌ์ฉํฉ๋๋ค(ํค๋ก ๋ฐํ ํ๋๋ฅผ ์์ง ๊ฒ์ฆํ์ง ์์).--html <file>,--pricing <file>์ ์ ์ฅํ ํ์ผ์ ์ฌ์ฉํ๊ณ--dry-run์ ์ถ๋ ฅ๋ง ํฉ๋๋ค. ์ด ๋๋ฝ, ํ ํ์ ๋ณ๊ฒฝ, ์ซ์ ๋ณํ ์คํจ, ํยท๋งคํ ๋ชจ๋ธ ์ ๋ถ์กฑ ์ ๋ฌธ์ ๋ฅผ ์๋ฆฌ๊ณ ์ข ๋ฃ ์ฝ๋ 1๋ก ๋๋ด๋ฉฐ ๊ธฐ์กด ์ค๋ ์ท์ ์ ์งํฉ๋๋ค. ๊ท์น์ผ๋ก ๋งคํ๋์ง ์๋ ์ด๋ฆ์ ์คํฌ๋ฆฝํธ์OVERRIDES์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ถ์ฒ Artificial Analysis๋ ์ ํ๊ธฐ ํ๋จ์ ํ์ํฉ๋๋ค. - ์ถ์ฒ ํ์: Modelflare ์์ฒญ์๋
X-Modelflare-Skill: anymodel-bot/<version>, ๋งํฌ์๋utm_source=anymodelbot&utm_campaign=amb_<placement>๋ฅผ ๋ฃ์ต๋๋ค. ์ฑ์amb_signup,amb_topup,amb_console๋ฑ, READMEยท์ ์ฅ์ ๋ฌธ์๋amb_readme, ์น์ฌ์ดํธ๋amb_homepage๋ฅผ ์ฌ์ฉํฉ๋๋ค.test/utm.unit.test.ts๊ฐ ํ์์ ๊ฒ์ฌํฉ๋๋ค. - API ๋๋ฉ์ธ: ์ค์ โ ๋ชจ๋ธ โ API ๋๋ฉ์ธ์์
https://modelflare.dev/v1,https://origin.modelflare.dev/v1,https://cf.modelflare.dev/v1์ ์ ํํฉ๋๋ค. ์๋ ๊ฒ์ฌ๋ ์ฑ ์คํ ๊ธฐ๊ธฐ์์ ์ธ ๋๋ฉ์ธ์/v1/models์ ์ธ์ฆ ์์ด ์ธ ๋ฒ ์์ฒญํด ์ค์ ์๋ต ์๊ฐ๊ณผ ์ฑ๊ณต ํ์๋ฅผ ํ์ํฉ๋๋ค. HTTP 401์ API ์๋ต์ผ๋ก ๊ณ์ฐํ๋ฉฐ ํค ์ ํจ์ฑ์ด๋ ์์ฑ ์๋์ ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. ์๋ ์ ํ์ ์์ต๋๋ค. ๊ธฐ์กด ์ค์ auto/global์ ๊ธฐ๋ณธ ๋๋ฉ์ธ,cn์ origin,cf๋ cf์ ๋์ํ๋ฉฐ ์ง์ญยทํ์ง ์๋ฏธ๊ฐ ์๋๋๋ค. - ์ค์ โ ๋ชจ๋ธ: ๊ณ์ , ์์กยท์ถฉ์ , ์์ก ์๋ฆผ, ์ฌ์ฉ๋, ์๋ฆผ, ์ด๋, ๊ฐ์ฑ๋น, ์ถ๋ก ๊ฐ๋, ๊ธฐ๋ณธ ๋ชจ๋ธ, ๋ชจ๋ธ ๋ชฉ๋ก ์๋ก๊ณ ์นจ์ ์ ๊ณตํฉ๋๋ค.
- ์
๋ ฅ์ฐฝ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ธ ๋ฒํผ์ ํ์ฌ ์ธ์
์ ๋ชจ๋ธ์ ๋ฐ๊พธ๊ฑฐ๋ ๋ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
/model,/reset,/new,/status,/stop,/help๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ์์ ๋ด์ญ: ๋ชจ๋ธ ์์ฒญ์ ์๊ฐยทํ ํฐ, ๋๊ตฌ ์ธ์ยท์ถ๋ ฅ, ์ฌ์๋, ํ์ ์์ด์ ํธ ๋ฑ ๋ชจ๋ ๋จ๊ณ๋ฅผ ๋ต๋ณ ์ ์๊ฐ ํ์์ค์ ์ ์ด ๋ก๋๋ค. ํด๋ฆญํ๋ฉด ํผ์นฉ๋๋ค. WeChat/Feishu ์ธ์ ์ ์ ๋ณด ํจ๋ โ ์ต๊ทผ ์ธ์ ์์ ์งํ ์ํฉ์ ์ค์๊ฐ์ผ๋ก ๋ณด๊ณ ์ค์งํ ์ ์์ต๋๋ค.
- ๋ฉ์ถ ๋ฉ์์ง: ๋ชจ๋ ์ฑ๋์
/stop๋๋ ์ ๋ณด ํจ๋์ ์ค์ง๋ก ํ์ฌ ๋ํ ์ฐจ๋ก๋ฅผ ์ฆ์ ์ข ๋ฃํฉ๋๋ค. 10๋ถ ๋์ ๋ชจ๋ธ ์๋ตยท๋๊ตฌ ํ๋ ์์ด ์ฌ์๋๋ง ํ๋ ๋ฑ ์งํ์ด ์์ผ๋ฉด ์๋ ์ค์งํ๋ฉฐ ์น์ธยท๋ต๋ณ ๋๊ธฐ ์๊ฐ์ ์ ์ธํฉ๋๋ค. ๋จ์ผ ์ฐจ๋ก์ ์ํ์ 30๋ถ์ ๋๋ค(AMB_AGENT_IDLE_TIMEOUT_MS,AMB_AGENT_TURN_TIMEOUT_MS). ํ๋ก์ธ์ค ๋ด๋ถ amb-control ํ๋ฌ๊ทธ์ธ์ด ํด๋น ์ฐจ๋ก๋ง ์ทจ์ํ๊ณ ๋ค๋ฅธ ๋ํ๋ ๊ณ์ํฉ๋๋ค. 10์ด(AMB_STOP_GRACE_MS) ์์ ๋ฉ์ถ์ง ์์ ๋๋ง ์์ด์ ํธ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํฉ๋๋ค./status๋ก ํ์ฌ ๋จ๊ณ์ ๋ง์ง๋ง ์งํ ์ดํ ์๊ฐ์ ๋ด ๋๋ค. ์น์์ ๋ค๋ฅธ ๋ด์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์ฐฝ์ ์๋ก๊ณ ์นจํด๋ ์ฒ๋ฆฌ๋ ๊ณ์๋๋ฉฐ ๋์์ค๋ฉด ๋ด ๋ฉ์์ง, ์์ฑ ์ค์ธ ์๋ต, ํ๋์ด ๋ณต์๋ฉ๋๋ค. ์ค์ง ๋ฒํผ์ ๋๊ธฐ์ดยท์์ ์คยท์น์ธ ๋๊ธฐยท์ผ๋ฐ ๋ํ์์๋ ์๋ํฉ๋๋ค. - ์ถ๊ฐ ์์ฒญ: ์์
์ค ๋ณด๋ธ ํ
์คํธยท์ด๋ฏธ์งยทํ์ผ์ ํ์ฌ ์ฐจ๋ก์ ์ถ๊ฐ๋๋ฉฐ ๋ชจ๋ธ์ด ๋ค์ ๋จ๊ณ์์ ์ฝ๊ณ ํ ๋ฒ์ ๋ตํฉ๋๋ค. ๋จผ์ ์งง์ ์์ ์๋ด๋ฅผ ๋ณด๋ผ ํธ์งํจ์ผ๋ก ์ ์กํ๋ฉฐ 10๋ถ ์์ ์ ์กํ์ง ๋ชปํ๋ฉด ๋ฒ๋ฆฝ๋๋ค. ํ์ฉ ๋ชฉ๋ก ๊ฒ์ฌ๋ ๋์ผํ๊ฒ ์ ์ฉ๋์ด ๋ฏธํ๊ฐ์์ ๋ฉ์์ง๋ ํฉ๋ฅํ์ง ์์ต๋๋ค. ์์ด์ ํธ๊ฐ ์ด์ ๋ฉ์์ง๋ฅผ ๋ฐ๊ธฐ ์ ์ด๊ฑฐ๋ ๋ง๋ฌด๋ฆฌ ์ค์ด๋ฉด ๊ธฐ์กด์ฒ๋ผ ๋๊ธฐ์ด์ ๋ฃ์ผ๋ฉฐ
/model,/reset๊ฐ์ ๋ช ๋ น๋ ๋๊ธฐํฉ๋๋ค. ์น์์๋ ์๋ต ์ค ๊ณ์ ์ ๋ ฅํ ์ ์์ต๋๋ค. - ๊ธด ๋ช
๋ น์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํฉ๋๋ค. 30์ด(Windows PowerShell์ 60์ด) ์ด์ ์คํ ์ค์ด๋ฉด ํ์ฌ ์ฐจ๋ก๋ฅผ ๋ง์ง ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ผ๋ก ์ ํํ๊ณ ์คํ ์ค์์ ์๋ฆฝ๋๋ค. ๋๋๋ฉด ์์ด์ ํธ๋ฅผ ๊นจ์ ๊ฐ์ ๋ํ์ ์ ๋ฉ์์ง๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ตํฉ๋๋ค. ์น์ ์ค์๊ฐ ํ์, WeChatยทFeishu๋ ์ผ๋ฐ ๋ต๋ณ์ฒ๋ผ ๋ณด๋ผ ํธ์งํจ์ ์ฌ์ฉํฉ๋๋ค. ID๋ ์์ด์ ํธ ์ธ์
ยท์ฐจ๋ก์์ ๋์ถํด ํ ๋ฒ๋ง ์ ์กํ๋ฉฐ WeChat ์ ํ์ ์ ์ก ์ ๊ฒ์ฌํฉ๋๋ค. Feishu๋ DB์ ์ ์ฅํ ์ต์ ์์ ๋ฉ์์ง ID์ ๋ตํฉ๋๋ค. ์์
๋ด์ญ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋จ๊ณ๊ฐ ํ์๋๊ณ
/status, ์ค์ง, ๊ฐ์ ํ์ด๋จธ๋ ์ผ๋ฐ ์ฐจ๋ก์ฒ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. - ๋ํ๋ณ ๋ชจ๋ธ: ํ๋์ ์์ด์ ํธ ํ๋ก์ธ์ค ์์์๋ ๋ํ๋ง๋ค ๋ชจ๋ธ๊ณผ API๋ฅผ ๋ฌ๋ฆฌ ์ฌ์ฉํฉ๋๋ค(API๋ณ provider, ๋ชจ๋ธ๋ณ ์ปจํ ์คํธยท์ต๋ ์ถ๋ ฅ). ๋ชจ๋ธ์ ๋ฐ๊ฟ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ์ง ์์ผ๋ฉฐ ์ด๊ธฐ ํจ์น์ ์๋ ๋ชจ๋ธ์ ์คํ ์ค ์ถ๊ฐํฉ๋๋ค.
- ํ๋ก์ธ์ค ๊ต์ฒด: DSH SDK๋ ์ธ์
๋ซ๊ธฐ๋ฅผ ์ง์ํ์ง ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
ยท๊ท์น ์คํ์ ์ธ์
์ด ์ฌ์์๊น์ง ๋จ์ต๋๋ค(์๋ฃ ํ ์ ํด ์ธ์
๋น ์ค์ธก ์ฝ 0.25~0.45MB). 100๊ฐ๋ฅผ ์ด๊ณผํ๋ฉด ์์ ํ ์ ํด์ผ ๋ ๊ต์ฒดํฉ๋๋ค. ๋ํ, ์คํยท์ ๋ฆฌ ์ค์ธ ์์
์ด๋ ๊ท์น, ์น์ธ, ์์ถ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ช
๋ น์ด ์์ด์ผ ํฉ๋๋ค. ๊ธฐ์กด ์ธ์
์ ์ด์ด์ง๊ณ ์ค๋จ์ด๋ ์ฌ์ฉ์ ์๋ฆผ์ ์์ต๋๋ค. ๋ฌธ์ ํด๊ฒฐ ์ํ์
taskSessions,recycles๋ก ํ์ธํ๋ฉฐAMB_DSH_RECYCLE_SESSIONS๋ก ๊ธฐ์ค์ ๋ฐ๊ฟ๋๋ค. - ์ฌ์์ ์๋ด: ์ฑ ์ข ๋ฃยท์ถฉ๋ ๋น์ ์ฒ๋ฆฌ ์ค์ด๋ ๋ฉ์์ง๋ ๋ํ๋ณ DB ํ์๋ก ์ถ์ ํ๊ณ ์๋ฃ ์ ์ ๊ฑฐํฉ๋๋ค. ๋ค์ ์์์ ํด๋น ๋ํ๋ก โ์ฑ์ด ๋ค์ ์์๋์ด ๋ง์ง๋ง ๋ฉ์์ง์ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ์ง ๋ชปํ์ต๋๋ค. ๋ค์ ๋ณด๋ด ์ฃผ์ธ์โ๋ผ๊ณ ํ ๋ฒ ์๋ฆฝ๋๋ค. ์๋ ์ฌ์ ์กํ์ง ์์ต๋๋ค. ์น์ ๊ธฐ๋ก์ ์ถ๊ฐํ๊ณ WeChat์ ์ ์ฅํ context_token๊ณผ ๊ธฐ์กด ๋ฐ์ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. 24์๊ฐยทํ์ ์ ํ์ ๊ฑธ๋ฆฌ๋ฉด ๋ค์ ์์ ๋ฉ์์ง์ ๋ต๋ณ ์์ ์๋ฆฝ๋๋ค. Feishu๋ ์๋ ๋ํ๋ก ๋ณด๋ ๋๋ค.
- ์์ด์ ํธ API: Modelflare ๊ณต๊ฐ ๋ชฉ๋ก์ ์ง์ ์ ๋ณด์ ๋ฐ๋ผ Responses API ๋ชจ๋ธ(GPT-5.4 ์ด์, Grok 4.5 ์ด์, DeepSeek V4, GLM-5, Kimi K3 ๋ฑ)์
/v1/responses๋ฅผ ์ฌ์ฉํฉ๋๋ค(์ถ๋ก ๊ธฐ๋ณธ medium, ์ํธํ๋ ์ถ๋ก ์ ๊ธฐ๋ก๊ณผ ํจ๊ป ์ฌ์ ์ก). Responses ์์ด Anthropic Messages๋ฅผ ์ง์ํ๋ Claude๋/v1/messages, ๋๋จธ์งยท๋ชฉ๋ก ์กฐํ ์คํจยท์ธ๋ถ ์๋ํฌ์ธํธ๋ Chat Completions์ ๋๋ค. ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ธ์ ์ฒ์ ์ธ ๋ ์ ํํ๋ฉฐ ๋ฌธ์ ํด๊ฒฐ ์ํ์ ๋ง์ง๋ง ์ฐจ๋ก์api์ ๋ชจ๋ธ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.AMB_AGENT_API=chat์ผ๋ก ์ ์ฒด๋ฅผ Chat Completions๋ก ๊ฐ์ ํ ์ ์๊ณ ์ผ๋ฐ ๋ํ๋ ๊ณ์ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ ์๋น์ค๊ฐ Responses/Messages๋ฅผ ๊ฑฐ๋ถํ๋ฉด(HTTP 400/404/405/415/422 ๋๋ unsupported parameter/endpoint) ํด๋น ๋ชจ๋ธ์ 24์๊ฐ Chat Completions๋ก ์ ํํฉ๋๋ค. ์์ฒญ ์ ํยท์์กยท๊ถํยท์๋น์ค ์ฅ์ ยท์ปจํ ์คํธ ์ด๊ณผ๋ ์ ์ธํฉ๋๋ค. ๋ฐ์ดํฐ ํด๋dsh/api-fallback.json์ ๊ธฐ๋กํ๊ณ ๋ก๊ทธ์ ๊ฒฝ๊ณ ํ๋ฉฐ ์ํ์openai-completions (fallback: reason)์ ํ์ํฉ๋๋ค. ๋๊ตฌ๋ฅผ ์์ง ํธ์ถํ์ง ์์๋ค๋ฉด ํ๋ก์ธ์ค ์ฌ์์ ์์ด ํ์ฌ ์ฐจ๋ก๋ฅผ Chat์ผ๋ก ์๋ ์ฌ์๋ํฉ๋๋ค. ์ด๋ฏธ ํธ์ถํ๋ค๋ฉด ์ค๋ฅ๋ฅผ ์๋ฆฌ๊ณ ๋ค์ ์ฐจ๋ก๋ถํฐ Chat์ ์ฌ์ฉํฉ๋๋ค. - ๋ด์ฅ ๊ฒ์ดํธ์จ์ด: magpie๋ ๋ฐ์ดํฐ ํด๋ ์์ ๋
๋ฆฝ HOMEยท์ค์ ์ผ๋ก
--gateway๋ชจ๋์์ ์คํํฉ๋๋ค. ์ปดํจํฐ์ ๊ธฐ์กด Claude/Codex ๊ตฌ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ฝ์ง ์๊ณ , ์์ด์ ํธ ์ค์ ์ ์์ ํ์ง ์์ผ๋ฉฐ, ์๋ ์ ๋ฐ์ดํธยท๊ณ์ ๊ฒ์๋ ๋๋๋ค. ์ฑ ํ๋ก์ธ์ค ๋ด๋ถ์์๋ง ํธ์ถํ๋ฉฐ ์ฝ์์ magpie ํ์ด์ง๋/v1์ ํ๋ก์ํ์ง ์์ต๋๋ค. - API ํค๋ ๊ฒฉ๋ฆฌ๋ ๊ฒ์ดํธ์จ์ด ์ค์ ์๋ง ์ ์ฅํฉ๋๋ค. ๋ช ๋ น์ค์ด๋ ๋ก๊ทธ์ ๊ธฐ๋กํ์ง ์๊ณ ํ๋ฐํธ์๋์๋ ๋๋ถ๋ถ๋ง ์ ๋ฌํฉ๋๋ค.
- ๊ฐ๋ฐยทํ
์คํธ:
AMB_MAGPIE_BASE_URL์ OpenAI ํธํ ์๋ํฌ์ธํธ๋ก ์ง์ ํ๋ฉด ๊ฒ์ดํธ์จ์ด๋ฅผ ์์ํ์ง ์๊ณ ํ๋ฉด์ ์ฐ๊ฒฐ ์ํ๊ฐ ๋๋ฉฐ ๊ณ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.AMB_MODELFLARE_BASE_URL์ Modelflare ๊ธฐ๋ณธ URL,AMB_MODELFLARE_ISSUER๋ ๋ก๊ทธ์ธยท๊ณ์ API๋ฅผ ๋ก์ปฌ ๋ชจ์ ์๋ฒ๋ก ์ง์ ํฉ๋๋ค.
- ์์ ํ๋ฉด์ โ๋ด API ํค ์ฌ์ฉโ๊ณผ ์ค์ โ ๋ชจ๋ธ์์ ์
๋ ฅํ ์ ์์ต๋๋ค. ์ง์ ์ ๊ณต์
์ฒด์ ์ฃผ์๋
src/providers/official.ts์ ๊ณ ์ ๋์ด ์๊ณ , API(GET /amb/api/official,PUT/DELETE /amb/api/official/<id>)๋ ๋ชฉ๋ก์ ID๋ง ๋ฐ์ผ๋ฉฐ ์ฃผ์๋ ์ง์ ํ ์ ์์ต๋๋ค. - ๊ฐ๊ฐ ๋ด์ฅ ๊ฒ์ดํธ์จ์ด์ provider์ด๋ฉฐ ID๋
official-<์ ๊ณต์ ์ฒด>, ๋ชจ๋ธ ID๋official-<์ ๊ณต์ ์ฒด>/<๋ชจ๋ธ>์ ๋๋ค. Modelflare์ ๊ฐ์ ์ด๋ฆ ๋ชจ๋ธ๊ณผ ๊ตฌ๋ถ๋ฉ๋๋ค. ํค๋ ๋ช ๋ น์ค ์ธ์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๊ฒ์ดํธ์จ์ด ๋ก์ปฌ API์ ์์ฒญ ๋ณธ๋ฌธ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์ค์ ์ ๊ธฐ๋ก๋ฉ๋๋ค. - ํ์ธ์๋ ๊ฒ์ดํธ์จ์ด์ ๋ชจ๋ธ ๋ชฉ๋ก์ ์ฌ์ฉํ๊ณ (ํ๋ก์์ ์ ๊ณต์ ์ฒด๋ณ ์ธ์ฆ ๋ฐฉ์์ ๊ฒ์ดํธ์จ์ด์ ์์), ํต๊ณผํด์ผ๋ง ์ ์ฅํฉ๋๋ค. ๋ชจ๋ธ์ 1์๊ฐ๋ง๋ค ์ ๊ณต์ ์ฒด ๋ชฉ๋ก๊ณผ ๋์กฐํ๋ฉฐ ๋ํํ ์ ์๋ ๋ชจ๋ธ(์์ฑ, ์ด๋ฏธ์ง, ์๋ฒ ๋ฉ ๋ฑ)์ ์ ํ๊ธฐ์ ๋ฃ์ง ์์ต๋๋ค.
- ์์ด์ ํธ API๋ ์ ๊ณต์
์ฒด๋ณ๋ก ์ ํด์ง๋๋ค. OpenAI๋ Responses, Anthropic์ Messages, ๋๋จธ์ง๋ Chat Completions์
๋๋ค. ์ปจํ
์คํธ ๊ธธ์ด, ๊ฐ๊ฒฉ, ์ถ๋ก ์ง์์ ๊ฒ์ดํธ์จ์ด์ ๋ชจ๋ธ ๋ชฉ๋ก(
/v1/models)์์ ๊ฐ์ ธ์ต๋๋ค. ๊ณต์ ํค๋ง ์์ผ๋ฉด Modelflare์ ๋ชฉ๋ก๊ณผ ๊ณ์ ์ ์ฝ์ง ์์ต๋๋ค. - ๊ณต์ API ๋ชจ๋ธ์๋
X-Modelflare-Skill์ ๋ถ์ด์ง ์๊ณ , ์๋ฒ ์ธก ์์ถ์ ํ์ง ์์ผ๋ฉฐ(์์ถ ์๋ํฌ์ธํธ๋ Modelflare ๋ชฉ๋ก์์ ์ด), ๋ด ์์ฐ์ ์ ํ๋ ๋ฐ์ง ์์ต๋๋ค(์์ฐ์ Modelflare ํค์ ํ๋์ ๋๋ค). ์ด๋ฏธ์งยท๋์์ ์์ฑ์ Modelflare์ ์ฐ๊ฒฐ๋ ๋์์๋ง ๊ฐ๋ฅํฉ๋๋ค. - ํ
์คํธ:
AMB_OFFICIAL_BASE_URL๋ก ๋ชจ๋ ์ ๊ณต์ ์ฒด๋ฅผ ๋ก์ปฌ ๋ชจ์ ์๋ฒ๋ก ์ง์ ํฉ๋๋ค(test/official-providers.integration.test.ts).
- ๊ทธ๋ฃน ๋ํ(
src/core/groups.ts,ui/screens/group.js): ๋ด ๋ ๊ฐ ์ด์์ด๋ฉด ๏ผ ๋ฉ๋ด์์ ๊ทธ๋ฃน์ ๋ง๋ญ๋๋ค. ๊ตฌ์ฑ์๋ง๋ค<bot>:web:group:<group>๋ํ๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋ชจ๋ธยท๊ถํยท๊ธฐ์ตยท์น์ธยท๋น์ฉ์ ๊ฐ์ธ ๋ํ์ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์ฌ์ฉ์ ๋ฉ์์ง๋group:<group>์ ์ ์ฅํ๊ณ ํ์๋ผ์ธ์ ID๋ก ํฉ์นฉ๋๋ค. @๋ก ์ง๋ชฉํ ๋ด์ด ๋ตํ๋ฉฐ@everyone์ ์ ์ฒด์ ๋๋ค. ์ง๋ชฉ์ด ์์ผ๋ฉด ๋ง์ง๋ง ์๋ต ๋ด์ด ๊ณ์ํฉ๋๋ค. ๋ต๋ณ์์ ๋ค๋ฅธ ๋ด์ @ํ๋ฉด ์ธ๊ณํ๋ฉฐ ์ฌ์ฉ์ ๋ฉ์์ง๋น ์ต๋ 6ํ์ ๋๋ค. ๊ทธ๋ฃน์์๋ ํ ๋ฒ์ ํ ๋ด๋ง ๋ตํฉ๋๋ค. - ์ฌ์ด๋๋ฐ: ์๋ฐํยท์ด๋ฆยท์ต๊ทผ ๋ฉ์์ง๋ฅผ ํฌํจํ ๋ด ๋ชฉ๋ก, ๏ผ ์๋ก ๋ง๋ค๊ธฐ, ์ฐํด๋ฆญ ์ด๋ฆ ๋ณ๊ฒฝยท์ญ์ . ๋ชฉ๋ก์ ๋ง๋ค๊ธฐยท์ด๋ฆ ๋ณ๊ฒฝยท์ญ์ ยท๋๋๊ทธ ์ ๋ ฌ์ด ๊ฐ๋ฅํ ์น์
์ผ๋ก ๋๋ฉ๋๋ค(๊ธฐ๋ณธ์ โ๋ด ๋ดโ๊ณผ โ์๋ก ๋์ดโ, ์๋ฒ์ ์ ์ฅ๋์ด ๋ชจ๋ ์ฐฝ์ด ๊ณต์ ). ๋ด, ๊ทธ๋ฃน ์ฑํ
, ์นดํ๋ก๊ทธ ๋ด์ ๋๋๊ทธํ๊ฑฐ๋ โ์น์
์ผ๋ก ์ด๋โ์ผ๋ก ๋ค๋ฅธ ์น์
์ ์ฎ๊ธธ ์ ์๊ณ , ์๋ก ๊ณต๊ฐ๋ ์นดํ๋ก๊ทธ ๋ด์ โ์๋ก ๋์ดโ์ ๋ค์ด๊ฐ๋๋ค. ์ผ์ชฝ ์๋ ์๋ฐํ๋ก ์์ก์ ๋ณด๊ณ ํฑ๋๋ฐํด๋ก ์ค์ ์ ์ฝ๋๋ค(
โ/Ctrl+,). - ๋ํ ํ๋ฉด: ์๋จ ๋ด ์ด๋ฆ์ ๋๋ฅด๋ฉด ์ ๋ณด ํจ๋(
โ/Ctrl+โง+I)์ด ์ด๋ฆฝ๋๋ค. ๊ธฐ๋ณธ ์๋ต ์ฑ๋ ๊ณ์ , ์น์ธ ๋๊ธฐ, ์์ ยท๊ท์น, ๊ธฐ์ต, ์ต๊ทผ ์ธ์ ์ ๋ณด์ฌ ์ฃผ๋ฉฐ โ๋ก ๋ด ์ค์ ์ ์ฝ๋๋ค. ์๋ต์ Markdown๊ณผ ์ฝ๋ ํ ๋ฒ์ ๋ณต์ฌ๋ฅผ ์ง์ํ๋ฉฐ ์ค์๊ฐ ํ์ํ๊ณEsc๋ก ์ค์งํฉ๋๋ค. ์น์ธยท์ง๋ฌธ์ ์นด๋๋ก ํ์ํฉ๋๋ค. ์๋ก ์คํฌ๋กคํด๋ ๊ฐ์ ๋ก ๋งจ ์๋๋ก ์ด๋ํ์ง ์์ต๋๋ค. - ๋ช
๋ น ํ๋ ํธ๋
โ/Ctrl+K์ ๋๋ค. ํ ๋ง(์์คํ /๋ผ์ดํธ/๋คํฌ)๋ ์ค์ โ ์ผ๋ฐ์ ์์ต๋๋ค. - ์ธ์ด: ์ค์ โ ์ผ๋ฐ โ ์ธ์ด์์ ์ค๊ตญ์ด ๊ฐ์ฒดยท์์ดยท์ผ๋ณธ์ดยทํ๊ตญ์ดยท๋ฌ์์์ดยท์คํ์ธ์ดยทํฌ๋ฅดํฌ๊ฐ์ด(๋ธ๋ผ์ง)๋ฅผ ์ ํํฉ๋๋ค. ์ฒซ ํ๋ฉด ์ค๋ฅธ์ชฝ ์์ ๋ช
๋ น ํ๋ ํธ์์๋ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์์คํ
์ธ์ด์ด๋ฉฐ ๋ฏธ์ง์ ์ธ์ด๋ ์์ด์
๋๋ค. ์ ํ์ config.json์
ui.lang์ ์ ์ฅํ๊ณ ํธ๋ ์ด ๋ฉ๋ด, ์๋ฒ ์ค๋ฅยท์ํ, WeChat/Feishu์/helpยท์น์ธ ์๋ด ๋ฑ ์์คํ ๋ฉ์์ง์ ์ ์ฉ๋ฉ๋๋ค. ๋ช ๋ น์คยทDocker์ ์์คํ ์ธ์ด๋AMB_LANG,LC_ALL/LC_MESSAGES/LANG์์ด๋ฉฐ ์์ผ๋ฉด ์ค๊ตญ์ด ๊ฐ์ฒด์ ๋๋ค. ๋ก๊ทธ, ๋ชจ๋ธ ํ๋กฌํํธ, ์ฌ์ฉ์๊ฐ ์ ํ ๋ด ์ด๋ฆ์ ๋ฒ์ญํ์ง ์์ต๋๋ค.- ํ๋ฉด ๋ฌธ๊ตฌ๋
ui/locales/<lang>/<namespace>.js์ ์๊ณt("namespace.key", { params })๋ก ์ฌ์ฉํฉ๋๋ค(ui/lib/i18n.js). ์๋ฒ ๋ฌธ๊ตฌ๋src/i18n/messages/<namespace>.ts์ด๋ฉฐ ํค๋ฅผ ํ์ ๊ฒ์ฌํฉ๋๋ค. ๋ชจ๋ ํ๋ฉด ์์ฒญ์x-amb-lang์ ๋ณด๋ด๋ฉฐ ์๋ฒ๋ ํด๋น ์ธ์ด๋ก ์๋ตํฉ๋๋ค. - ์ ๋ฌธ๊ตฌ๋ ๋ ๊ธฐ์ค ์ธ์ด์ ๋ชจ๋ ์ถ๊ฐํฉ๋๋ค.
node scripts/i18n-check.mjs [filesโฆ]๋ ํ๋ฉด ์ฝ๋์ ์ค๊ตญ์ด ์์ฌ ๋ฌธ๊ตฌ, ์๋ ํค, zh/en ๋ถ์ผ์น๋ฅผ ๊ฒ์ฌํฉ๋๋ค(npm test์test/i18n.unit.test.ts๋ ๋์ผ ๊ฒ์ฌ). ๊ธ๊ผด ์ด๋ฆยท์ค๊ตญ์ด ์ ๋ ฅ ์ ๊ท์์ฒ๋ผ ํ์ํ ์ค๊ตญ์ด๋ ํด๋น ์ค์// i18n-ignore๋ฅผ ๋ถ์ ๋๋ค.
- ํ๋ฉด ๋ฌธ๊ตฌ๋
- ์์ ์ฒดํฌ๋ฆฌ์คํธ: ๋น ๋ํ์๋ ์ธ์ฌ, ๋ชจ๋ธ ๋ณ๊ฒฝ, WeChat ์ฐ๊ฒฐ, ์์
๋งก๊ธฐ๊ธฐ, ๊ธฐ์ตํ๊ธฐ, ์ด๋ฏธ์ง ์์ฑ์ ์ฌ์ฏ ๋จ๊ณ๊ฐ ๋์ต๋๋ค. ๋ง์ง๋ง ๋จ๊ณ๋ ๊ณ์ ์ ๋ฏธ๋์ด ๋ชจ๋ธ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ๋ด์ฅ ๋ฐ๋ชจ๋ง ์ฌ์ํฉ๋๋ค. ์ค์ ๊ธฐ๋ณธ ํ๋ฆ์ฒ๋ผ ์ฆ์ ์์ฑํด ๋ํ์ ๋ณด์ด์ง๋ง ๋ด์ ์ ์กํ์ง ์๊ณ ๋ชจ๋ธ ํธ์ถยท๊ณผ๊ธ๋ ์์ต๋๋ค. ์ด๋ฏธ์ง๋
ui/assets/guide-demo.svg์ ๋๋ค. ๋น์ฉ ์์ด ํ๋ฆ์ ๋ฐฐ์ฐ๋๋ก ํ ๊ฒ์ด๋ฉฐ ์ค์ ์ด๋ฏธ์ง ์์ฒญยท์์ ์ผ๋ก๋ ์๋ฃ๋ฉ๋๋ค. ๋ณด๋ด๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์ง์ ์๋ํ๊ณ ์ด๋ํ๊ธฐ ๋๋ ์ผ์ชฝ ์๋ ํญ๋ชฉ์ ๋๋ฅด๋ฉด ํด๋น ์ ์ด ์์๋ฅผ ํ ๋๋ฆฌ๋ก ๊ฐ์กฐํ๋ ์๋ด ์นด๋๊ฐ ๋์ต๋๋ค. ์๋ต, ๋ชจ๋ธ ๋ณ๊ฒฝ, ํ์ผยท์ด๋ฏธ์ง ์์ , ์ฑ๋ ์ฐ๊ฒฐ, ๊ธฐ์ต ์ ์ฅ์ ๋ฐ๋ผ ์๋ ์๋ฃ๋๋ฉฐ config.json์ui.guide(API/amb/api/guide)์ ์ ์ฅํฉ๋๋ค. ๊ธฐ์กด ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ํ ๋จ๊ณ๋ ์ธ์ ํฉ๋๋ค. ์ผ์ชฝ ์๋๋ก ์ ๊ฑฐ๋ ์์ ํ ์จ๊ธธ ์ ์๊ณ ์ค์ โ ์ผ๋ฐ โ ์์ ์ฒดํฌ๋ฆฌ์คํธ์์ ๋ค์ ์์ํฉ๋๋ค. ์ธ์ฌ๋ ์ค์ ์๋ต์ด ์์ด์ผ ํ๊ณ (์ค๋ฅ ์๋ด๋ ์ ์ธ), ์ฑ๋์ ์ค์ ๋ก ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค(์ค์ ๋ง์ผ๋ก๋ ์๋ฃ๋์ง ์์). โ์์ฃผ ์ฐ๋ ์ฑํ ์ฑ ์ฐ๊ฒฐโ์์๋ WeChat, Feishu, Telegram, Slack, Discord๋ฅผ ๊ณ ๋ฅผ ์ ์๊ณ UI ์ธ์ด๋ ์ถ์ฒ ํญ๋ชฉ๋ง ์ ํฉ๋๋ค. โ๊ธฐ์ตํดโฆโ๋ผ๊ณ ๋ถ๋ช ํ ๋งํ๋ฉด ํด ํ ๊ธฐ์ต ์ ๋ฆฌ๋ฅผ 90์ด ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ํฉ๋๋ค. ์งํ ์ํฉ์ ์ฌ์ฉ์๋ณ๋ก ์ ์ฅ๋๋ฉฐ(Modelflare ๋ก๊ทธ์ธ ์ ๊ณ์ ๋ณ๋ก KVguide.owner.*, ๋ก๊ทธ์ธํ์ง ์์์ผ๋ฉด ๊ธฐ์กด๋๋ก config.json์ui.guide), ๋ชจ๋ ๋ง์น๋ฉด ์ดํ ์๋์ผ๋ก ์จ๊ฒจ์ง๋๋ค. ์ค์ค๋ก ๋ํ๋๋ ์๋ด ์นด๋๋ ์ ๋ ฅ์ฐฝ์ ์ด์์ด ์๊ฑฐ๋ ์์ ์ด ์คํ ์ค์ด๋ฉด ๊ธฐ๋ค๋ฆฝ๋๋ค. - ์๊ฐ ๋์์ธ: ๋ฌด์ฑ์๊ณผ ๊ตฌ์ฑ ์์๋ magpie(MIT)๋ฅผ ๋ฐํ์ผ๋ก ์์ ํ๊ณ ๊ฐ์กฐ์์ Modelflare์ ํ๊ด ์ฐ๋์
#d7ff00์ ๋๋ค.ui/design/README.md์ ๋์์ธ ์์คํ ์ ์ค๋ช ํฉ๋๋ค.
๊ด๋ฆฌ์๊ฐ ๊ฐ ๋ฒ์ญ์ ์ง์ ์์ฑํ๊ณ ํ์งํํฉ๋๋ค. ๋ฒ์ญ API๋ก ๋ฌธ๊ตฌ๋ฅผ ์์ฑํ์ง ๋ง์ธ์. ์ ํ๋ช
, ๋ชจ๋ธ ID, ๋ช
๋ น, URL, {placeholder} ๋งค๊ฐ๋ณ์๋ฅผ ์ ์งํ์ธ์.
- ์ฑ ๋ฌธ๊ตฌ:
ui/locales/<language>/<module>.js. ์ ์๋ฒ ์ธ์ด:src/i18n/locales/<language>/<module>.ts. - ์น์ฌ์ดํธ ๋ฌธ๊ตฌ:
site/src/i18n/locales/<language>/. ์๋ฅผ ๋ค์ดhome/hero.ts๋home.hero.*์ ๋์ํ๋ฉฐ ํ์ด์ง๋ ์ฌ์ ์์ ์ฝ์ต๋๋ค. ui/locales/manifest.json์ ๋์ ์ธ์ด์ready์ํ๋ฅผ ๋์ดํฉ๋๋ค. ์น์ฌ์ดํธ์site/src/i18n/manifest.json๊ณผ ๊ฐ์์ผ ํ๋ฉฐ ๊ฒ์ฌ๊ธฐ๋ก ํ์ธํฉ๋๋ค. ๋ฏธ์๋ฃ ์ธ์ด๋ready: false๋ก ์ ์งํ๊ณ ๊ณต๊ฐ ๋ฉ๋ด์ ๊ฒ์ ์์ง ์ธ์ด ํ์์ ํฌํจํ์ง ์์ต๋๋ค.npm run i18n:status๋ ์ธ์ดยท์์ญ๋ณ ์งํ๋ฅ ์ ๋ณด๊ณ ํฉ๋๋ค.npm run i18n:check๋ ๋ชจ๋ ๋์ ์ธ์ด์ ๋ณด์กฐ ๋ฌธ์๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๋๋ฝยท๋น ๊ฐยท์ถ๊ฐ ํค, ํผ์๋ ๋งค๊ฐ๋ณ์, ๋ณต์ํ ๋๋ฝ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฐจ๋จํฉ๋๋ค. ๊ฐ๋ฐ ์ค ์์ด ๋์ฒด๋ ๋ฒ์ญ ์๋ฃ๋ก ์ธ์ ํ์ง ์์ต๋๋ค.- ๋ฌ์์์ด ๋ณต์ํ์
one / few / many / other, ์คํ์ธ์ดยทํฌ๋ฅดํฌ๊ฐ์ด๋one / many / other(many๋ ๋ฐฑ๋ง ๋จ์ ์์๋ง ์ฐ๋ฉฐother์ ๊ฐ๊ฒ ์์ฑ), ์ผ๋ณธ์ดยทํ๊ตญ์ด๋other๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํตํ, ์๊ฐ๋, ๊ธ์ก์ ๋ฐ๊พธ์ง ์๊ณ ํ์๋ง ํ์งํํฉ๋๋ค. - ์น์ฌ์ดํธ์
npm run build๋ ๋ชจ๋ ์ธ์ด, ๋๊ธฐํ ๋ฌธ์, ๊ณต์ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ฌํฉ๋๋ค.build:draft๋ ๋ก์ปฌ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์ฉ์ด๋ฉฐ ๋ฆด๋ฆฌ์ค ๊ฒ์ฌ๋ฅผ ๋์ ํ์ง ์์ต๋๋ค.
๋ชจ๋ธ์ด ์ฝ๋ ๋ชจ๋ ํ๋กฌํํธ๋ src/agent/prompts/์ ์์ต๋๋ค. test/prompts.unit.test.ts๋ ๊ฐ ๋ถ๋ถ์ ํ์ยท๊ธ์ง ๋ฌธ๊ตฌ์ ๋ฌธ์ ์ ํ๋๋ฅผ ๊ฒ์ฌํ๊ณ , test/agent.integration.test.ts๋ ์ค์ DSH ์์ ํ๋ก์ธ์ค๋ก ๋ชจ๋ธ์ด ๋ฐ๋ ์์คํ
ํ๋กฌํํธ์ ์ ์ฒด ํ๋กฌํํธยท๋๊ตฌ ์ ์ ์์ฐ์ ๊ฒ์ฌํฉ๋๋ค.
- ๊ธฐ๋ณธ ์ญํ : DSH ์์ฒด ์ญํ ์ ์ฝ๋ฉ ์์ด์ ํธ์ด๋ฉฐ โYou are an AI agent powered by DeepSeek Harness.โ๋ก ์์ํฉ๋๋ค. ํจ์น(
host.ts์ writePatch)๊ฐpersonaPrefix๋ฅผ ๋ํยท์ฝ๋ฉยท๋ช ๋ นยทํ์ผยท์ปดํจํฐ ์ฌ์ฉ ์ ๋ฐ์คํฌํฑ ์ฑ ์กฐ์์ ํ๋ ๊ฐ์ธ ๋์ฐ๋ฏธ๋ก ๋ฐ๊พธ๊ณ ์นํ์ด์งยทํ์ผยท์ ๋ฌ ๋ฉ์์ง์ ๊ธ์ ๋ช ๋ น์ด ์๋ ๋ฐ์ดํฐ๋ก ์ทจ๊ธํ๋๋ก ํฉ๋๋ค. ํด๋น ํ ๋ฌธ์ฅ๋ง ์ ์ดํ๋includeHarnessIdentity๋ ๋๋๋ค. - ๋ด ์น์
: ๋ํ ๊ท์น, ๊ธฐ์ต ์ฌ์ฉ๋ฒ(์ผ์ง ๊ฒฝ์ฐ), ๋ด ์ด๋ฆ, ์ฌ์ฉ์ ์ญํ ์ค๋ช
์ด ์์คํ
ํ๋กฌํํธ ๋ง์ง๋ง
amb:bot์น์ ์ ๋๋ค. ํธ์คํธ๊ฐ ๋งค ์ฐจ๋ก ๋ฐ์ดํฐ ํด๋์dsh/.prompts/<bot>.md์ ๊ธฐ๋กํ๋ฉฐ ์์ด์ ํธ ํ์ผ ๋๊ตฌ๋ก ์ฝ๊ฑฐ๋ ๋ฐ๊ฟ ์ ์๊ณ ๋์ผ ๋ด์ฉ์ ๋ค์ ์ฐ์ง ์์ต๋๋ค.dsh-runtime/plugins/amb-prompt.mjs๊ฐ ๋งค ๋ชจ๋ธ ์์ฒญ์ ์ฝ์ผ๋ฏ๋ก ์ด๋ฆยท์ญํ ๋ณ๊ฒฝ์ด ๋ค์ ๋ฉ์์ง๋ถํฐ ์ ์ฉ๋ฉ๋๋ค./new๋ ํ๋ก์ธ์ค ์ฌ์์์ด ํ์ ์์ต๋๋ค. DSH 0.2.1-rc.4์ ์น์ text๋ ๋๊ธฐ์์ผ๋ก Promise๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์ ๋ธ๋ฆฌ์ง ๋์ ํ์ผ์ ์ฝ์ต๋๋ค. ์ญํ ๊ณผ ๋ํ ๊ท์น์ด ์ถฉ๋ํ๋ฉด ์ญํ ์ด ์ฐ์ ํ๋ฉฐ ์ฌ์ฉ์์ ๋ํํ์ง ์๋ ํ์ ์์ด์ ํธ์๋ ์ด ์น์ ์ ์ ๋ฌํ์ง ์์ต๋๋ค. - ๋ํ ๊ท์น: ์ค๊ตญ์ด์ด๋ฉฐ dsh-superagent์ ์ฃผ์ ์์น์ ์ฐธ๊ณ ํ์ต๋๋ค. ๋ต๋ถํฐ ์ ์ํ๊ณ ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ํ ์ผ์ ํ ์ค๋ก ์๋ฆฐ ๋ค ๋จ๊ณ๋ณ ์ค๊ณ๋ ํ๋ ํจ๋์ ๋งก๊น๋๋ค. ์๋ฃ ์ ๊ฒฐ๊ณผ์ ์์น๋ฅผ ๋งํ๊ณ ๋ฏธ์๋ฃยท์คํจ๋ ๊ทธ๋๋ก ์๋ฆฝ๋๋ค. ์ธ์ดยทํ์ยท๋ฒ์ยท๋ฌธ์ฒด๋ ์ค์ค๋ก ์ ํด ์ค๋ช
ํ๋ฉฐ, ์๋ชป๋ ์ถ์ธก์ด ํผํดยท๋น์ฉยท๋๋ถ๋ถ์ ์์
๋ญ๋น๋ฅผ ์ผ์ผํฌ ๋, ์ฌ์ฉ์๋ง ์ ๊ณตํ ์ ์๋ ๋ก๊ทธ์ธยทํ์ผยท๋น๋ฐ๋ฒํธ๊ฐ ํ์ํ ๋, ๊ฒฐ์ ยท๋ฐ์ดํฐ ์ญ์ ยทํ์ธ์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ์ฒ๋ผ ๋๋๋ฆด ์ ์์ ๋๋ง ์ง๋ฌธํฉ๋๋ค. ํ ๋ฒ์ ๊ตฌ์ฒด์ ์ธ ์ง๋ฌธ ํ๋๋ฅผ ํ๋ฉฐ ์ ํ์ง๋
ask_user_question์ ์ฌ์ฉํฉ๋๋ค. ๊ตฐ๋๋๊ธฐ ์์ด WeChatยทFeishu ์๋ต์ ์งง๊ฒ ํฉ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ ๊ฐ์ ์์น์ผ๋ก ์ ํํ ๋ด์ฉ์ ๊ฒฐ๊ณผ์ ๋ฐํ๋๋ค. - ๊ตฌ๊ฐ ์ฒซ ๋ฉ์์ง: ์ฑ๋(WeChat์ ์ผ๋ฐ ํ
์คํธ, Feishuยท์น์ Markdown), ๋น์ ์ฅ๊ธฐ ๊ธฐ์ต ์ค๋
์ท, ์ด์ ๊ตฌ๊ฐ ์ธ๊ณ ๋ฉ๋ชจ, ์ฌ์ฉ์ ๋ฉ์์ง ์์
๋๋ค. ๊ทธ๋ฃน ๊ธฐ์ตยท์ฑ๋ ๋ฑ ๋ํ๋ณ ์ ๋ณด๊ฐ ๋ค๋ฅด๊ณ ๊ธฐ์ต๋ง๋ค ๋ฐ๋์ด ์์คํ
ํ๋กฌํํธ์ ๋ฃ์ผ๋ฉด ๊ณต์ ์ ๋์ฌ ์บ์๊ฐ ๊นจ์ง๋ฏ๋ก ์ฌ๊ธฐ ๋ก๋๋ค. ๊ตฌ๊ฐ ๋ด์์๋ ๊ณ ์ ํ๊ณ ์ดํ ๊ธฐ์ต ๋ณ๊ฒฝ์
recall๋ก ์ฝ์ต๋๋ค. - ์ ๋์ฌ ์บ์: ์น์
์ด ๊ฐ์ผ๋ฉด ์์คํ
ํ๋กฌํํธ๋ ๋ฐ์ดํธ ๋จ์๋ก ๋์ผํ๊ณ ์ญํ ์์ ์ ๋ง์ง๋ง ์น์
๋ง ๋ฐ๊ฟ๋๋ค. ์
๊ทธ๋ ์ด๋ ์ ์์ํ ๋ํ์ ์ฒซ ๋ฉ์์ง์๋ ๋ค์ ๊ตฌ๊ฐ(
/new๋๋ ๊ด๋ฆฌ์ ์ ํ)๊น์ง ์ด์ ์ญํ ์ด ๋จ์ต๋๋ค.
์์ด์ ํธ ๋ชจ๋์์ ์
๋ ฅ์ฐฝ ์ผ์ชฝ ์๋ ๊ถํ ๋ฒํผ ๋๋ ๋ด ์ค์ โ ๊ถํ์ผ๋ก ํ๋ฆฌ์
์ ๋ฐ๊ฟ๋๋ค. /status์์๋ ํ์ธํฉ๋๋ค.
- ์์ ๊ณต๊ฐ ์ฐ๊ธฐ(๊ธฐ๋ณธ): ์๋๋ฐ์ค์์ ๋ช ๋ น์ ์คํํ๊ณ ํด๋น ๋ด์ ์์ ๊ณต๊ฐ๋ง ๋ณ๊ฒฝํฉ๋๋ค. ์ธ๋ถ ์์ ์ ๋ํ์์ ๋จผ์ ํ์ธํฉ๋๋ค.
- ์ฝ๊ธฐ ์ ์ฉ: ํ์ผ์ ๋ฐ๊พธ์ง ์์ผ๋ฉฐ ๋ช ๋ น๋ ์ฝ๊ธฐ ์ ์ฉ ์๋๋ฐ์ค์์ ์คํํฉ๋๋ค.
- ์ ์ฒด ์ ๊ทผ: ์ํ์ ์ดํดํ๊ณ ์ฆ์ ์น์ธ์ด ๋ถํธํ ์ฌ์ฉ์๋ฅผ ์ํ ์ค์ ์
๋๋ค. ์๋๋ฐ์ค ์์ด ๋ด ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์คํํ๊ณ ์ธ๋ถ ์์
๋ ๋ฌป์ง ์์ต๋๋ค. DBยท์ฑ๋ ํ ํฐยทํค ๋ฑ AnyModelBot ๋ฐ์ดํฐ ํด๋๋ฅผ ํฌํจํ ๋ชจ๋ ํ์ผ์ ์ฝ๊ณ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ฌ๊ท ์ญ์ ๋ง ๊ธฐ์กด ์น์ธ ํ๋ฆ(WeChat ๋ฒํธ ์๋ต, Feishuยท์น ์นด๋)์ผ๋ก ํ์ธํฉ๋๋ค. ๋์์
rm -r/-rf/--recursive(sudo,xargs,sh -c๋ด๋ถ ํฌํจ),find -delete,git clean,rsync --delete, PowerShellRemove-Item/rm/del/rd/rmdir์-Recurse๋ฐ ์ถ์ฝ, cmdrd /s,del /s,robocopy /MIR, Pythonshutil.rmtree, Nodefs.rm(โฆ, { recursive })๋ฑ์ด๋ฉฐ ๋ช ๋ น์ด ์ฐธ์กฐํ๋ ์คํฌ๋ฆฝํธ ํ์ผ๋ ๊ฒ์ฌํฉ๋๋ค. ์ ํ ์ ํ์ธํ๋ฉฐ ๋ฒํผยท์ค์ ์ ๋นจ๊ฐ์์ผ๋ก ํ์ํฉ๋๋ค.- ์ด๋ ์ค์ ์ญ์ ๋ฐฉ์ง ์ฅ์น์ด๋ฉฐ ๋ณด์ ๊ฒฝ๊ณ๊ฐ ์๋๋๋ค. ๋ช
๋ น ํ
์คํธ๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ์คํ ์ค ์กฐํฉํ ๋ช
๋ น(
eval "$(โฆ)",curl โฆ | sh)์ด๋make clean,npm run clean๊ฐ์ ๋น๋ ์คํฌ๋ฆฝํธ์ ๋ด๋ถ ๋์์ ์ ์ ์์ต๋๋ค. ๋ถํ์คํ๋ฉด ํ์ธํฉ๋๋ค. ํ์ฌ ๋ชจ๋ธ๊ณผ ์์ ์ ์ ๋ขฐํ ๋๋ง ์ผ์ธ์.
- ์ด๋ ์ค์ ์ญ์ ๋ฐฉ์ง ์ฅ์น์ด๋ฉฐ ๋ณด์ ๊ฒฝ๊ณ๊ฐ ์๋๋๋ค. ๋ช
๋ น ํ
์คํธ๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ์คํ ์ค ์กฐํฉํ ๋ช
๋ น(
์์ด์ ํธ๋ ๋ด ์ปดํจํฐ์์, ๋๋ก๋ ์ ์ฒด ์ ๊ทผ์ผ๋ก ์คํ๋๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์์ ํ์ฉํ ์ฌ๋๋ง ๋ํํ ์ ์์ต๋๋ค. ์ฑ๋ ๊ณ์ ๋ณ๋ก ๊ด๋ฆฌํ๋ฉฐ ํด๋น ๊ณ์ ์์ ํ์ฉ๋๋ฉด ๋ชจ๋ ๋ด๊ณผ ๋ํํ ์ ์์ต๋๋ค(src/core/access.ts).
- ์์ ์: WeChat์ QR ์ฝ๋๋ฅผ ์ค์บํ ๊ณ์ ์ ๋๋ค. Feishu๋ QR๋ก ์ฑ์ ๋ง๋ค๋ App IDยทSecret์ ๋ฃ๋ ์์ฒด ์ฌ์ฉ์ ๋ก๊ทธ์ธ์ด ์์ผ๋ฏ๋ก ์ฐ๊ฒฐ ํ ์ฒ์์ผ๋ก ๊ฐ์ธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ฌ๋์ด ์์ ์๊ฐ ๋ฉ๋๋ค(์ฒซ ์ฌ์ฉ ์ ๋ขฐ). ์ฐ๊ฒฐ ํ ๋ณธ์ธ ๊ณ์ ์ผ๋ก ํ ์ค ๋ณด๋ด๋ฉด ํ์์ฒ๋ผ ๋ตํฉ๋๋ค. ์ค์บ๋ ID๋ฅผ ์ ๊ณตํ์ง ์์ WeChat ๋ก๊ทธ์ธ๋ ๋์ผํฉ๋๋ค. ๋ด ์ค์ โ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ๋์์ Feishu ์์ ์๋ฅผ ํ์ธํ๊ณ ๋ณ๊ฒฝ์ ๋๋ฅธ ๋ค ํ์ธํ๋ฉด ์ด๊ธฐํ๋์ด ๋ค์ ๋ฐ์ ์๊ฐ ์์ ์๊ฐ ๋ฉ๋๋ค. ๋ค๋ฅธ Feishu ์ฑ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋ ์ฐ๊ฒฐ์ ํด์ ํด๋ ์ด๊ธฐํํฉ๋๋ค. ๊ฑฐ๋ถ๋ ์ฌ์ฉ์๋ ์์ ์๊ฐ ๋ ์ ์์ผ๋ฉฐ ๋ก์ปฌ ์น ๋ํ๋ ์ ํํ์ง ์์ต๋๋ค.
- ๊ทธ ์ธ ์ฌ์ฉ์: โ์์ง ์ด ๋ด์ ์ฌ์ฉ ํ๊ฐ๋ฅผ ๋ฐ์ง ์์์ต๋๋ค. ์์ ์์๊ฒ ์๋ ธ์ต๋๋คโ๋ผ๋ ํ ์ค๋ง ์ฌ๋๋น ์ต๋ ์๊ฐ๋น ํ ๋ฒ ๋ณด๋
๋๋ค. ๋๊ธฐ์ดยท๋ชจ๋ธ ํธ์ถยท๋น์ฉ์ ์์ต๋๋ค. ์ค์ โบ ์ฑํ
์ฑ๋์ ํด๋น ๊ณ์ ๊ด๋ฆฌ์ ํ์ฉยท๊ฑฐ๋ถ ์์ฒญ์ด ํ์๋๊ณ 4์๋ฆฌ ํ์ด๋ง ์ฝ๋๋ก ์์ ์์๊ฒ ์ ๋ฌํฉ๋๋ค(๊ณ์ ๋น ์๊ฐ๋น ์ต๋ 3๊ฑด, ์์ ์๊ฐ ์ต๊ทผ 24์๊ฐ ๋ด ํด๋น ์ฑ๋์์ ๋ฐ์ธํ ๊ฒฝ์ฐ๋ง). ์์ ์๋
ๅๆ 1234/ๆ็ป 1234๋๋yes 1234/no 1234๋ก ๋ตํฉ๋๋ค. ํ์ด๋ง ์ฝ๋๋ ๋๊ตฌ ์น์ธ ์ฝ๋์ ์ถฉ๋ํ์ง ์์ต๋๋ค. ๊ฑฐ๋ถ๋ ์ฌ์ฉ์์๊ฒ๋ ๋ตํ์ง ์์ต๋๋ค. - ํ์ฉ ๋ชฉ๋ก์ ์ค์ โบ ์ฑํ
์ฑ๋์ ํด๋น ๊ณ์ ๊ด๋ฆฌ์ ์์ผ๋ฉฐ ํญ๋ชฉ์ ์ญ์ ํ ์ ์์ต๋๋ค. ์ญ์ ๋ ์ฌ์ฉ์๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋ค์ ์์ฒญํ ์ ์์ต๋๋ค.
/status์๋ ํ์ํฉ๋๋ค. - ์ ๊ทธ๋ ์ด๋ ์ ๊ธฐ์กด ๊ฐ์ธ ๋ํ ์๋๋ โ์ ๊ทธ๋ ์ด๋ ์ ์ฌ์ฉโ ํ์๋ก ํ์ฉ ๋ชฉ๋ก์ ๋ฃ์ด ์ ๊ทผ์ด ๋๊ธฐ์ง ์๊ฒ ํฉ๋๋ค. ๋ค๋ฅธ WeChat ๊ณ์ ์ผ๋ก ๋ค์ ์ค์บํด๋ ์ด์ ์์ ์๋ ํ์ฉ ๋ชฉ๋ก์ ๋จ์ต๋๋ค.
- ๊ทธ๋ฃน ๋ํ: ํ์ฌ ์ด๋ค ์ฑ๋๋ ๊ทธ๋ฃน์ ์ ๋ฌํ์ง ์์ต๋๋ค(Feishu๋ ๊ฐ์ธ ๋ฉ์์ง๋ง, WeChat iLink๋ ๊ทธ๋ฃน ๋ฏธ์ง์). ๊ธฐ์กด ๊ทธ๋ฃน ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ์ ์งํ๋ฉฐ ์ฑ๋์ด ๊ทธ๋ฃน์ ์ง์ํ ๋
access.ts์ ๊ท์น์ ์ถ๊ฐํฉ๋๋ค.
์ต์ข
๋ต๋ณ, ํ์ผ, ์น์ธ ์์ฒญ, ์๋ด๋ ์ ์ก ์ ์ ๋ก์ปฌ DB ๋ณด๋ผ ํธ์งํจ์ ๊ธฐ๋กํฉ๋๋ค(src/core/outbox.ts). ์ค์๊ฐ ์นด๋ ๊ฐฑ์ ๊ณผ ์
๋ ฅ ์ค ํ์๋ ์ ์ธํฉ๋๋ค.
- ํ ๋ํ์ ๋ฉ์์ง๋ ์์๋๋ก ํ๋์ฉ ๋ณด๋ ๋๋ค. ๋คํธ์ํฌยทํ๋ซํผ ์ค๋ฅ๋ 5์ด๋ถํฐ ์ต๋ 5๋ถ๊น์ง ๊ฐ๊ฒฉ์ ๋๋ ค ์ฌ์๋ํ๊ณ ์ฑ๋์ด ์คํ๋ผ์ธ์ด๋ฉด ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ์ฑ ์ข
๋ฃยท์ถฉ๋ ํ ๋ค์ ์คํ์์ ์ด์ด ๋ณด๋
๋๋ค. ์ด๋ฏธ ๋ณด๋ธ ๋ฉ์์ง๋ ๋ฐ๋ณตํ์ง ์์ผ๋ฉฐ ๊ธด ์๋ต์ ์ฒซ ๋ฏธ์ ์ก ๋ถ๋ถ๋ถํฐ ์ฌ๊ฐํฉ๋๋ค. ์์ ๋ฉ์์ง์์ ID๋ฅผ ๋์ถํ๋ฏ๋ก ํ๋ซํผ์ด ์ค๋ณต ์ ๋ฌํด๋ ์ต์ข
์๋ต์ ํ ๋ฒ์
๋๋ค. ์ถฉ๋ ์๊ฐ ์ ์ก ์ค์ด๋ ๋ถ๋ถ๋ง ์ค๋ณต๋ ์ ์๊ณ ๊ณ ์ Feishu
uuid(1์๊ฐ ์ค๋ณต ์ ๊ฑฐ)์ WeChatclient_id๋ฅผ ์ฌ์ฉํฉ๋๋ค. - WeChat์ ๋ง์ง๋ง ์์ ํ 24์๊ฐ ์ด๋ด, ๋ฉ์์ง๋น ์ต๋ 10ํ๋ง ๋ตํ ์ ์์ต๋๋ค. ์ ํ ๋๋ฌธ์ ๋ชป ๋ณด๋ธ ๋ด์ฉ์ ๋ฒ๋ฆฌ์ง ์๊ณ ๋ณด๋ฅํฉ๋๋ค. ๋ค์ ๋ฉ์์ง๊ฐ ์ค๋ฉด ๋ต๋ณ ์ ์ ์๋ ์์๋๋ก ํ ๋ฒ์ฉ ๋ณด๋ด๋ฉฐ ํ ๋ฉ์์ง ํฌ๊ธฐ์ ๋ค์ด๊ฐ๋ ํ ์คํธ๋ โ์๋ฆฌ๋ฅผ ๋น์ด ๋์: โฆโ์ผ๋ก ํฉ์น๊ณ ํ์ผ์ ๊ทธ๋๋ก ๋ณด๋ ๋๋ค. ์ต๋ 7์ผ ๋ณด๊ดํ๋ฉฐ ์์ ์๋ดยท์น์ธ ์์ฒญ์ฒ๋ผ ์งง์ ์๋ช ์ ํญ๋ชฉ์ ์์ฒด ๋ง๋ฃ ์๊ฐ์ ์ ์งํฉ๋๋ค.
- ๋ฐ๋ณต ๊ฑฐ๋ถยท๋๊ธฐ ์๊ฐ ์ด๊ณผ ๋ฑ์ผ๋ก ๋ ์ด์ ์ ์กํ ์ ์์ผ๋ฉด ์ฌ์ ๋ฅผ ๋ก๊ทธ์ ์ง๋จ ์ ๋ณด์ ๋จ๊น๋๋ค.
์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํด ๋ํ๋ฅผ ๋ง์ง ์์ต๋๋ค(์ค๊ณ docs/design/background-tasks-and-proactive.md, ์ฝ๋ src/tasks/).
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
: ๋ํ ์์ด์ ํธ๊ฐ
task_start๋ก ์ ์ฉ DSH ์ธ์ task-<id>์ ์์ ๊ณต๊ฐ ํด๋tasks/<name>-<id6>/๋ฅผ ๋ง๋ค๊ณ ํ ์ผ์ ํ ์ค๋ก ์๋ฆฝ๋๋ค. ๊ฒฐ๊ณผ๋ ์์ฒญํ ๋ํ๋ก ๋์์ค๋ฉฐ WeChat ์ธ์ฉยทFeishu ๋ต์ฅ์ผ๋ก ์ด์ด๊ฐ๋๋ค. ์ฌ์ฉ์ ํ์ธ์ ๋ํ๋น ํ ๋ฒ์ ํ ์ง๋ฌธ์ ๋๋ค. ์ฑ ์ฌ์์ ํ ๊ณ์ํ๋ ์ธ๋ถ ๋์์ ๋ฐ๋ณตํ๊ธฐ ์ ์ ํ์ธํฉ๋๋ค./tasks๋ก ์์ ยท๊ท์น์ ๋์ดํ๊ณ/stop <number>๋ก ๋ฉ์ถฅ๋๋ค. - ๊ท์น:
rule_create๋๋ ๋ด ์ค์ โบ ๋จผ์ ๋ณด๋ด๋ ๋ฉ์์ง โบ ๊ท์น์์ ๋ง๋ญ๋๋ค. ์ฌ์ฉ์ ๋ฌธ๊ตฌ๊ฐ ๊ถํ ๋ถ์ฌ์ด๋ฏ๋ก ์ฆ์ ์คํ ๋ชจ๋๊ฐ ๋์ด ๋งค๋ฒ ํ์ธํ๊ณ ์ค์ํ ๋ด์ฉ๋ง ๋ณด๋ ๋๋ค. ๋ฌธ๊ตฌ ์์ ํ์๋ ์คํ ๋ชจ๋์ ๋๋ค. โ์ฐ์ ๊ด์ฐฐํด ์คโ ๋๋ ํธ์ง๊ธฐ์ ๊ด์ฐฐ์ ์ ํํ๋ฉด ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ณด๋ด์ง ์๊ณ โ์ ์ก ์์ โ์ ๊ธฐ๋กํฉ๋๋ค. 3ํ ๊ด์ฐฐ ํ โ๋ด ํ์ธ ํ์โ์์ ์คํ ์ ํ ์ฌ๋ถ๋ฅผ ๋ฌป์ต๋๋ค. ๋งค ์คํ์ ์ ์ธ์ ์ด๋ฉฐ ๊ธฐ๋ก์ Markdown์ผ๋ก ๋ด๋ณด๋ ๋๋ค. - ๋ณด์ด๋ ์๋๋ฝ์ง ์๊ฒ: ์ ๋ณด ํจ๋์ ์์ ๊ทธ๋ฃน์ ์์ ยท๊ท์น์ ํ์ํ๊ณ ๋๋ ์์ ์ ์ข ๋ฃ ํญ๋ชฉ์ผ๋ก ์ ์ต๋๋ค. ์ถ์ฒ, ์ต๊ทผ ์งํ, ์์ฐ, ํด๋, ์คํ ๋จ๊ณ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๊ธฐ๋ค๋ฆฌ๋ ํญ๋ชฉ์ ์ฌ์ด๋๋ฐ โ๋ด ํ์ธ ํ์โ์ ๋ชจ์๋๋ค. ๊ฒฐ๊ณผยท๊ฒฐ์ ์์ฒญยท์คํจ๋ง ํธ์ํฉ๋๋ค. ๋ฐฉํด ๊ธ์ง(๊ธฐ๋ณธ 22:00~08:00), ์ผ์ผ ํ๋(WeChat 3๊ฐ, Feishu 5๊ฐ), ๋ฌถ์ ์๋ฆผ์ ๋ด ์ค์ โบ ๋จผ์ ๋ณด๋ด๋ ๋ฉ์์ง์ ์์ต๋๋ค.
- ์์ฐ: ๊ธฐ๋ณธ ์์ ๋น $1, ๊ท์น ์คํ๋น $0.10, ๊ท์น๋ณ ์ $3์ด๋ฉฐ Modelflare ์ฐธ๊ณ ๊ฐ๊ฒฉ์ผ๋ก ์ถ์ ํฉ๋๋ค. ํ๋์ ๋๋ฌํ๋ฉด ๋ฉ์ถ๊ณ ๋ฌป์ต๋๋ค. ์์ ์์ธยท๊ท์น ํธ์ง๊ธฐ์์ ๋ฐ๊ฟ๋๋ค. ๋ด ์์ฐ ํค์ ์์ก์ด 20% ์๋๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋๋ฅผ ์ค์งํด ๋ํ์ฉ์ผ๋ก ๋จ๊น๋๋ค.
- ์ผ์ ์ค์ง: ๋ด ์ค์ โบ ๋จผ์ ๋ณด๋ด๋ ๋ฉ์์ง โบ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ผ์ ์ค์ง ๋๋ ๋ด์๊ฒ ์์ฒญํ๋ฉด ์์ ยท๊ท์นยทํธ์๋ฅผ ๋ณด๋ฅํ๊ณ ๋ํ๋ ๊ณ์ํฉ๋๋ค.
- ๋ณด์กด: ์์
ยท๊ธฐ๋ก์ 30์ผ ๋ณด๊ดํ๋ฉฐ 30์ผ ๋ฏธ์ฌ์ฉ ์์
์ ๋ณด๊ด ์ฒ๋ฆฌํฉ๋๋ค. 30์ผ ๋ฏธ์ฌ์ฉ ํด๋๋ DSH ์ธ์
ํ์ผ(
dsh/<bot>/sessions/)๊ณผ ํจ๊ป ์ญ์ ํฉ๋๋ค. SDK์ ์ญ์ ๊ธฐ๋ฅ์ด ์์ด ์ฑ์ด ์ง์ ์ง์ฐ๋ฉฐ ํ๋ก์ธ์ค์ ์ด๋ฆฐ ์ธ์ ์ ๊ต์ฒด ํ ์ญ์ ํฉ๋๋ค. ๋ณ๋ ์ง๋ฌธยท์๋ฆผ์ ์์ต๋๋ค. 27์ผ์งธ ์ญ์ ์์ ์ผ์ ์ค์ ํด ์์ ์์ธ์ ํ์ํ๋ฉฐ ๋ณด๊ด์ ๋๋ฅด๋ฉด ์ ์งํฉ๋๋ค. ์์ ์ผ ์ค์ ํ ์ต์ 3์ผ ์ ์ ์ญ์ ํ์ง ์์ต๋๋ค. ์์ธ์์ ํด๋ ํฌ๊ธฐ๋ฅผ ๋ณด๊ณ ํด๋์ ํจ๊ป ์์ ์ ์ญ์ ํ ์๋ ์์ต๋๋ค.
๋ด ์ค์ (์ ๋ณด ํจ๋ โ) โ ์ปดํจํฐ ์ฌ์ฉ์์ ์ผ๊ธฐยท๋๊ธฐ, ๋ฐฑ์๋, ์น์ธ ๋ชจ๋๋ฅผ ์ ํฉ๋๋ค. /status์ ์ค์ ์์ ํ์ฌ ๋ฐฑ์๋ยท๊ฐ์ฉ์ฑยท์ฌ์ฉ ๋ถ๊ฐ ์ด์ ๋ฅผ ๋ด
๋๋ค.
- ๋ฐฑ์๋
- Cua Driver(๊ธฐ๋ณธ, ์ธ ๋ฐ์คํฌํฑ ํ๋ซํผ): ๊ณต์ ์ฌ์ ๋น๋ cua-driver 0.37.0(MIT)์ ์ค์น ํ์ผ์ ํฌํจํฉ๋๋ค. ๋น๋ ์
scripts/fetch-cua-driver.mjs๋ก ํ๋ซํผยท์ํคํ ์ฒ๋ณ ๋ค์ด๋ก๋ ํ SHA256์ ๊ฒ์ฆํฉ๋๋ค. ๋ด์ฅ MCP ์๋ฒcua-driver mcp๋ก ์คํํ๋ฉฐ ํญ์CUA_DRIVER_PERMISSION_MODE=bounded์ ๊ธฐ๋ฅ ๋งค๋ํ์คํธ๋ฅผ ์ ์ฉํ๊ณ--dangerously-bypass-approvals๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์์ ํ๊ฒฝ์์ ๋น๋ฐ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๊ณ ํ ๋ ๋ฉํธ๋ฆฌ์run_script๋ฅผ ๋๋๋ค. ์ฐฝยท์คํฌ๋ฆฐ์ท ์ฝ๊ธฐ, ์ฑ ์คํ, ํด๋ฆญ, ์ ๋ ฅ, ํคยท๋จ์ถํค, ์คํฌ๋กค, ๋๊ธฐ, ๊ฐ ์ค์ , ๋ฉ๋ด ๋ฑ์ ํ์ํ 24๊ฐ ๋๊ตฌ๋ง ๋ ธ์ถํฉ๋๋ค. ์คํฌ๋ฆฝํธยทํ๋ก์ธ์ค ์ข ๋ฃยทํด๋ฆฝ๋ณด๋ยท๋ธ๋ผ์ฐ์ ์ฝ์ ยท๋ นํยท์ ๋ฐ์ดํธ ๋ฑ์ ๋ชจ๋ธ์ ๋ณด์ด์ง ์๊ณ ๊ฑฐ๋ถํฉ๋๋ค. ๋งค๋ํ์คํธ๋ ์ค์น๋ GUI ์ฑ(Linux .desktop, macOS /Applications, Windows ์์ ๋ฉ๋ด)์ ๋์ดํ๊ณ ์ ์ฒด ํ๋ฉด ์ ๋ ฅ์ ํ์ฉํฉ๋๋ค. ์ต๋ 24์๊ฐ ์ ํจํ๋ฉฐ ๋ง๋ฃ ์ ์ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์์ํฉ๋๋ค. - Codex Computer Use ๋ธ๋ฆฌ์ง(์ ํ, macOS ์ ์ฉ): kimi-computer-use์ ๋๋ค. OpenAI Codex Computer Use์ ๋ก์ปฌ ์ค์น๊ฐ ํ์ํ๋ฉฐ ์ฌ์ฉํ ์ ์์ผ๋ฉด Cua Driver๋ก ์ ํํฉ๋๋ค.
- Cua Driver(๊ธฐ๋ณธ, ์ธ ๋ฐ์คํฌํฑ ํ๋ซํผ): ๊ณต์ ์ฌ์ ๋น๋ cua-driver 0.37.0(MIT)์ ์ค์น ํ์ผ์ ํฌํจํฉ๋๋ค. ๋น๋ ์
- ์น์ธ: ์ฝ๊ธฐยท์คํฌ๋ฆฐ์ทยทํด๋ฆญยท์ ๋ ฅยทํคยท์คํฌ๋กคยท๋๊ธฐยท๊ฐ ์ค์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์น์ธ ์์ด ์๋ ์คํํฉ๋๋ค. ์ ํ์ ์ผ๋ก ํ๋ฉด ๋ณ๊ฒฝ ์ ์ ํ์ธํ ์ ์์ผ๋ฉฐ ์ฝ๊ธฐ๋ ์๋์ ๋๋ค. ์ ๊ทธ๋ ์ด๋ ์ ๊ธฐ๋ณธ ๋ด์ ํฌํจํ ๊ธฐ์กด ๋ด์ ์๋ ๋ชจ๋๋ก ์ด์ ํฉ๋๋ค. ์ฝ๊ธฐ ์ ์ฉ ๋ด์ ์ฝ๊ธฐ ๋๊ตฌ๋ง ๋ฐ์ต๋๋ค.
- ํ๋ซํผ๋ณ ์ฌํญ
- macOS: ์์คํ
์ค์ โ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฐ ๋ณด์์์ ์์ฌ์ด ์ฌ์ฉยทํ๋ฉด ๊ธฐ๋ก์ ํ์ฉํฉ๋๋ค.
--direct๋ชจ๋๋ก ์คํํ๋ฉฐ ์ค์ ๊ธฐ๊ธฐ ๊ฒ์ฆ์ ์์ง ์๋ฃํ์ง ์์์ต๋๋ค. ๊ถํ์ด ์์ผ๋ฉด ์ปดํจํฐ ์ ์ด ๋๊ตฌ ํธ์ถ์ ๋ง๊ณ ์ด๋ฒ ํด์ โ๊ถํ์ด ์์ด ๊ณ์ํ ์ ์์์ต๋๋คโ๋ก ๋๋ด๋ฉฐ, ๋ํ์ ๋ถ์กฑํ ๊ถํ๋ง ๋ด์ ์นด๋๋ฅผ ๋ณด์ฌ ์ค๋๋ค(์์คํ ๊ธฐ๋ณธ ์์ฒญ, ํด๋น ์์คํ ์ค์ ์ด๊ธฐ, ๋ค์ ํ์ธ. ํ๋ฉด ๊ธฐ๋ก์ ๋ณดํต ์ฑ์ ๋ค์ ์ด์ด์ผ ํ๋ฉฐ ์นด๋์์ ๋ฐ๋ก ๋ค์ ์ด ์ ์๊ณ ๋ณด๋ด์ง ์์ ์ด์๋ ๋์์ต๋๋ค). ์ฒ์ ์คํํ ๋๋ ์๋ฌด ๊ถํ๋ ์์ฒญํ์ง ์์ต๋๋ค. - Linux: X11์ AT-SPI๋ก ํ๋ฉด์ ์ฝ์ต๋๋ค(at-spi2-core ๋ฐ ์ฑ์ ์ ๊ทผ์ฑ ํ์ฑํ ํ์). Wayland๋ ๊ธฐ๋ฅ์ด ์ ํ๋์ด XWayland ์ฑ์ ์ ๊ฒฝ ์ฐฝ๋ง ์กฐ์ํ๋ฉฐ ํ๋ฉด์ ์ด๋ฅผ ์๋ฆฝ๋๋ค. ๊ทธ๋ํฝ ์ธ์ (DISPLAY / WAYLAND_DISPLAY)์ด ์์ผ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Windows: ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ํํ ๋ฐ์คํฌํฑ ์ธ์ ์ด ํ์ํฉ๋๋ค. ์๋น์คยท์์ฝ ์์ ์ ๋น๋ํํ ์ธ์ ์ ์ง์ํ์ง ์์ต๋๋ค.
- macOS: ์์คํ
์ค์ โ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฐ ๋ณด์์์ ์์ฌ์ด ์ฌ์ฉยทํ๋ฉด ๊ธฐ๋ก์ ํ์ฉํฉ๋๋ค.
- ์คํฌ๋ฆฐ์ท์ ๋น์ ์ง์ ๋ชจ๋ธ์๋ง ๋ณด๋ด๋ฉฐ WeChat/Feishu์ ์ ๋ฌํ์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋๋ง ํ์ผ๋ก ๋ณด๋ ๋๋ค.
- cua-perception, OmniParser(AGPL), Cua Spaces(FSL) ๊ตฌ์ฑ ์์๋ ํฌํจํ์ง ์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ค์ โบ ์ฑํ ์ฑ๋ โ Feishu โ ๊ณ์ ์ถ๊ฐ์์ QR ์ฝ๋๋ฅผ ์ค์บํด ๋ด ์ฑ์ ๋ง๋ค๊ณ Feishu์์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
๊ธฐ์กด ๊ธฐ์ ์ฉ ์ฌ์ฉ์ ์ง์ ์ฑ์ ์ฐ๋ ค๋ฉด โ๋ด ์ฑ ์ฌ์ฉโ์ ์ ํํ๊ณ ๋ค์์ฒ๋ผ ์ค์ ํ์ธ์.
- Feishu Open Platform์์ ๊ธฐ์ ์ฉ ์ฌ์ฉ์ ์ง์ ์ฑ์ ๋ง๋ค๊ณ ๋ด ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
- ๋ค์ ๊ถํ์ ์ผญ๋๋ค.
im:message.p2p_msg:readonly: ์ฌ์ฉ์๊ฐ ๋ด์๊ฒ ๋ณด๋ธ ๊ฐ์ธ ๋ฉ์์ง ์ฝ๊ธฐ.im:message:send_as_bot: ์ฑ์ผ๋ก ๋ฉ์์ง ์ ์ก.cardkit:card:write: ์ค์๊ฐ ์๋ต ์นด๋ ์์ฑยท๊ฐฑ์ .im:message.history:readonly: ๋ํ ๊ธฐ๋ก ์ฝ๊ธฐ. ์ง์ ์ฐ๊ฒฐ์ ์คํ๋ผ์ธ ์ค ๋ฉ์์ง๋ฅผ ๋ค์ ๋ฐ์ด ์ฃผ์ง ์์ ์์ยท์ฌ์ฐ๊ฒฐ ์ ์ต๊ทผ 7์ผ ํ์ฑ ๋ํ์์ ์ต๊ทผ 24์๊ฐ ๋ฉ์์ง๋ฅผ ๋ํ๋น ์ต๋ 20๊ฐ ๊ฐ์ ธ์ต๋๋ค. ์์ด๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋์ง๋ง ๋๋ฝ ๋ฉ์์ง๋ฅผ ๋ณด์ถฉํ์ง ๋ชปํ๋ฉฐ ์ด๋ฅผ ํ ๋ฒ ์๋ฆฝ๋๋ค.
- ์ฑ์ ์ค์ โบ ์ฑํ ์ฑ๋ โ Feishu โ ๊ณ์ ์ถ๊ฐ โ ๋ด ์ฑ ์ฌ์ฉ์ App ID / App Secret์ ๋ฃ๊ณ ์ ์ฅํฉ๋๋ค. ๋ค์ ๋จ๊ณ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ์ง์ ์ฐ๊ฒฐ์ด ๋จผ์ ์จ๋ผ์ธ์ด์ด์ผ ํฉ๋๋ค.
- Events & callbacks์ ๊ตฌ๋
๋ชจ๋์์ Receive events through persistent connection์ ์ ํํ๊ณ
im.message.receive_v1์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. - ๋ฒ์ ์ ๊ฒ์ํ๊ณ ๋ณธ์ธ์ ์ด์ฉ ๊ฐ๋ฅ ๋ฒ์์ ๋ฃ์ ๋ค ๋ณธ์ธ Feishu์์ ํ ์ค ๋ณด๋ ๋๋ค. ์ฐ๊ฒฐ ํ ์ฒซ ๋ฐ์ ์๊ฐ Feishu ์์ ์๊ฐ ๋ฉ๋๋ค(๋ด์ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ ์ฐธ์กฐ).
ํ์ฌ ๊ฐ์ธ(p2p) ๋ํ๋ง ์ฒ๋ฆฌํ๋ฉฐ ๊ทธ๋ฃน ๋ฉ์์ง๋ ๋ฌด์ํฉ๋๋ค.
- ์ค์ โบ ์ฑํ
์ฑ๋ โ WeChat โ ๊ณ์ ์ถ๊ฐ โ QR ์ฝ๋๋ก ๋ก๊ทธ์ธ์ ์ ํํ ๋ค WeChat์ผ๋ก ์ค์บํ๊ณ ํ์ธํฉ๋๋ค. ๋๋
npm run weixin:login์ ์คํํ๋ฉด ํฐ๋ฏธ๋์ QR ์ฝ๋๋ฅผ ํ์ํ๊ณ ๋ฐ์ดํฐ ํด๋์ PNG๋ก ์ ์ฅํฉ๋๋ค. - ๋ก๊ทธ์ธ ์ํ, ๋๊ธฐํ ์ปค์, context_token์ ๋ฐ์ดํฐ ํด๋์ ์ ์ฅํ๋ฉฐ ์ฌ์์ ํ ๋ณต์ํฉ๋๋ค.
- ํ๋ซํผ ์ ํ: ์์ ๋ฉ์์ง๋ง๋ค 24์๊ฐ ๋ด ์ต๋ 10ํ ์๋ตํฉ๋๋ค. ์์ฑ์ด ๋๋๋ฉด ํ ๋ฒ์ ๋ณด๋ด๋ 4,000์๋ฅผ ๋์ผ๋ฉด ๋๋๋๋ค. ์์ฑ ์ค์๋ ์ ๋ ฅ ์ค ํ์๊ฐ ๋์ต๋๋ค.
- ์ด๋ฏธ์งยทํ์ผยท๋์์: ์ฌ์ฉ์๊ฐ ๋ณด๋ด๊ฑฐ๋ ์ธ์ฉํ ์๋ฃ๋ฅผ WeChat CDN์์ ๋ค์ด๋ก๋ํ๊ณ ๋ณตํธํํฉ๋๋ค(ํ์ผ๋น ์ต๋ 50MB). ์์ด์ ํธ ๋ชจ๋์์๋ ์์
๊ณต๊ฐ
inbox/์ ์ ์ฅํ๊ณ ๋ฉ์์ง์ ๊ฒฝ๋ก๋ฅผ ์ ์ด ์ฝ๊ธฐยท์ฒ๋ฆฌยท์์ฑ ์ฐธ๊ณ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํฉ๋๋ค. Claude, GPT-5/6, Gemini, Grok 4, Kimi K3, Muse Spark ๋ฑ ๋น์ ๋ชจ๋ธ์๋ ์ด๋ฏธ์ง ์์ฒด๋ ์ ๋ฌํ๊ณ ๊ทธ ์ธ์๋ ๊ฒฝ๋ก๋ง ์ ๋ฌํฉ๋๋ค. Linux๋ Electron์์ sharp๊ฐ ์ถฉ๋ํด ์์ง ์ด๋ฏธ์ง๋ฅผ ์ง์ ์ ๋ฌํ์ง ์๊ณ ๊ฒฝ๋ก๋ง ๋ณด๋ ๋๋ค. ๋ด์ด ์ ๋ฌํ๋ ํ์ผ(present)์ ์ด๋ฏธ์ง๋ ํ์ผ ํํ๋ก WeChat์ ๋ณด๋ ๋๋ค. - ์ธ์ ๋ง๋ฃ(์ค๋ฅ -14) ์ ์ฑ๋์ ์ผ์ ์ค์งํ๊ณ ํ๋ฉด์ ์๋ฆฝ๋๋ค. ๋ค์ ์ค์บํ๋ฉด ์ฌ๊ฐํฉ๋๋ค.
npm run typecheck
npm test # ๋จ์+์คํ๋ผ์ธ ์ข
๋จ ๊ฐ(Feishu/iLink/Modelflare ๋ชจ์, ์คํธ๋ฆฌ๋ฐยท์ค์ง ํฌํจ)+๊ฒ์ดํธ์จ์ด ํตํฉ(์ปดํ์ผ๋ magpie ํ์)
npm run docs:check # README ๊ฒ์ฌ: ์๋ฃ ์กด์ฌยทํฌ๊ธฐ, zh/en ๊ตฌ์กฐ, ์๋ ๋งํฌยท์ต์ปค, ๊ธ์ง ๋ฌธ๊ตฌ, ๋์ฒด ํ
์คํธREADME ์๋ฃ ๋ชฉ๋ก๊ณผ ๋ นํ ๊ท๊ฒฉ์ docs/assets/README.md๋ฅผ ํ์ธํ์ธ์.
MIT์ด๋ฉฐ LICENSE๋ฅผ ์ฐธ๊ณ ํ์ธ์. magpie(MIT, ์์ ํ ํ๋ฉด ์คํ์ผ ํฌํจ), Tencent openclaw-weixin(MIT) ๋ฑ ์ 3์ ๊ตฌ์ฑ ์์๋ THIRD_PARTY_NOTICES.md ๋ฐ ์ค์ โ ์ฑ ์ ๋ณด์ ๋์ดํฉ๋๋ค.
์ฌ์ฉ๋ฒ๊ณผ ZIP ํ์์ ์คํฌ ์๋ด๋ฅผ ์ฐธ๊ณ ํ์ธ์. src/skills/archive.ts๋ ๊ฒฝ๋ก, ์์ถ ํด์ ์ ํ, SKILL.md๋ฅผ ๊ฒ์ฆํ๊ณ service.ts๋ ๋ด๋ณ ํจํค์ง, ํ์ฑํ ์ํ, ๋ฒ์ ์๋ณ๊ฐ์ ์ ์ฅํฉ๋๋ค. src/web/skills.ts๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๊ด๋ฆฌ API๋ฅผ ์ ๊ณตํฉ๋๋ค. DSH๊ฐ ๋๊ธฐ ์ํ์ผ ๋ ํ์ฑํ๋ ์คํฌ์ ๋ฐฐ์นํ๋ฏ๋ก ์งํ ์ค์ธ ๋ํ, ํ์ ์์ด์ ํธ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ช
๋ น์ ์ค๋จํ์ง ์์ต๋๋ค. ์นดํ๋ก๊ทธ Bot ์
๋ฐ์ดํธ ์ src/botkit/installer.ts๊ฐ ์ด๋ฆ ์ถฉ๋์ ํ์ธํฉ๋๋ค.
src/store/chat-search.ts๋ SQLite ๋ฉ์์ง ๊ฒ์ ์์ธ, ํํฐ, ํ์ด์ง ๋๋๊ธฐ, ์๋ ๋ฉ์์ง์ ์ฃผ๋ณ ๋ฌธ๋งฅ์ ๋ด๋นํฉ๋๋ค. ์ ์ฒด ๊ฒ์์ ui/screens/message-search.js, ํ์ฌ ๋ํ ๊ฒ์์ ui/components/chat-search.js์ ์์ต๋๋ค. ๊ฒ์์ ๋ก์ปฌ DB๋ฅผ ์ง์ ์ฝ์ผ๋ฉฐ ๋ชจ๋ธ์ ํธ์ถํ์ง ์์ต๋๋ค.
๊ด๋ จ ํ
์คํธ๋ test/skills*.test.ts์ test/chat-search*.test.ts์
๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฒ์ฆ์ฉ Chromium ๊ฒฝ๋ก๋ AMB_TEST_CHROME์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. DSH๊ฐ ์์ผ๋ฉด ์คํฌ ๋ฐ๊ฒฌ, ๋ก๋ฉ, ์๋ฃ ์ฝ๊ธฐ, ์์
์ค ๋นํ์ฑํ๋ ๊ฒ์ฆํฉ๋๋ค.