discord-agent-bridge 0.2.0 โ 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +262 -0
- package/README.md +177 -116
- package/dist/app.js +7 -10
- package/dist/app.js.map +1 -1
- package/dist/core/configResolver.js +4 -0
- package/dist/core/configResolver.js.map +1 -1
- package/dist/core/configSchema.js +8 -0
- package/dist/core/configSchema.js.map +1 -1
- package/dist/core/providerCatalog.js +10 -35
- package/dist/core/providerCatalog.js.map +1 -1
- package/dist/core/sessionOrchestrator.js +148 -4
- package/dist/core/sessionOrchestrator.js.map +1 -1
- package/dist/discord/configPanel.js +38 -6
- package/dist/discord/configPanel.js.map +1 -1
- package/dist/discord/format.js +30 -11
- package/dist/discord/format.js.map +1 -1
- package/dist/discord/i18n.js +4 -0
- package/dist/discord/i18n.js.map +1 -1
- package/dist/discord/interactionRouter.js +32 -8
- package/dist/discord/interactionRouter.js.map +1 -1
- package/dist/discord/renderers/index.js +63 -11
- package/dist/discord/renderers/index.js.map +1 -1
- package/dist/discord/renderers/streamEmbed.js +11 -0
- package/dist/discord/renderers/streamEmbed.js.map +1 -1
- package/dist/modes/claude/session.js +6 -0
- package/dist/modes/claude/session.js.map +1 -1
- package/dist/modes/codex/index.js +3 -0
- package/dist/modes/codex/index.js.map +1 -1
- package/package.json +1 -1
package/README.ko.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# discord-agent-bridge
|
|
2
|
+
|
|
3
|
+
๐ **ํ๊ตญ์ด** | [English](README.md)
|
|
4
|
+
|
|
5
|
+
> Self-hosted Discord bot that runs AI coding agents โ Claude Code, Codex, and more โ per channel. Role-based access, multi-server, extensible.
|
|
6
|
+
|
|
7
|
+
**์ฑ๋๋ง๋ค Claude Code / Codex ๊ฐ์ AI ์ฝ๋ฉ ์์ด์ ํธ๋ฅผ ๋ถ์ฌ ์ฐ๋ ์
ํํธ์คํ
Discord ๋ด์
๋๋ค.** ๋ด PC์์ ์คํ๋๊ณ , ์ญํ ๊ธฐ๋ฐ ๊ถํ ยท ๋ค์ค ์๋ฒ ยท ํ์ฅ ๊ฐ๋ฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
|
|
8
|
+
|
|
9
|
+
- ํ์ฌ ์ง์: **Claude Code**, **Codex**
|
|
10
|
+
- ํ์ฅ: ๋ชจ๋ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ๋ก ๋ค๋ฅธ ์์ด์ ํธ(์: opencode) ์ฐ๊ฒฐ ๊ฐ๋ฅ
|
|
11
|
+
|
|
12
|
+
> โ
**npm์ ๋ฐฐํฌ๋์ด ์์ต๋๋ค.** `npx discord-agent-bridge` ๋ก ๋ฐ๋ก ์คํํ๊ฑฐ๋(๊ถ์ฅ), ์ ์ญ ์ค์นยท์์ค ๋น๋๋ก๋ ์ธ ์ ์์ต๋๋ค. **Claude Code ยท Codex** ๋ ๋ฐฑ์๋๋ฅผ ์ง์ํฉ๋๋ค.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## ์ด๊ฒ ๋ญ์์?
|
|
17
|
+
|
|
18
|
+
Discord ์ฑ๋์์ ๋ํํ๋ฏ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด, ๋ด ์ปดํจํฐ์์ Claude Code(๋๋ Codex)๊ฐ ๊ทธ ํ๋ก์ ํธ ํด๋๋ฅผ ๋์์ผ๋ก ์์
ํด ์ฃผ๋ ๋ด์
๋๋ค.
|
|
19
|
+
|
|
20
|
+
- **์ฑ๋ = ์ธ์
= ํ๋ก์ ํธ ํ๋.** ์ฑ๋์ ๋ง๋ค ๋ ์์
ํด๋์ ๋ฐฑ์๋(Claude/Codex)๋ฅผ ์ ํฉ๋๋ค.
|
|
21
|
+
- **์ฌ๋ฌ ์๋ฒ**์ ๊ฐ์ ๋ด์ ์ด๋ํด ์ธ ์ ์๊ณ , **์๋ฒ/ํ๋ก์ ํธ๋ง๋ค ์ค์ ์ด ๋ฐ๋ก** ์ ์ฉ๋ฉ๋๋ค.
|
|
22
|
+
- **์ญํ (Role)๋ก ๋๊ฐ ์ธ ์ ์๋์ง** ํต์ ํฉ๋๋ค.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ์ค๋น๋ฌผ
|
|
27
|
+
|
|
28
|
+
- **Node.js 20 ์ด์**
|
|
29
|
+
- ์ฌ์ฉํ ๋ฐฑ์๋์ ๋ง๋ CLI๊ฐ **์ค์น + ๋ก๊ทธ์ธ**๋์ด ์์ด์ผ ํฉ๋๋ค:
|
|
30
|
+
- **Claude ๋ชจ๋** โ [Claude Code](https://docs.anthropic.com/en/docs/claude-code) ์ธ์ฆ (`claude` ๋ก๊ทธ์ธ ๋๋ `ANTHROPIC_API_KEY`). ์ฌ์ฉ๋/ํ๋ ํจ๋์ ๋ณด๋ ค๋ฉด **Claude Pro/Max ๊ตฌ๋
๋ก๊ทธ์ธ**์ด ํ์ํฉ๋๋ค.
|
|
31
|
+
- **Codex ๋ชจ๋** โ `codex` CLI ์ค์น + ๋ก๊ทธ์ธ.
|
|
32
|
+
- **Discord ๋ด ํ ํฐ** (์๋ 1๋จ๊ณ์์ ๋ฐ๊ธ)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 1๋จ๊ณ โ Discord ๋ด ๋ง๋ค๊ธฐ (Developer Portal)
|
|
37
|
+
|
|
38
|
+
๋ด์ ์ง์ ํ๋ ๋ง๋ค์ด์ผ ํฉ๋๋ค. 5๋ถ์ด๋ฉด ๋ฉ๋๋ค.
|
|
39
|
+
|
|
40
|
+
1. **[Discord Developer Portal](https://discord.com/developers/applications)** ์ ์ โ ์ค๋ฅธ์ชฝ ์ **New Application** โ ์ด๋ฆ ์
๋ ฅ(์: `my-agent-bot`) โ **Create**.
|
|
41
|
+
2. ์ผ์ชฝ ๋ฉ๋ด **Bot** ํญ โ **Reset Token** โ ๋์ค๋ **ํ ํฐ์ ๋ณต์ฌ**ํด ์์ ํ ๊ณณ์ ๋ณด๊ด.
|
|
42
|
+
- โ ๏ธ ์ด ํ ํฐ์ ๋น๋ฐ๋ฒํธ์
๋๋ค. ๋
ธ์ถ๋๋ฉด ์ฆ์ **Reset Token**์ผ๋ก ์ฌ๋ฐ๊ธํ์ธ์.
|
|
43
|
+
3. ๊ฐ์ **Bot** ํญ ์๋ **Privileged Gateway Intents**:
|
|
44
|
+
- โ
**MESSAGE CONTENT INTENT** โ **ํ์** (๋ด์ด ๋ฉ์์ง ๋ด์ฉ์ ์ฝ์ด์ผ ํจ)
|
|
45
|
+
- โ
**SERVER MEMBERS INTENT** โ ๊ถ์ฅ (์ญํ ๊ธฐ๋ฐ ๊ถํ ํ์ธ์ ์ฌ์ฉ)
|
|
46
|
+
- ์ผ๊ณ **Save Changes**.
|
|
47
|
+
4. ์ผ์ชฝ **OAuth2** ํญ โ **Client ID(Application ID)** ๋ณต์ฌ (์
์
์ ํ์).
|
|
48
|
+
5. **์ด๋ ๋งํฌ ๋ง๋ค๊ธฐ** โ OAuth2 โ **URL Generator**:
|
|
49
|
+
- **Scopes**: `bot`, `applications.commands`
|
|
50
|
+
- **Bot Permissions**: `Manage Channels`, `Send Messages`, `Embed Links`, `Attach Files`, `Read Message History`, `Create Public Threads`, `Send Messages in Threads`, `Manage Threads`, `Add Reactions`
|
|
51
|
+
- ์์ฑ๋ URL์ ๋ธ๋ผ์ฐ์ ์ ๋ถ์ฌ๋ฃ์ด **๋ด ์๋ฒ์ ์ด๋**.
|
|
52
|
+
- (์
์
๋ง๋ฒ์ฌ๊ฐ ์ด ์ด๋ ๋งํฌ๋ฅผ ์๋ ์์ฑํด ์ฃผ๊ธฐ๋ ํฉ๋๋ค โ 2๋จ๊ณ ์ฐธ๊ณ .)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 2๋จ๊ณ โ ์ค์น & ์คํ
|
|
57
|
+
|
|
58
|
+
### npx๋ก ์คํ (๊ถ์ฅ)
|
|
59
|
+
|
|
60
|
+
์ค์น ์์ด ๋ฐ๋ก ์คํํฉ๋๋ค. `npx` ๊ฐ ์ต์ ๋ฒ์ ์ ๋ฐ์ ์คํํ๋ฉฐ, ์ต์ด ์คํ์ด๋ฉด ์
์
๋ง๋ฒ์ฌ๊ฐ ๋จผ์ ๋ฌ ๋ค ์ด์ด์ ๋ด์ด ์์๋ฉ๋๋ค.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# ์ต์ด ์คํ โ ์
์
๋ง๋ฒ์ฌ๊ฐ ์๋์ผ๋ก ๋ฌ ๋ค ์ด์ด์ ๋ด์ด ์์๋ฉ๋๋ค.
|
|
64
|
+
# (ํ ํฐ/Client ID ์
๋ ฅ, ์ธํ
ํธ ํ์ธ, ์ด๋ ๋งํฌ ์์ฑ โ ๊ธฐ๋ณธ๊ฐ์ ์ ๋ฌผ์ด๋ด)
|
|
65
|
+
npx discord-agent-bridge
|
|
66
|
+
|
|
67
|
+
# ์ดํ ์คํ โ ์ด๋ฏธ ์ค์ ๋ผ ์์ผ๋ฉด ๋ฐ๋ก ๋ด์ด ์์๋ฉ๋๋ค.
|
|
68
|
+
npx discord-agent-bridge
|
|
69
|
+
|
|
70
|
+
# ๋ค์ ์ค์ ๋ง ํ๊ณ ์ถ์ ๋ (๋ด์ ์์ํ์ง ์์)
|
|
71
|
+
npx discord-agent-bridge --setup
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
์ ์ญ ์ค์น๋ ๊ฐ๋ฅํฉ๋๋ค: `npm install -g discord-agent-bridge` ํ `discord-agent-bridge` / `discord-agent-bridge --setup`.
|
|
75
|
+
|
|
76
|
+
### ์
๊ทธ๋ ์ด๋
|
|
77
|
+
|
|
78
|
+
์ ๋ฒ์ ์ด ๋์ค๋ฉด:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# npx ์ฌ์ฉ์ โ @latest ๋ฅผ ๋ถ์ด๋ฉด ํญ์ ์ต์ ์ ๋ฐ์ต๋๋ค(npx๋ ์บ์๋ฅผ ์ธ ์ ์์ด์).
|
|
82
|
+
npx discord-agent-bridge@latest
|
|
83
|
+
|
|
84
|
+
# ์ ์ญ ์ค์น ์ฌ์ฉ์
|
|
85
|
+
npm install -g discord-agent-bridge@latest
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
์ค์น๋ ๋ฒ์ ํ์ธ: `discord-agent-bridge --version`.
|
|
89
|
+
|
|
90
|
+
### PC ์ฌ์์ ํ์๋ ์๋์ผ๋ก ์คํ (PM2)
|
|
91
|
+
|
|
92
|
+
๋ก๊ทธ์์/์ฌ๋ถํ
ํ์๋ ๋ด์ ๊ณ์ ์ด๋ ค๋๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ [PM2](https://pm2.keymetrics.io/) ์
๋๋ค. macOSยทLinuxยทWindows์์ ๋์ผํ๊ฒ ๋์ํ๊ณ , ๋ก๊ทธยท์ฌ์์ยท์ํ ํ์ธ์ ํ ๋ฒ์ ํด๊ฒฐํด ์ค๋๋ค.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# 1) ์ ์ญ ์ค์น (PM2๊ฐ ์์ ์ ์ผ๋ก ์คํํ ์ปค๋งจ๋๊ฐ ์์ด์ผ ํจ)
|
|
96
|
+
npm install -g discord-agent-bridge
|
|
97
|
+
|
|
98
|
+
# 2) ์์ง ์
์
์ ํ๋ค๋ฉด ํ ๋ฒ ์คํ
|
|
99
|
+
discord-agent-bridge --setup
|
|
100
|
+
|
|
101
|
+
# 3) PM2 ์ค์น
|
|
102
|
+
npm install -g pm2
|
|
103
|
+
|
|
104
|
+
# 4) PM2์ ๋ด์ ๋ฑ๋กยท์คํ
|
|
105
|
+
pm2 start discord-agent-bridge --name discord-agent-bridge
|
|
106
|
+
|
|
107
|
+
# 5) ํ์ฌ ํ๋ก์ธ์ค ๋ชฉ๋ก์ ์ค๋
์ท ์ ์ฅ (์ฌ๋ถํ
์ ๋ณต๊ตฌ ๋์)
|
|
108
|
+
pm2 save
|
|
109
|
+
|
|
110
|
+
# 6) ๋ถํ
์ PM2 ์๋ ์์ ๋ฑ๋ก (macOS๋ launchd๋ก ๋ฑ๋ก๋จ)
|
|
111
|
+
pm2 startup
|
|
112
|
+
# โ ์ถ๋ ฅ๋๋ `sudo ...` ๋ช
๋ น์ ๊ทธ๋๋ก ๋ณต์ฌํด ํ ๋ฒ ์คํํ์ธ์.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
์ผ์์ ์ธ ๊ด๋ฆฌ ๋ช
๋ น:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
pm2 status # ์คํ ์ํ
|
|
119
|
+
pm2 logs discord-agent-bridge # ์ค์๊ฐ ๋ก๊ทธ
|
|
120
|
+
pm2 restart discord-agent-bridge # ์ฌ์์ (์
๊ทธ๋ ์ด๋ ํ์๋ ์ฌ์ฉ)
|
|
121
|
+
pm2 stop discord-agent-bridge # ์ค์ง
|
|
122
|
+
pm2 delete discord-agent-bridge # ๋ฑ๋ก ํด์
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
PM2 ์ํ์์ ์
๊ทธ๋ ์ด๋:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
npm install -g discord-agent-bridge@latest
|
|
129
|
+
pm2 restart discord-agent-bridge
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
> โ ๏ธ nvm/asdf๋ฅผ ์ด๋ค๋ฉด, PM2๊ฐ ๋ถํ
์์ ์๋ ์
ธ์์ ์ฐ๋ ๊ฒ๊ณผ **๊ฐ์ `node`** ๋ฅผ ์ฐพ์ ์ ์์ด์ผ ํฉ๋๋ค. `which node`๋ก ํ์ธํ ๊ฒฝ๋ก๊ฐ ๋ถํ
ํ๊ฒฝ์์๋ ์ ํจํด์ผ ํฉ๋๋ค โ ์๋๋ฉด ์ฌ๋ถํ
ํ PM2๊ฐ ๋ด์ ๋ชป ๋์๋๋ค.
|
|
133
|
+
|
|
134
|
+
**์
์
๋ง๋ฒ์ฌ(`--setup`)** ๊ฐ ๋ฌผ์ด๋ณด๋ ๊ฒ โ **ํ ํฐ(๋น๋ฐ)๋ง ํฐ๋ฏธ๋์์ ์
๋ ฅ**ํฉ๋๋ค. ๊ทธ ์ธ ๊ฐ์ ํ๋๋ ์ ๋ฌผ์ด๋ด
๋๋ค:
|
|
135
|
+
1. Discord ๋ด **ํ ํฐ** (๋น๋ฐ โ ํฐ๋ฏธ๋์์๋ง ๋ถ์ฌ๋ฃ๊ธฐ)
|
|
136
|
+
2. **Client ID**
|
|
137
|
+
3. Message Content Intent ์ผฐ๋์ง ํ์ธ
|
|
138
|
+
4. ์ด๋ URL ์์ฑ โ ์๋ฒ์ ์ด๋
|
|
139
|
+
|
|
140
|
+
> **์ญํ ๋, ๊ธฐ๋ณธ๊ฐ๋ ํฐ๋ฏธ๋์์ ์ ์ ํฉ๋๋ค.** ๋ด์ ์๋ฒ์ ์ด๋ํ ๋ค Discord์์ **`/config`** ๋ช
๋ น์ผ๋ก ์ค์ ํ์ธ์:
|
|
141
|
+
> - **์ญํ ํฐ์ด** โ ์ญํ ์ด๋ฆ์ **ํด๋ฆญ**ํด ์ง์ (์ญํ ID ๋ณต์ฌยท๊ฐ๋ฐ์ ๋ชจ๋ ๋ถํ์). ์ง์ ์ ์๋ **๋ชจ๋ ๊ฑฐ๋ถ(deny-by-default)**.
|
|
142
|
+
> - **๊ธฐ๋ณธ๊ฐ** โ **๊ธฐ๋ณธ ๋ฐฑ์๋ยท๋ชจ๋ธยท๊ถํ ๋ชจ๋ยท์ธ์ด(locale)** ๋ ๋๋กญ๋ค์ด์์ ๊ณ ๋ฅด๋ฉด **๋ฐ๋ก ์ ์ฅ**๋๊ณ , **Codex ๊ธฐ๋ณธ ๊ฒฝ๋ก(codexHome)** ๋ "Codex ๊ฒฝ๋ก ์ค์ " ๋ฒํผ โ ์
๋ ฅ์ฐฝ(๋ชจ๋ฌ)์์ ์ง์ ํฉ๋๋ค. ์ธ์ด๋ `ํ๊ตญ์ด (ko)` / `English (en)` ์ค์์ ์ ํํฉ๋๋ค.
|
|
143
|
+
|
|
144
|
+
์ค์ ์ `~/.discord-agent-bridge/` ์ ์ ์ฅ๋ฉ๋๋ค(ํ ํฐ ํ์ผ ๊ถํ 600). ์ญํ ยท๊ธฐ๋ณธ๊ฐ์ ์๋ฒ๋ณ๋ก `servers/<guildId>.json` ์ ์ ์ฅ๋ฉ๋๋ค.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 3๋จ๊ณ โ Discord์์ ์ฌ์ฉํ๊ธฐ
|
|
149
|
+
|
|
150
|
+
๋ด์ด ์๋ฒ์ ๋ค์ด์ค๋ฉด **์ปจํธ๋กค ์ฑ๋(`#session-generator`) ยท ์ธ์
์นดํ
๊ณ ๋ฆฌ ยท ์๋ฆผ ์ฑ๋(`#agent-status`)์ด ์๋์ผ๋ก ์์ฑ**๋ฉ๋๋ค(๋ด์ ์ฑ๋ ๊ด๋ฆฌ ๊ถํ์ด ์์ผ๋ฉด). ์ดํ ์์: **`/config` โ `/agent start`**.
|
|
151
|
+
|
|
152
|
+
1. **(์๋)** ๋ด ์์ยท์๋ฒ ์ด๋ ์ ์ ์ฑ๋ ๊ตฌ์กฐ๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ด๋ฆฌ์๊ฐ **`/init`** ์ผ๋ก ์๋ ์ฌ์์ฑํ ์๋ ์์ต๋๋ค(๊ธฐ์กด ์ฑ๋์ ์ฌ์ฌ์ฉ โ ์ค๋ณต ์์ฑ ์์).
|
|
153
|
+
2. **`/config`** (๊ด๋ฆฌ์) โ ์ญํ ํฐ์ดยท๊ธฐ๋ณธ๊ฐ์ ์ง์ ํฉ๋๋ค. (์๋ฒ ๊ด๋ฆฌ์(Administrator)๋ ์ญํ ์ค์ ์์ด๋ ํญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
|
|
154
|
+
3. `#session-generator` ์์ **`/agent start`** โ **๋ง๋ฒ์ฌ**๊ฐ ์์๋๋ก ์๋ดํฉ๋๋ค:
|
|
155
|
+
**์์
ํด๋ ์ ํ โ ๋ฐฑ์๋(Claude / Codex) โ ๋ชจ๋ธ โ ์ถ๋ก ์์ค โ ๊ถํ ๋ชจ๋**. ๊ฐ ๋จ๊ณ๋ **"๋ค์" ๋ฒํผ**์ผ๋ก ๋์ด๊ฐ๋๋ค. ํด๋ ๋ธ๋ผ์ฐ์ ๋ **์์/๋ค๋ฅธ ๋ณผ๋ฅจ๊น์ง ์ด๋ ยท ์ ํด๋ ์์ฑ ยท ์ด์ ์ธ์
์ฌ๊ฐ**๋ฅผ ์ง์ํฉ๋๋ค. ํ์ธํ๋ฉด ํ๋ก์ ํธ ํด๋ ์ด๋ฆ์ผ๋ก **์ ์ฉ ์ธ์
์ฑ๋(`proj-<ํด๋>`)์ด ์๋ก ์์ฑ**๋๊ณ ๊ทธ ์ฑ๋์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
|
|
156
|
+
4. ๋ง๋ค์ด์ง ์ธ์
์ฑ๋์์ **๊ทธ๋ฅ ๋ฉ์์ง๋ก ๋ํ**ํ๋ฉด ๋ฉ๋๋ค. Claude ๋ชจ๋๋ ์คํธ๋ฆฌ๋ฐ ์ถ๋ ฅยทํด ์คํ ์ค๋ ๋ยท๊ถํ ์น์ธ ๋ฒํผ์ด ๋น๋๋ค.
|
|
157
|
+
5. ํ์ํ ๋ ๋ช
๋ น์ด ์ฌ์ฉ.
|
|
158
|
+
|
|
159
|
+
### ์ฃผ์ ๋ช
๋ น์ด
|
|
160
|
+
| ๋ช
๋ น์ด | ์ค๋ช
|
|
|
161
|
+
|---|---|
|
|
162
|
+
| `/init` | (๊ด๋ฆฌ์) ์ปจํธ๋กค ์ฑ๋ + ์ธ์
์นดํ
๊ณ ๋ฆฌ ์์ฑ (์ฌ์คํ ์ ์ฌ์ฌ์ฉ) |
|
|
163
|
+
| `/agent start` | ์ ์ธ์
์์ โ ๋ง๋ฒ์ฌ ํ์ธ ์ ์ ์ฉ ์ธ์
์ฑ๋์ ์๋ก ์์ฑ |
|
|
164
|
+
| `/agent resume` | ์ด์ ์ธ์
์ด์ดํ๊ธฐ |
|
|
165
|
+
| `/agent close` | ์ธ์
์ข
๋ฃ + ์ธ์
์ฑ๋ ์ญ์ |
|
|
166
|
+
| `/agent stats` | ํ์ฑ ์ธ์
ยท ์ธ์
ํต๊ณ ยท Claude ์ฌ์ฉ๋ ๋ณด๊ธฐ (๋ณธ์ธ์๊ฒ๋ง ํ์) |
|
|
167
|
+
| `/mode <claude\|codex>` | ๋ฐฑ์๋ ์ ํ (โ ๏ธ ์ ๋ํ๋ก ์์ โ ์ด์ ๋งฅ๋ฝ ๋ฏธ์น๊ณ) |
|
|
168
|
+
| `/mode perm <๋ชจ๋\|ํ๋กํ>` | ๊ถํ ๋ชจ๋/ํ๋กํ ์ ํ (์ธ์
์ ์ง) |
|
|
169
|
+
| `/stop` | ํ์ฌ ์ธ์
์ฆ์ ์ค๋จ (ํฌ ์ค์์น) |
|
|
170
|
+
| `/stop-all` | (๊ด๋ฆฌ์) ๋ชจ๋ ์ธ์
์ค๋จ |
|
|
171
|
+
| `/config` | (๊ด๋ฆฌ์) ์ญํ ํฐ์ด + ๊ธฐ๋ณธ๊ฐ(๋ฐฑ์๋ยท๋ชจ๋ธยท๊ถํ ๋ชจ๋ยท์ธ์ดยทCodex ๊ฒฝ๋ก) ์ค์ โ ์ญํ ์ **ํด๋ฆญ**, ๊ธฐ๋ณธ๊ฐ์ ๋๋กญ๋ค์ด/๋ชจ๋ฌ์์ ์ง์ |
|
|
172
|
+
|
|
173
|
+
### ๊ถํ ๋ชจ๋ (์ธ์
์ด ์ผ๋ง๋ ์์จ์ ์ธ์ง)
|
|
174
|
+
- `default` โ ๋๊ตฌ ์คํ ์ ๋ง๋ค **Allow/Deny ๋ฒํผ**์ผ๋ก ํ์ธ (๊ฐ์ฅ ์์ )
|
|
175
|
+
- `acceptEdits` โ ํ์ผ ์์ ์ ์๋ ์๋ฝ
|
|
176
|
+
- `plan` โ ๋จผ์ ๊ณํ๋ง ์ธ์ฐ๊ณ ์คํ์ ๋ณด๋ฅ
|
|
177
|
+
- `bypassPermissions` โ ์ ๋ถ ์๋ (์ ๋ขฐํ๋ ํ๋ก์ ํธ์์๋ง)
|
|
178
|
+
|
|
179
|
+
(Codex๋ CLI์ ์น์ธยท์๋๋ฐ์ค ๋ชจ๋๋ก ๋งคํ๋ฉ๋๋ค.)
|
|
180
|
+
|
|
181
|
+
### ์ด๋ฒคํธ ์๋ฆผ (`#agent-status`)
|
|
182
|
+
|
|
183
|
+
์ฌ๋ฌ ์ธ์
์ **์์
์๋ฃยท์๋ฌ**๋ฅผ `#agent-status` ์ฑ๋ ํ ๊ณณ์ ๋ชจ์ ์์ฝํด ์๋ ค์ค๋๋ค. `/config` โ **๐ ์๋ฆผ ์ค์ ** ์์ ์ผ๊ธฐ/๋๊ธฐ์ ๋์ ์ฑ๋์ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## ๊ถํ & ์ญํ ์ค์ (์ค์)
|
|
188
|
+
|
|
189
|
+
์ด ๋ด์ **๋น์ PC์์, ๋น์ ๊ณ์ ๊ถํ์ผ๋ก** ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ์ฆ ๋ด์๊ฒ ๋ช
๋ นํ ์ ์๋ ์ฌ๋์ **๋น์ ์ปดํจํฐ์์ ๋ช
๋ น์ ์คํํ ์ ์๋ ์ฌ๋**์
๋๋ค. ๊ทธ๋์ ์ญํ ํต์ ๊ฐ ํ์์
๋๋ค.
|
|
190
|
+
|
|
191
|
+
- **์ญํ ํฐ์ด 3๋จ๊ณ** โ Discord์์ **`/config`** ๋ก ์ญํ ์ด๋ฆ์ **ํด๋ฆญ**ํด ์ง์ ํฉ๋๋ค(์ญํ IDยท๊ฐ๋ฐ์ ๋ชจ๋ ๋ถํ์). admin โ execute โ read-only:
|
|
192
|
+
- **admin** โ ์ค์ /`stop-all`/`config` ๋ฑ ๊ด๋ฆฌ
|
|
193
|
+
- **execute** โ ์ธ์
์์ยท๋ช
๋ น ์คํ
|
|
194
|
+
- **read-only** โ ์ฝ๊ธฐ๋ง
|
|
195
|
+
- > `/config` ๋ ์ฒ์์ **์๋ฒ ๊ด๋ฆฌ์(Administrator)** ๊ถํ์ด ์๋ ์ฌ๋๋ง ์ด ์ ์๊ณ (ํ์ฉ ๋ชฉ๋ก์ด ๋น์ด ์์ด๋ ๋ถํธ์คํธ๋ฉ ๊ฐ๋ฅ), ์ดํ์ admin ํฐ์ด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
196
|
+
- **๊ธฐ๋ณธ์ ๊ฑฐ๋ถ(deny-by-default)** โ ํ์ฉ ๋ชฉ๋ก์ ์๋ ์ฌ๋์ ์๋ฌด๊ฒ๋ ๋ชป ํฉ๋๋ค. `/config` ๋ก ์ง์ ํ๊ธฐ ์ ์๋ ์๋ฌด๋ ์คํํ ์ ์์ต๋๋ค.
|
|
197
|
+
- **ํ๋ก์ ํธ๋ณ ์ ๊ทผ ์ ์ด(ACL)** โ ํน์ ํ๋ก์ ํธ๋ฅผ ์ง์ ํ ์ญํ /์ฌ๋๋ง ์ฐ๊ฒ ํ ์ ์์ต๋๋ค.
|
|
198
|
+
- **๊ฐ์ฌ ๋ก๊ทธ** โ ๋๊ฐ ์ธ์ ๋ฌด์์ ํ๋์ง `~/.discord-agent-bridge/audit/` ์ ๊ธฐ๋ก๋ฉ๋๋ค.
|
|
199
|
+
|
|
200
|
+
> โ ๏ธ **๋ณด์ ์ฃผ์:** ์ ๋ขฐํ์ง ์๋ ์๋ฒ์ ๋ด์ ์ด๋ํ๊ฑฐ๋ execute ์ญํ ์ ๋๋ฌด ๋๊ฒ ์ฃผ์ง ๋ง์ธ์. ์์
ํด๋ ๋ฐ(์: `~/.ssh`)์ ๋ด์ด ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๊ธฐ๋ณธ ์ฐจ๋จ๋์ด ์์ต๋๋ค.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Claude ๋ชจ๋ vs Codex ๋ชจ๋
|
|
205
|
+
|
|
206
|
+
| | Claude ๋ชจ๋ | Codex ๋ชจ๋ |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ | โ
| โ (์ต์ข
๊ฒฐ๊ณผ ์์ฃผ) |
|
|
209
|
+
| ํด ์คํ ์ค๋ ๋ | โ
| โ |
|
|
210
|
+
| ๊ถํ ์น์ธ ๋ฒํผ | โ
| โ (์น์ธ/์๋๋ฐ์ค ๋ชจ๋๋ก ๋์ฒด) |
|
|
211
|
+
| ์ธ์
์ด์ดํ๊ธฐ | โ
| โ
|
|
|
212
|
+
| **์ฌ์ฉ๋/ํ๋ ํ์** | โ
(5์๊ฐยท์ฃผ๊ฐยท์ปจํ
์คํธ) | โ (Codex CLI ์ ์ฝ) |
|
|
213
|
+
|
|
214
|
+
### ํฐ๋ฏธ๋์์ ์ฐ๋ ๊ฑฐ๋ ๋๊ฐ๋์?
|
|
215
|
+
|
|
216
|
+
- **Claude ๋ชจ๋** โ ํฐ๋ฏธ๋์ `claude`์ **๊ฐ์ ์์ง**(๊ณต์ Claude Agent SDK)์ ์ฌ์ฉํฉ๋๋ค. ํ๋ก์ ํธ์ `.claude/` ์ค์ ์ ๊ทธ๋๋ก ์ฝ์ด **์๋ธ์์ด์ ํธยท์คํฌยทํ
ยทMCP๊ฐ ๋์ผํ๊ฒ** ๋์ํ๋๋ก ๋ง๋ญ๋๋ค. ๋ฌ๋ผ์ง๋ ๊ฑด ์
๋ ฅ์ด Discord ๋ฉ์์ง, ์ถ๋ ฅ์ด ์๋ฒ ๋/์ค๋ ๋๋ผ๋ **ํํ ๋ฐฉ์**๋ฟ์
๋๋ค. (ํฐ๋ฏธ๋์์ ํ์ดํํ๋ TUI ์ ์ฉ ์ฌ๋์ ๋ช
๋ น์ ๊ทธ๋๋ก ์น๋ ๋ฐฉ์์ด ์๋๋ผ SDK ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.)
|
|
217
|
+
- **Codex ๋ชจ๋** โ `codex exec`(๋น๋ํํ)๋ก ๊ตฌ๋ํฉ๋๋ค. ๊ฐ์ Codex ์์ง์ ์ค์ /MCP๋ฅผ ๋ก๋ํ๋ฉฐ, **ํ
(SessionStart/UserPromptSubmit/Stop ๋ฑ)๋ ๋น๋ํํ ๋ชจ๋์์ ์ ์ ๋ฐ๋ํจ์ ์ค์ธก ํ์ธ**ํ์ต๋๋ค. ๋ค๋ง ์น์ธ ๋ฐฉ์์ ์ธํฐ๋ํฐ๋ธ ๋ชจ๋์ ๋ค๋ฅด๊ฒ ๋งคํ๋ฉ๋๋ค(์๋ ๊ถํ ๋ชจ๋ ์ฐธ๊ณ ).
|
|
218
|
+
|
|
219
|
+
### ์ปค์คํ
์ฌ๋์ ๋ช
๋ น / ์คํฌ / ํ๋ฌ๊ทธ์ธ ๋ช
๋ น
|
|
220
|
+
|
|
221
|
+
์ธ์
์ฑ๋์ ๋ณด๋ด๋ ๋ฉ์์ง๋ ๊ฐ๊ณต ์์ด ๊ทธ๋๋ก Claude/Codex์ ์ ๋ฌ๋๋ฏ๋ก, **`.claude/commands/`ยท`.claude/skills/`(Claude) ๋๋ `.codex/skills/`(Codex)์ ์ ์๋ ๋ช
๋ นยท์คํฌ, ๊ทธ๋ฆฌ๊ณ ํ๋ฌ๊ทธ์ธ์ด ์ค์นํ ๋ช
๋ น**๋ ํฐ๋ฏธ๋๊ณผ ๋๊ฐ์ด `/์ด๋ฆ` ์ ๊ทธ๋๋ก ํ์ดํํ๋ฉด ๋์ํฉ๋๋ค(Claude/Codex ์ค์ CLI๋ก ์ค์ธก ๊ฒ์ฆ๋จ). Discord ์์ฒด ์ฌ๋์ ๋ช
๋ น(`/agent`, `/config` ๋ฑ)๊ณผ๋ ์ถฉ๋ํ์ง ์์ต๋๋ค โ ์ธ์
์ฑ๋์ ์ผ๋ฐ ํ
์คํธ ๋ฉ์์ง์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## ์ค์ ํ์ผ ์์น
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
~/.discord-agent-bridge/
|
|
229
|
+
โโ config.json # ๋ด ํ ํฐยทClient IDยท๊ธฐ๋ณธ๊ฐยทํ๋ (๊ถํ 600)
|
|
230
|
+
โโ servers/<guildId>.json # ์๋ฒ๋ณ ์ญํ ํฐ์ดยท๊ธฐ๋ณธ๊ฐ ยท ์ฑ๋ ๊ตฌ์กฐ(control/sessions/status) ID ยท ์๋ฆผ ์ค์ (๊ถํ 600)
|
|
231
|
+
โโ state.json # ์ฑ๋โ์ธ์
๋ฐ์ธ๋ฉ (์ฌ์์ ํ ์๋ ๋ณต๊ตฌ)
|
|
232
|
+
โโ audit/audit.jsonl # ๊ฐ์ฌ ๋ก๊ทธ
|
|
233
|
+
```
|
|
234
|
+
์ค์ ์ **์ ์ญ โ ์๋ฒ โ ํ๋ก์ ํธ** ์์ผ๋ก ๋ฎ์ด์จ์ง๋๋ค.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## ๋ฌธ์ ํด๊ฒฐ
|
|
239
|
+
|
|
240
|
+
- **๋ด์ด ๋ฉ์์ง์ ๋ฐ์ํ์ง ์์์** โ Developer Portal์์ **Message Content Intent**๊ฐ ์ผ์ ธ ์๋์ง ํ์ธ.
|
|
241
|
+
- **์ฌ๋์ ๋ช
๋ น์ด ์ ๋ณด์ฌ์** โ ์ด๋ ์ `applications.commands` ์ค์ฝํ๋ฅผ ํฌํจํ๋์ง ํ์ธ(๋ฑ๋ก์ ๋ช ๋ถ ๊ฑธ๋ฆด ์ ์์).
|
|
242
|
+
- **๊ถํ ์ค๋ฅ๋ก ์ฑ๋ ์์ฑ ์คํจ** โ ๋ด์๊ฒ `Manage Channels` ๊ถํ์ด ์๋์ง ํ์ธ.
|
|
243
|
+
- **์ฌ์ฉ๋ ํจ๋์ด ์ ๋ ์** โ Claude Pro/Max **๊ตฌ๋
๋ก๊ทธ์ธ**(`~/.claude`) ์ํ์ฌ์ผ ํฉ๋๋ค. API ํค๋ง ์ฐ๋ฉด ์ด ํจ๋์ ์จ๊ฒจ์ง๋๋ค(์ ์).
|
|
244
|
+
- **"๊ถํ์ด ์์ต๋๋ค: No authorized role for this actor (fail-secure)."** โ ์ ์ํ ๊ณ์ ์ ํ์ฉ ๋ชฉ๋ก(admin/execute/read-only)์ ๋ฑ๋ก๋ ์ญํ ์ด ํ๋๋ ์๋ค๋ ๋ป์
๋๋ค. ๊ธฐ๋ณธ์ด ๊ฑฐ๋ถ(deny-by-default)๋ผ ์ด๋ ๊ฒ ๋์ต๋๋ค. ์๋ ์ค ํ๋๋ก ํด๊ฒฐํ์ธ์:
|
|
245
|
+
1. **๊ฐ์ฅ ๊ฐ๋จ** โ ๊ทธ ๊ณ์ ์ Discord **์๋ฒ ๊ด๋ฆฌ์(Administrator)** ๊ถํ์ ๋ถ์ฌ. ์๋ฒ ๊ด๋ฆฌ์๋ ํ์ฉ ๋ชฉ๋ก๊ณผ ๋ฌด๊ดํ๊ฒ admin ํฐ์ด๋ก ๋ฌด์กฐ๊ฑด ํต๊ณผ๋ฉ๋๋ค.
|
|
246
|
+
2. **์ด๋ฏธ ์ง์ ๋ ์ญํ ๋ถ์ฌ** โ Discord ์๋ฒ์ ๊ตฌ์ฑ์ ํ๋ฉด์์, `/config`์ ํฐ์ด๋ก ์ด๋ฏธ ๋ฑ๋ก๋์ด ์๋ ์ญํ ์ ๊ทธ ๊ณ์ ์ ๋ถ์ฌ์ค๋๋ค.
|
|
247
|
+
3. **์ญํ ์ ํฐ์ด์ ์ถ๊ฐ** โ ๊ด๋ฆฌ์ ๊ณ์ ์์ `/config` โ **์ญํ ํฐ์ด** ๋ก ๋ค์ด๊ฐ, ๊ทธ ๊ณ์ ์ด ๊ฐ์ง ์ญํ ์ ์ํ๋ ํฐ์ด(admin/execute/read-only)์ ํด๋ฆญํด ์ถ๊ฐํฉ๋๋ค.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## ๊ฐ๋ฐ
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
npm install
|
|
255
|
+
npm run dev # tsx watch (๊ฐ๋ฐ ๋ชจ๋)
|
|
256
|
+
npm run typecheck # ํ์
๊ฒ์ฌ
|
|
257
|
+
npm run test # ํ
์คํธ (vitest)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## ๋ผ์ด์ ์ค
|
|
261
|
+
|
|
262
|
+
MIT
|