opencode-resolve 0.1.13 → 0.1.17
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 +216 -850
- package/README.md +215 -849
- package/dist/agents.js +14 -14
- package/dist/config.d.ts +1 -0
- package/dist/config.js +10 -0
- package/dist/hooks/index.js +131 -40
- package/dist/index.js +11 -0
- package/dist/messages.d.ts +34 -0
- package/dist/messages.js +867 -0
- package/dist/state.d.ts +3 -0
- package/dist/state.js +2 -1
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +20 -1
- package/dist/types.d.ts +2 -0
- package/dist/utils.js +20 -3
- package/opencode-resolve.example.json +1 -0
- package/opencode-resolve.reference.jsonc +20 -3
- package/package.json +5 -2
- package/scripts/cli.mjs +75 -0
- package/scripts/install-local.mjs +33 -7
- package/scripts/postinstall.mjs +215 -22
package/README.ko.md
CHANGED
|
@@ -1,345 +1,106 @@
|
|
|
1
|
-
# opencode-resolve — OpenCode용 가벼운 해결사
|
|
1
|
+
# opencode-resolve — OpenCode용 가벼운 해결사 플러그인
|
|
2
2
|
|
|
3
|
-
**[English](./README.md) | [한국어](./README.ko.md)**
|
|
3
|
+
**[English](./README.md) | [한국어](./README.ko.md) | [문서 사이트](https://jshsakura.github.io/opencode-resolve/)**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/opencode-resolve)
|
|
6
6
|
[](https://github.com/jshsakura/opencode-resolve/actions/workflows/publish.yml)
|
|
7
|
+
[](https://jshsakura.github.io/opencode-resolve/)
|
|
7
8
|
[](./LICENSE)
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
>
|
|
11
|
-
> 독립 실행형 애플리케이션이 아니며, 모델 프로바이더도, 매일 실행하는 별도 CLI도, `opencode.json` 설정을 대체하는 것도 아닙니다. OpenCode 플러그인이며 그 이상도 이하도 아닙니다.
|
|
10
|
+
`opencode-resolve`는 [OpenCode](https://opencode.ai)에 작은 고정 역할 해결 루프를 추가하는 플러그인입니다.
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
- `resolver`는 계획, 디스패치, 검증, 반복을 담당합니다.
|
|
13
|
+
- `coder`는 작은 구현 패치와 대상 검증을 담당합니다.
|
|
14
|
+
- `explorer`, `reviewer`, `deep-reviewer`, `planner`는 필요할 때 resolver가 부르는 내부 서브에이전트입니다.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
# AI 코딩 어시스턴트에 붙여넣기만 하면 전체 설정이 자동으로 완료됩니다
|
|
17
|
-
Install and configure opencode-resolve by following the instructions here:
|
|
18
|
-
https://github.com/jshsakura/opencode-resolve#drop-in-setup-give-to-an-llm
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 이것은 무엇이고, 무엇이 아닌가
|
|
24
|
-
|
|
25
|
-
| ✅ 이것은 | ❌ 이것은 아닙니다 |
|
|
26
|
-
|---|---|
|
|
27
|
-
| `opencode plugin opencode-resolve`로 설치하는 **OpenCode용 가벼운 해결사(resolver) 플러그인** | 독립 실행형 앱 또는 별도 CLI |
|
|
28
|
-
| OpenCode에 주입되는 고정 역할(fixed-role) 검증 루프(resolver + coder) | 모델 프로바이더 또는 API 키 관리자 |
|
|
29
|
-
| Context7 MCP 자동 등록 훅 | `opencode.json` 설정을 대체하는 것 |
|
|
30
|
-
| OpenCode 설정과 함께 위치하는 설정 파일(`resolve.json`) | 코딩할 때마다 직접 실행해야 하는 것 |
|
|
31
|
-
| 한 번 설치 후 OpenCode 내부에서 자동으로 실행 | OpenCode 자체를 대체하는 것 |
|
|
16
|
+
독립 실행형 앱, 모델 프로바이더, API 키 관리자, `opencode.json` 대체물이 아닙니다.
|
|
32
17
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
```sh
|
|
19
|
+
npm install -g opencode-resolve
|
|
20
|
+
opencode plugin opencode-resolve --global --force
|
|
21
|
+
```
|
|
36
22
|
|
|
37
23
|
## 목차
|
|
38
24
|
|
|
39
|
-
- [
|
|
40
|
-
- [
|
|
41
|
-
- [
|
|
42
|
-
- [빠른 시작](#빠른-시작)
|
|
43
|
-
- [드롭인 설정 (LLM에 전달)](#드롭인-설정-llm에-전달)
|
|
44
|
-
- [기본 동작](#기본-동작)
|
|
45
|
-
- [프로젝트 컨텍스트 소스](#프로젝트-컨텍스트-소스)
|
|
25
|
+
- [무엇을 추가하나](#무엇을-추가하나)
|
|
26
|
+
- [설치](#설치)
|
|
27
|
+
- [추천 스킬](#추천-스킬)
|
|
46
28
|
- [설정](#설정)
|
|
47
|
-
- [설정 참조](#설정-참조)
|
|
48
|
-
- [자동 승인](#자동-승인)
|
|
49
|
-
- [병렬 서브에이전트 제한](#병렬-서브에이전트-제한)
|
|
50
|
-
- [업그레이드 및 마이그레이션](#업그레이드-및-마이그레이션)
|
|
51
29
|
- [모델 설정](#모델-설정)
|
|
52
|
-
- [에이전트
|
|
53
|
-
- [
|
|
54
|
-
- [Context7
|
|
55
|
-
- [
|
|
56
|
-
- [
|
|
57
|
-
- [
|
|
30
|
+
- [에이전트](#에이전트)
|
|
31
|
+
- [권한](#권한)
|
|
32
|
+
- [Context7](#context7)
|
|
33
|
+
- [프로젝트 컨텍스트](#프로젝트-컨텍스트)
|
|
34
|
+
- [업그레이드](#업그레이드)
|
|
35
|
+
- [개발](#개발)
|
|
58
36
|
- [릴리스](#릴리스)
|
|
59
|
-
- [설계 규칙](#설계-규칙)
|
|
60
|
-
- [라이선스](#라이선스)
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## 기능
|
|
65
|
-
|
|
66
|
-
- **고정 역할(fixed-role) 검증 해결 루프** — `resolver`(컨텍스트 효율적 플래너/판정자) + `coder`(집중된 구현자)
|
|
67
|
-
- **기본적으로 컨텍스트 효율적** — 최소 파일 읽기, 가장 작은 패치, 대상 검증, 체크포인트 실행, 반복 수정 실패 시 명시적 차단 사항 보고
|
|
68
|
-
- **커밋된 팀 컨텍스트 감지** — `HARNESS.md`, `AGENTS.md`, `.opencode/context`, `.claude/context`, `context/`, Agentic 스타일 `thoughts/`를 감지하고 패턴 문서 목록을 노출해 전체 repo를 프롬프트에 밀어 넣지 않고도 필요한 컨텍스트만 로드
|
|
69
|
-
- **OpenCode 네이티브 내부 전문가 서브에이전트** — `reviewer`(검증 갭 감사), `explorer`(코드베이스 스카우트), `deep-reviewer`(위험/보안 리뷰) — 서브에이전트로 기본 주입되지만 핵심 경로가 아님; resolver가 필요할 때만 디스패치
|
|
70
|
-
- **저마찰 권한** — 쓰기 에이전트의 edit/webfetch는 허용, bash는 분류기 라우팅으로 안전 명령은 허용하고 위험 명령은 거부하며 알 수 없는 명령은 계속 ask 유지
|
|
71
|
-
- **Context7 MCP** — `context7: true` 시 [Context7](https://context7.com) 문서 조회를 자동 등록
|
|
72
|
-
- **모델 핀닝** — 이점을 측정한 경우 역할별로 다른 모델 지정 가능; 기본적으로 모든 역할이 OpenCode 기본 모델을 상속
|
|
73
|
-
- **소프트 병렬 상한** — `maxParallelSubagents`가 resolver의 coder 동시 실행 수를 제어
|
|
74
|
-
- **엄격한 검증** — 알 수 없는 키, 오타, 잘못된 모드, 잘못된 타입은 로드 시 즉시 실패
|
|
75
|
-
- **추가적 마이그레이션** — 업그레이드 시 기존 설정을 덮어쓰지 않음
|
|
76
|
-
- **`@opencode-ai/plugin` 외의 종속성 없음** — 추가로 설치할 것이 없음
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## AI 기반 설정
|
|
81
|
-
|
|
82
|
-
> **한 줄. 어떤 AI 코딩 어시스턴트든. 모든 것이 자동으로 구성됩니다.**
|
|
83
|
-
|
|
84
|
-
Claude Code, Cursor, Codex, OpenCode, Windsurf, VS Code Copilot, 또는 Gemini CLI에 붙여넣으세요:
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
Install and configure opencode-resolve by following the instructions here:
|
|
88
|
-
https://github.com/jshsakura/opencode-resolve#drop-in-setup-give-to-an-llm
|
|
89
|
-
```
|
|
90
37
|
|
|
91
|
-
|
|
38
|
+
## 무엇을 추가하나
|
|
92
39
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
40
|
+
- 작은 패치와 검증 증거를 중시하는 `resolver -> coder` 루프
|
|
41
|
+
- 코드베이스 탐색과 리뷰 갭 점검을 위한 읽기 전용 서브에이전트
|
|
42
|
+
- 선택적 명령어: `/resolve`, `/resolve-code`, `/resolve-review`
|
|
43
|
+
- 선택적 Context7 MCP 자동 등록
|
|
44
|
+
- 엄격한 설정 검증: 알 수 없는 키, 잘못된 모드, 잘못된 에이전트 이름, 잘못된 타입은 즉시 실패
|
|
45
|
+
- 보수적 마이그레이션: 기존 값은 동의 없이 덮어쓰지 않음
|
|
97
46
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
> 수동 설정은 아래 [사전 요구 사항](#사전-요구-사항)과 [빠른 시작](#빠른-시작)을 참조하세요.
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## 사전 요구 사항
|
|
105
|
-
|
|
106
|
-
### 1. OpenCode
|
|
107
|
-
|
|
108
|
-
opencode-resolve는 **OpenCode 플러그인**입니다. [OpenCode](https://opencode.ai)가 설치되어 실행 중이어야 합니다.
|
|
109
|
-
|
|
110
|
-
확인:
|
|
111
|
-
|
|
112
|
-
```sh
|
|
113
|
-
opencode --version
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### 2. Node.js ≥ 20
|
|
117
|
-
|
|
118
|
-
플러그인과 OpenCode 자체는 Node.js 20 이상이 필요합니다.
|
|
119
|
-
|
|
120
|
-
확인:
|
|
121
|
-
|
|
122
|
-
```sh
|
|
123
|
-
node --version # v20.x 이상이어야 함
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### 3. 설정된 모델 프로바이더
|
|
127
|
-
|
|
128
|
-
OpenCode는 `~/.config/opencode/opencode.json`에 유효한 API 키와 함께 최소 하나의 모델 프로바이더가 설정되어야 합니다. opencode-resolve 에이전트는 핀닝하지 않는 한 기본 모델을 상속합니다.
|
|
129
|
-
|
|
130
|
-
최소 프로바이더 설정 예:
|
|
47
|
+
기본 활성 에이전트:
|
|
131
48
|
|
|
132
49
|
```json
|
|
133
|
-
|
|
134
|
-
"model": "openai/gpt-4o",
|
|
135
|
-
"provider": {
|
|
136
|
-
"openai": {
|
|
137
|
-
"name": "OpenAI"
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
50
|
+
["coder", "resolver", "explorer", "reviewer", "deep-reviewer", "planner"]
|
|
141
51
|
```
|
|
142
52
|
|
|
143
|
-
|
|
53
|
+
## 설치
|
|
144
54
|
|
|
145
|
-
|
|
55
|
+
### 요구 사항
|
|
146
56
|
|
|
147
|
-
|
|
57
|
+
- OpenCode 실행 가능: `opencode --version`
|
|
58
|
+
- Node.js 20 이상: `node --version`
|
|
59
|
+
- `~/.config/opencode/opencode.json`에 최소 하나의 OpenCode 모델 프로바이더 설정
|
|
148
60
|
|
|
149
|
-
###
|
|
61
|
+
### 설치
|
|
150
62
|
|
|
151
63
|
```sh
|
|
152
64
|
npm install -g opencode-resolve
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
`postinstall` 스크립트가 자동으로:
|
|
156
|
-
|
|
157
|
-
1. `opencode-resolve`를 `~/.config/opencode/opencode.json`의 `plugin` 배열에 추가 (이미 없는 경우).
|
|
158
|
-
2. 파일이 존재하지 않는 경우, 현재 모델 프로바이더에 맞게 적응된 `~/.config/opencode/resolve.json`을 생성:
|
|
159
|
-
- **인터랙티브 터미널** → 항상 `mix` / `gpt` / `glm`을 묻고, `bronze` / `silver` / `gold` 3티어 모델을 고르게 합니다. `mix`에서는 전용 `gpt`, `glm` primary 에이전트를 켤지도 묻습니다.
|
|
160
|
-
- **비대화형 설치** → opencode.json에서 프로바이더를 자동 감지하여 모델 적응 프리셋을 작성합니다. `resolver`, `gpt`, `glm` primary 경로를 활성화합니다.
|
|
161
|
-
- **GLM/ZAI 모델 감지** → 비밀값 없는 로컬 ZAI MCP 부트스트랩은 계속 추가합니다.
|
|
162
|
-
|
|
163
|
-
기존 `resolve.json` 파일은 **동의 없이 덮어쓰지 않습니다**. 재설치 시 인터랙티브 환경이면 기존 파일을 업데이트할지, 백업 후 fresh setup을 다시 돌릴지 묻습니다. 비대화형 자동화에서는 `OPENCODE_RESOLVE_REINSTALL=fresh` 또는 `OPENCODE_RESOLVE_REINSTALL=update`를 설정하세요.
|
|
164
|
-
|
|
165
|
-
자동 등록을 건너뛰려면:
|
|
166
|
-
|
|
167
|
-
```sh
|
|
168
|
-
OPENCODE_RESOLVE_SKIP_POSTINSTALL=1 npm install -g opencode-resolve
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 플러그인 캐시 새로고침
|
|
172
|
-
|
|
173
|
-
> **중요 — OpenCode가 플러그인을 자체적으로 캐시합니다.** OpenCode는 전역 설치된 npm 패키지를 직접 사용하지 않습니다. `~/.cache/opencode/packages/`에 자체 캐시를 유지합니다. 최초 설치 후 (또는 향후 업그레이드 시) 캐시를 새로고침하세요:
|
|
174
|
-
|
|
175
|
-
```sh
|
|
176
65
|
opencode plugin opencode-resolve --global --force
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
그래도 OpenCode가 계속 예전 패키지를 로드하면, OpenCode 플러그인 캐시 항목만 지우고 다시 설치하세요. 이 절차는 `~/.config/opencode/resolve.json`을 삭제하지 않습니다.
|
|
180
|
-
|
|
181
|
-
Linux/macOS:
|
|
182
|
-
|
|
183
|
-
```sh
|
|
184
|
-
export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
|
|
185
|
-
rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
|
|
186
|
-
opencode plugin opencode-resolve@latest --global --force
|
|
187
|
-
node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
Windows PowerShell:
|
|
191
|
-
|
|
192
|
-
```powershell
|
|
193
|
-
$OpenCodeCacheRoot = if ($env:XDG_CACHE_HOME) { Join-Path $env:XDG_CACHE_HOME "opencode" } else { Join-Path $env:LOCALAPPDATA "opencode" }
|
|
194
|
-
$PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
|
|
195
|
-
Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
|
|
196
|
-
opencode plugin opencode-resolve@latest --global --force
|
|
197
|
-
$Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
|
|
198
|
-
node -e "console.log(require(process.argv[1]).version)" $Pkg
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
캐시 새로고침 후 OpenCode를 재시작하세요.
|
|
202
|
-
|
|
203
|
-
### 수동 대안
|
|
204
|
-
|
|
205
|
-
`postinstall`이 플러그인을 등록하지 않았다면, `~/.config/opencode/opencode.json`에 직접 추가:
|
|
206
|
-
|
|
207
|
-
```json
|
|
208
|
-
{
|
|
209
|
-
"plugin": ["opencode-resolve"]
|
|
210
|
-
}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### OpenCode 재시작
|
|
214
|
-
|
|
215
|
-
```sh
|
|
216
66
|
opencode
|
|
217
67
|
```
|
|
218
68
|
|
|
219
|
-
|
|
69
|
+
npm `postinstall`이 `~/.config/opencode/opencode.json`에 플러그인을 등록하고, 없을 때만 `~/.config/opencode/resolve.json`을 만들고, 기존 모델 핀을 보존하며 (`--reset-config`로 명시 시 초기화), `~/.cache/opencode/packages/` 의 OpenCode 플러그인 캐시를 새로고침합니다.
|
|
220
70
|
|
|
221
|
-
|
|
71
|
+
### 다시 셋업하기
|
|
222
72
|
|
|
223
|
-
|
|
73
|
+
설치 이후 언제든 `opencode-resolve setup` CLI로 다시 실행할 수 있습니다.
|
|
224
74
|
|
|
225
|
-
|
|
75
|
+
| 명령 | 언제 사용 |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `opencode-resolve setup --fresh` | `resolve.json` 재생성, 기존 모델 핀 유지 |
|
|
78
|
+
| `opencode-resolve setup --reset-config` | `resolve.json` 재생성 + 모델 핀 초기화 |
|
|
79
|
+
| `opencode-resolve setup --models` | 모델 핀만 다시 감지 |
|
|
80
|
+
| `opencode-resolve setup --force-cache` | OpenCode 플러그인 캐시만 새로고침 |
|
|
226
81
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
### 1단계 — 설치 및 캐시 준비
|
|
82
|
+
자동 설정을 건너뛰려면:
|
|
230
83
|
|
|
231
84
|
```sh
|
|
232
|
-
|
|
85
|
+
OPENCODE_RESOLVE_SKIP_POSTINSTALL=1 npm install -g opencode-resolve
|
|
233
86
|
```
|
|
234
87
|
|
|
235
|
-
|
|
88
|
+
### 선택적 companion 플러그인
|
|
89
|
+
|
|
90
|
+
- `@tarquinen/opencode-dcp@latest` — 긴 루프에서 오래된 tool output을 줄여 토큰 비용을 낮춥니다.
|
|
91
|
+
- `@slkiser/opencode-quota@latest` — 컨텍스트를 오염시키지 않고 토큰/quota 사용량을 보여줍니다.
|
|
236
92
|
|
|
237
|
-
###
|
|
93
|
+
### 수동 설정
|
|
238
94
|
|
|
239
|
-
|
|
95
|
+
`~/.config/opencode/opencode.json`에 플러그인을 추가합니다.
|
|
240
96
|
|
|
241
97
|
```json
|
|
242
98
|
{
|
|
243
|
-
"$schema": "https://opencode.ai/config.json",
|
|
244
|
-
"model": "<사용자-기본-모델-id>",
|
|
245
99
|
"plugin": ["opencode-resolve"]
|
|
246
100
|
}
|
|
247
101
|
```
|
|
248
102
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
#### 2b. 권장 companion 플러그인 제안 (2개)
|
|
252
|
-
|
|
253
|
-
모델 선택으로 넘어가기 전에, **독립적인** 두 companion 플러그인을 각각 한 번씩 물어봅니다 — 둘 다 권장 기본값. 별개의 OpenCode 플러그인이라 필수는 아니지만 opencode-resolve와 궁합이 좋습니다.
|
|
254
|
-
|
|
255
|
-
**Companion 1 — `@tarquinen/opencode-dcp` (Dynamic Context Pruning)**
|
|
256
|
-
|
|
257
|
-
> _opencode-resolve는 **`@tarquinen/opencode-dcp`** 와 궁합이 좋아요 — obsolete tool output을 가지치기해서 긴 resolver 루프의 토큰 비용을 줄입니다. 설치할까요? (권장)_
|
|
258
|
-
|
|
259
|
-
**Companion 2 — `@slkiser/opencode-quota` (사용량/quota 추적)**
|
|
260
|
-
|
|
261
|
-
> _그리고 **`@slkiser/opencode-quota`** — 컨텍스트 윈도우를 오염시키지 않고 실시간 토큰/quota 사용량을 보여줍니다. GLM coding-plan, OpenAI Plus/Pro, Qwen 등 지원. 내 사용량/잔여 quota 확인용으로 유용. 설치할까요? (권장)_
|
|
262
|
-
|
|
263
|
-
사용자가 **예** (각 질문마다):
|
|
264
|
-
|
|
265
|
-
1. `opencode plugin <package>@latest --global --force` 실행 (캐시 priming).
|
|
266
|
-
2. `~/.config/opencode/opencode.json`의 `plugin` 배열에 `"<package>@latest"` 추가 — 이미 있으면 스킵.
|
|
267
|
-
|
|
268
|
-
`<package>`는 `@tarquinen/opencode-dcp` 또는 `@slkiser/opencode-quota`.
|
|
269
|
-
|
|
270
|
-
각 **아니오**: 그 항목 스킵 — `opencode.json`을 그것 때문에 수정하지 마세요. 어느 쪽이든 3단계로 진행.
|
|
271
|
-
|
|
272
|
-
> `context7` MCP는 `resolve.json`에서 `context7: true`(기본값)이면 opencode-resolve가 런타임에 자동 등록합니다. 별도 질문 불필요.
|
|
273
|
-
|
|
274
|
-
### 3단계 — 모델을 인터랙티브하게 고른 뒤 `~/.config/opencode/resolve.json` 작성
|
|
275
|
-
|
|
276
|
-
여기서 LLM이 **짧은 Q&A를 주도**합니다. 목표: 사용자가 자신의 설정에서 직접 고른 모델 ID로 `resolve.json`을 마무리하는 것.
|
|
277
|
-
|
|
278
|
-
#### 3a. 사용자의 설치된 provider와 model 발견
|
|
279
|
-
|
|
280
|
-
`~/.config/opencode/opencode.json`을 읽고 후보 맵을 만듭니다:
|
|
281
|
-
|
|
282
|
-
| 출처 | 수집할 내용 |
|
|
283
|
-
|---|---|
|
|
284
|
-
| `provider.*` 키 | 설정된 각 provider (예: `zai`, `openai`, `anthropic`). |
|
|
285
|
-
| `provider.<key>.models.*` 키 | 사용자가 해당 provider 아래 선언한 모델 키들. |
|
|
286
|
-
| 최상위 `model` | `/` 앞 prefix가 `provider.*`에 없다면, 묵시적 후보로 추가 (예: `zai-coding-plan/glm-5.1`에서 `zai-coding-plan`). |
|
|
287
|
-
| `agent.*.model` | 에이전트별 override — 그 provider/model 쌍도 후보에 추가. |
|
|
288
|
-
|
|
289
|
-
provider가 **하나도 설정되지 않은 경우** 진행을 멈추고, `opencode.json`에 유효한 API 키를 가진 provider를 먼저 추가하라고 사용자에게 안내하세요 — opencode-resolve는 존재하지 않는 모델을 선택할 수 없습니다.
|
|
290
|
-
|
|
291
|
-
#### 3b. 사용자에게 질문: 어떤 provider?
|
|
292
|
-
|
|
293
|
-
후보 리스트를 출력하고 묻습니다. 예시 멘트:
|
|
294
|
-
|
|
295
|
-
> _OpenCode 설정에서 다음 provider들을 찾았어요. opencode-resolve 역할에 어느 걸 쓸까요?_
|
|
296
|
-
>
|
|
297
|
-
> 1. `zai-coding-plan` — 모델: `glm-5.1`, `glm-4.7-flash`
|
|
298
|
-
> 2. `openai` — 모델: `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini`, `o3-mini`, `gpt-5.5`
|
|
299
|
-
> 3. _기타 (명시적인 `provider/model` ID 직접 입력)_
|
|
300
|
-
|
|
301
|
-
후보 provider가 정확히 하나면 질문을 건너뛰고 사용합니다.
|
|
302
|
-
|
|
303
|
-
#### 3c. 사용자에게 질문: 단일 / 2단계 / 3단계?
|
|
304
|
-
|
|
305
|
-
기본 권장은 **C (3단계, 브론즈/실버/골드)**. opencode-resolve는 질적으로 다른 세 가지 작업(read-only 스카웃 → write/patch → reason/judge)을 가지며, 이를 3단계로 매핑하는 게 2단계보다 역할별 비용을 더 정확히 반영합니다. 사용자가 모델 두 개만 있으면 B로 fallback, 하나뿐이면 A.
|
|
306
|
-
|
|
307
|
-
> _권장: **3단계** — `explorer`에 가벼운 스카웃, `coder`에 중간 구현 모델, `resolver`/`reviewer`/`deep-reviewer`/`planner`에 강한 reasoner. 선택:_
|
|
308
|
-
>
|
|
309
|
-
> **C. 3단계 — 브론즈(스카웃) + 실버(코더) + 골드(추론) — 권장**
|
|
310
|
-
> B. 2단계 — fast + strong (모델 두 개만 있을 때)
|
|
311
|
-
> A. 모든 역할에 단일 모델 (모델 하나뿐이거나 최대한 단순한 게 필요한 경우만)
|
|
312
|
-
|
|
313
|
-
사용자가 그냥 엔터를 누르거나 "권장"이라고 답하면 C로. 모델 부족 시에만 fallback. **same-provider 분할도 완전 유효** — 예: `openai/gpt-4o-mini` / `openai/gpt-5.3-codex` / `openai/o4-mini`, 또는 `zai/glm-4.7-flash` / `zai-coding-plan/glm-5.1` / `zai/glm-5`.
|
|
314
|
-
|
|
315
|
-
#### 3d. 사용자에게 질문: 어떤 모델?
|
|
316
|
-
|
|
317
|
-
3b에서 고른 provider의 모델만 보여주세요.
|
|
318
|
-
|
|
319
|
-
- **단일 (A)** 의 경우 한 번만 질문:
|
|
320
|
-
> _모든 역할이 사용할 모델은 무엇인가요?_ → 선택한 provider의 모델 목록 제시.
|
|
321
|
-
- **분할 (B)** 의 경우 순서대로 두 번 질문:
|
|
322
|
-
> _`coder`와 `explorer`용 **fast** 모델을 고르세요:_ → 모델 목록.
|
|
323
|
-
>
|
|
324
|
-
> _`resolver`, `reviewer`, `deep-reviewer`용 **strong** 모델을 고르세요:_ → 모델 목록.
|
|
325
|
-
|
|
326
|
-
파일을 쓰기 전에 각 선택을 사용자에게 다시 확인시키세요. 예:
|
|
327
|
-
|
|
328
|
-
> _`coder`와 `explorer`를 `zai-coding-plan/glm-5.1`로, `resolver`/`reviewer`/`deep-reviewer`를 `openai/gpt-5.5`로 핀닝합니다. 진행할까요?_
|
|
329
|
-
|
|
330
|
-
#### 3d-bis. 사용자가 명시적으로 hard cap 원할 때만 `maxParallelSubagents` 설정
|
|
331
|
-
|
|
332
|
-
기본 흐름은 `maxParallelSubagents`를 `resolve.json`에 **쓰지 않습니다**. resolver prompt에 soft 가이드라인이 들어있어요 — 진짜 독립적인 작업이면 coder fan out, rate-limit 에러 보이면 backoff, explorer 무제한, reviewer/deep-reviewer/planner는 본질적으로 singleton. oh-my-openagent (per-model semaphore, 사실상 default 무제한) 와 OpenCode core (built-in concurrency 룰 없음) 의 처리와 동일한 결, rate limit을 이미 인지한 모델을 과제약하지 않음.
|
|
333
|
-
|
|
334
|
-
`maxParallelSubagents`는 사용자가 hard cap을 명시적으로 원할 때만 물어보세요. 흔한 케이스: GLM coding-plan 사용자가 "burst 절대 안 됨" 보장 원할 때. 권장 멘트:
|
|
335
|
-
|
|
336
|
-
> _(optional, 관련된 경우만)_ _`coder` 모델이 GLM이네요 — coding-plan은 burst 시 throttle 걸립니다. 엄격한 직렬 coder 디스패치를 위해 `maxParallelSubagents: 1`로 핀닝할까요?_
|
|
337
|
-
|
|
338
|
-
그 외엔 필드 자체를 생략.
|
|
339
|
-
|
|
340
|
-
#### 3e. `~/.config/opencode/resolve.json` 작성
|
|
341
|
-
|
|
342
|
-
**3단계 (C, 권장)** — `bronze`/`silver`/`gold` alias 사용:
|
|
103
|
+
`~/.config/opencode/resolve.json`을 만듭니다.
|
|
343
104
|
|
|
344
105
|
```json
|
|
345
106
|
{
|
|
@@ -347,679 +108,284 @@ provider가 **하나도 설정되지 않은 경우** 진행을 멈추고, `openc
|
|
|
347
108
|
"preserveNative": true,
|
|
348
109
|
"context7": true,
|
|
349
110
|
"commands": false,
|
|
350
|
-
"models": {
|
|
351
|
-
"bronze": "<provider>/<스카웃-모델>",
|
|
352
|
-
"silver": "<provider>/<코더-모델>",
|
|
353
|
-
"gold": "<provider>/<추론-모델>",
|
|
354
|
-
"explorer": "bronze",
|
|
355
|
-
"coder": "silver",
|
|
356
|
-
"resolver": "gold",
|
|
357
|
-
"reviewer": "gold",
|
|
358
|
-
"deep-reviewer": "gold",
|
|
359
|
-
"planner": "gold"
|
|
360
|
-
},
|
|
111
|
+
"models": {},
|
|
361
112
|
"agents": {
|
|
362
|
-
"coder":
|
|
363
|
-
"resolver":
|
|
364
|
-
"explorer":
|
|
365
|
-
"reviewer":
|
|
366
|
-
"deep-reviewer": { "enabled": true,
|
|
367
|
-
"planner":
|
|
368
|
-
|
|
369
|
-
"gpt-coder": { "enabled": false },
|
|
370
|
-
"debugger": { "enabled": false },
|
|
371
|
-
"researcher": { "enabled": false }
|
|
372
|
-
},
|
|
373
|
-
"autoApprove": true,
|
|
374
|
-
"autoUpdate": true
|
|
113
|
+
"coder": { "enabled": true, "mode": "subagent" },
|
|
114
|
+
"resolver": { "enabled": true },
|
|
115
|
+
"explorer": { "enabled": true, "mode": "subagent" },
|
|
116
|
+
"reviewer": { "enabled": true, "mode": "subagent" },
|
|
117
|
+
"deep-reviewer": { "enabled": true, "mode": "subagent" },
|
|
118
|
+
"planner": { "enabled": true, "mode": "subagent" }
|
|
119
|
+
}
|
|
375
120
|
}
|
|
376
121
|
```
|
|
377
122
|
|
|
378
|
-
|
|
123
|
+
캐시를 새로고침하고 OpenCode를 재시작합니다.
|
|
379
124
|
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
"gold": "<provider>/<추론-모델>",
|
|
384
|
-
"explorer": "silver",
|
|
385
|
-
"coder": "silver",
|
|
386
|
-
"resolver": "gold",
|
|
387
|
-
"reviewer": "gold",
|
|
388
|
-
"deep-reviewer": "gold",
|
|
389
|
-
"planner": "gold"
|
|
390
|
-
}
|
|
125
|
+
```sh
|
|
126
|
+
opencode plugin opencode-resolve --global --force
|
|
127
|
+
opencode
|
|
391
128
|
```
|
|
392
129
|
|
|
393
|
-
|
|
130
|
+
OpenCode가 계속 오래된 플러그인을 로드하면:
|
|
394
131
|
|
|
395
|
-
```
|
|
396
|
-
"
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
"coder": "gold",
|
|
400
|
-
"resolver": "gold",
|
|
401
|
-
"reviewer": "gold",
|
|
402
|
-
"deep-reviewer": "gold",
|
|
403
|
-
"planner": "gold"
|
|
404
|
-
}
|
|
132
|
+
```sh
|
|
133
|
+
export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
|
|
134
|
+
rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
|
|
135
|
+
opencode plugin opencode-resolve@latest --global --force
|
|
405
136
|
```
|
|
406
137
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
`<provider>/<모델>` 플레이스홀더는 모두 사용자가 3b/3d에서 고른 **정확한** ID 문자열로 교체 — 임의 생성 금지, 자동완성 금지, 버전 드리프트 금지. 고른 모델을 `provider/model` 문자열로 매핑할 수 없으면 추측하지 말고 사용자에게 다시 물어보세요.
|
|
410
|
-
|
|
411
|
-
> 활성 에이전트마다 명시적인 `enabled: true`를 두어 파일이 자체 문서화됩니다. `enabled` 배열이 여전히 권위 있으며, 에이전트별 플래그는 사람이 파일을 읽을 때의 모호함만 제거합니다.
|
|
138
|
+
## 추천 스킬
|
|
412
139
|
|
|
413
|
-
|
|
140
|
+
더 넓은 OpenCode 환경을 원하면 [awesome-opencode-skills](https://github.com/jshsakura/awesome-opencode-skills)를 같이 사용해 보세요. 개발, 인프라, 보안, 데이터, 문서화 등 특화 작업용 OpenCode Skills 컬렉션을 설치합니다.
|
|
414
141
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
OpenCode를 닫았다가 다시 연 후, 설치가 잘 됐는지 확인하세요:
|
|
142
|
+
macOS / Linux:
|
|
418
143
|
|
|
419
144
|
```sh
|
|
420
|
-
|
|
145
|
+
curl -sL https://raw.githubusercontent.com/jshsakura/awesome-opencode-skills/main/install.sh | bash
|
|
421
146
|
```
|
|
422
147
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
| 증상 | 원인 | 조치 |
|
|
426
|
-
|---|---|---|
|
|
427
|
-
| OpenCode 내장 `explore` / `general`만 나옴 | 플러그인이 로드되지 않음 | `opencode plugin opencode-resolve --global --force` 재실행; `opencode.json`의 `plugin` 배열에 `"opencode-resolve"`가 문자열로 들어있는지 확인. |
|
|
428
|
-
| 에이전트는 보이는데 호출 시 "model not found" | `models`에 핀닝된 ID가 실제로 없음 | `resolve.json`을 다시 열어, 해당 ID를 사용자가 실제 보유한 ID로 교체 후 재시작. |
|
|
429
|
-
| 분할(B)을 골랐는데 한 단계만 작동 | `models` 블록에 `fast` 또는 `strong` 누락 | 3단계의 3d부터 다시 실행. |
|
|
430
|
-
|
|
431
|
-
내부 전문가 서브에이전트(`coder`, `explorer`, `reviewer`, `deep-reviewer`, `planner`)는 서브에이전트 전용이므로 기본 picker에는 나타나지 않습니다 — `resolver`가 기본 사용자 대면 resolve 에이전트입니다.
|
|
432
|
-
|
|
433
|
-
### 이 템플릿을 사용하는 이유
|
|
434
|
-
|
|
435
|
-
| 설정 | 이유 |
|
|
436
|
-
|---|---|
|
|
437
|
-
| `enabled: ["coder", "resolver", "explorer", "reviewer", "deep-reviewer", "planner"]` | 고정 핵심 경로(resolver→coder) + OpenCode 네이티브 내부 전문가 서브에이전트 기본 주입 |
|
|
438
|
-
| `autoApprove: true` | 하위 호환/가독성 플래그. 실제 저마찰 동작은 기본 권한과 `permission.ask` bash 분류기가 담당 |
|
|
439
|
-
| 기본적으로 `maxParallelSubagents` 미설정 | resolver는 soft fan-out 가이드를 유지; GLM profile은 토큰 효율 프롬프트를 쓰지만 사용자가 설정하지 않는 한 hard concurrency cap을 걸지 않음 |
|
|
440
|
-
| `agents.coder.mode = "subagent"` | Coder는 사용자 대면 기본 역할이 아니라 고정 resolver→coder 경로에 머무름 |
|
|
441
|
-
| `agents.{explorer,reviewer,deep-reviewer}.mode = "subagent"` | 내부 전문가는 서브에이전트 전용 — 사용자 대면 기본 역할이 아님 |
|
|
442
|
-
| `context7: true` | 플러그인이 Context7 MCP를 자동 등록 — 수동 MCP 설정 불필요 |
|
|
443
|
-
| `models` 별칭 | 기본적으로 비어있음 — 모든 역할이 OpenCode 기본 모델을 상속. 이점을 측정한 경우에만 역할별 모델 핀닝 |
|
|
444
|
-
| 다른 에이전트 비활성화 | `architect`, `gpt-coder`, `debugger`, `researcher`는 기본 꺼짐. 필요 시 활성화 |
|
|
445
|
-
|
|
446
|
-
### resolver를 호출하면 어떤 일이 일어나는가
|
|
447
|
-
|
|
448
|
-
1. **분류** — Resolver가 작업을 quick, normal, deep, risky로 분류합니다.
|
|
449
|
-
2. **검사** — 로컬 도구로 관련 파일만 읽습니다. 광범위한 탐색 없음.
|
|
450
|
-
3. **사소한 작업** — Resolver가 직접 작은 편집을 적용합니다. 서브에이전트 불필요.
|
|
451
|
-
4. **구현** — 정확한 파일 경로와 집중된 지시와 함께 `coder`를 디스패치합니다.
|
|
452
|
-
5. **검증** — 가장 저렴한 의미 있는 검증을 먼저 실행합니다 (대상 테스트, 타입 체크, 린트).
|
|
453
|
-
6. **회복** — 문제가 남아있으면, 근본 원인을 진단하도록 `debugger`를 쓰거나 집중적인 수정과 함께 `coder`를 다시 디스패치합니다. 연속 실패가 누적되면 완료를 주장하지 않고 차단 사항을 보고합니다.
|
|
454
|
-
7. **보고** — 변경 사항, 검증 결과, 남은 차단 사항의 간결한 증거 요약을 반환합니다.
|
|
455
|
-
8. **내부 전문가** — 필요 시: `explorer`(범위가 불명확할 때), `reviewer`(비사소한 변경에 검증 갭), `deep-reviewer`(위험/보안/고영향도만). 서브에이전트로 기본 사용 가능하지만 핵심 경로가 아님.
|
|
456
|
-
|
|
457
|
-
---
|
|
458
|
-
|
|
459
|
-
## 기본 동작
|
|
460
|
-
|
|
461
|
-
| 항목 | 기본값 |
|
|
462
|
-
|---|---|
|
|
463
|
-
| 활성화된 에이전트 | `coder`, `resolver`, `explorer`, `reviewer`, `deep-reviewer`, `planner` |
|
|
464
|
-
| 핵심 경로 | `resolver` → `coder` (고정 역할 검증 루프) |
|
|
465
|
-
| 내부 서브에이전트 | `explorer`, `reviewer`, `deep-reviewer` (서브에이전트 전용, 필요 시 디스패치) |
|
|
466
|
-
| 새 작업의 기본 에이전트 | `resolver` (`mode: "all"`) |
|
|
467
|
-
| 에이전트 모델 | 최상위 OpenCode `model` 상속 |
|
|
468
|
-
| 네이티브 `plan` / `build` | 그대로 보존 |
|
|
469
|
-
| 프로젝트 컨텍스트 소스 | `HARNESS.md`, `AGENTS.md`, `CLAUDE.md`, `CONVENTIONS.md`, `.opencode/context`, `.claude/context`, `context/`, `thoughts/` |
|
|
470
|
-
| Context7 MCP 프리셋 | `context7: true` 시 자동 추가 |
|
|
471
|
-
| 선택적 명령어 | 비활성화 |
|
|
472
|
-
| `autoApprove` | `true` (하위 호환/가독성 플래그; bash 라우팅은 permission hook이 처리) |
|
|
473
|
-
| 반복 실패 동작 | 진단, 다른 수정으로 재시도, 실패가 많으면 architect로 전략 전환, 그래도 막히면 완료 주장 대신 차단 사항 보고 |
|
|
474
|
-
|
|
475
|
-
---
|
|
476
|
-
|
|
477
|
-
## 프로젝트 컨텍스트 소스
|
|
478
|
-
|
|
479
|
-
opencode-resolve는 전체 저장소를 프롬프트에 밀어 넣지 않고도 커밋된 프로젝트 지식을 발견할 수 있습니다. Resolver는 사용 가능한 소스 목록을 보고, 현재 작업과 관련된 문서만 읽어야 합니다.
|
|
480
|
-
|
|
481
|
-
감지하는 최상위 지식 파일:
|
|
482
|
-
|
|
483
|
-
| 소스 | 용도 |
|
|
484
|
-
|---|---|
|
|
485
|
-
| `HARNESS.md` | 빌드, 검증, 인프라, 배포, 프로젝트 함정 |
|
|
486
|
-
| `AGENTS.md` | 에이전트 동작, 디스패치 규칙, 리뷰 기대치, 로컬 워크플로우 |
|
|
487
|
-
| `CLAUDE.md` | 다른 AI 코딩 도구에서 쓰던 기존 가이드 |
|
|
488
|
-
| `CONVENTIONS.md` | 코드 스타일, 네이밍, 아키텍처, 저장소 규칙 |
|
|
489
|
-
|
|
490
|
-
감지하는 컨텍스트 디렉터리:
|
|
491
|
-
|
|
492
|
-
| 소스 | 동작 |
|
|
493
|
-
|---|---|
|
|
494
|
-
| `.opencode/context/` | OpenCode/OAC 스타일 팀 패턴 문서 |
|
|
495
|
-
| `.claude/context/` | Claude 스타일 공유 컨텍스트 문서 |
|
|
496
|
-
| `context/` | 일반 프로젝트 컨텍스트 문서 |
|
|
497
|
-
| `thoughts/` | Agentic 스타일 영속 지식: architecture, tickets, research, plans, reviews |
|
|
498
|
-
|
|
499
|
-
컨텍스트 디렉터리에서는 `.md`, `.mdx`, `.txt`, `.json`, `.jsonc`, `.yaml`, `.yml` 파일을 제한된 깊이와 개수 안에서 목록화합니다. `thoughts/archive/`는 의도적으로 제외합니다. 보관 문서는 오래됐거나 오해를 만들 수 있기 때문입니다.
|
|
500
|
-
|
|
501
|
-
로컬 런타임 상태는 git에서 제외합니다:
|
|
148
|
+
Windows PowerShell:
|
|
502
149
|
|
|
503
|
-
```
|
|
504
|
-
.opencode/
|
|
505
|
-
.opencode/*.local.json
|
|
150
|
+
```powershell
|
|
151
|
+
irm https://raw.githubusercontent.com/jshsakura/awesome-opencode-skills/main/install.ps1 | iex
|
|
506
152
|
```
|
|
507
153
|
|
|
508
|
-
반대로 `.opencode/context/`와 `thoughts/` 같은 커밋된 컨텍스트는 ignore하지 않습니다.
|
|
509
|
-
|
|
510
|
-
---
|
|
511
|
-
|
|
512
154
|
## 설정
|
|
513
155
|
|
|
514
|
-
플러그인은
|
|
515
|
-
|
|
516
|
-
| 우선순위 | 경로 |
|
|
517
|
-
|---:|---|
|
|
518
|
-
| 1 | `.opencode/resolve.json` (프로젝트) |
|
|
519
|
-
| 2 | `opencode-resolve.json` (프로젝트) |
|
|
520
|
-
| 3 | `~/.config/opencode/resolve.json` |
|
|
521
|
-
| 4 | `~/.config/opencode/opencode-resolve.json` |
|
|
522
|
-
|
|
523
|
-
`opencode.json`의 인라인 플러그인 옵션이 파일 설정을 재정의합니다.
|
|
524
|
-
|
|
525
|
-
설정 우선순위:
|
|
526
|
-
|
|
527
|
-
```text
|
|
528
|
-
기본 제공 기본값 → 찾은 첫 번째 설정 파일 → 인라인 플러그인 옵션
|
|
529
|
-
```
|
|
530
|
-
|
|
531
|
-
최소 설정 (기본값과 동일):
|
|
156
|
+
플러그인은 아래 파일 중 첫 번째로 발견한 설정을 읽습니다.
|
|
532
157
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
"context7": true,
|
|
538
|
-
"commands": false
|
|
539
|
-
}
|
|
540
|
-
```
|
|
158
|
+
1. `.opencode/resolve.json`
|
|
159
|
+
2. `opencode-resolve.json`
|
|
160
|
+
3. `~/.config/opencode/resolve.json`
|
|
161
|
+
4. `~/.config/opencode/opencode-resolve.json`
|
|
541
162
|
|
|
542
|
-
`opencode.json
|
|
163
|
+
`opencode.json`의 인라인 플러그인 옵션은 파일 설정보다 우선합니다. 사용자 지정 경로도 가능합니다.
|
|
543
164
|
|
|
544
165
|
```json
|
|
545
166
|
{
|
|
546
167
|
"plugin": [
|
|
547
168
|
[
|
|
548
169
|
"opencode-resolve",
|
|
549
|
-
{
|
|
550
|
-
"enabled": ["coder", "resolver", "explorer", "reviewer", "deep-reviewer", "planner"],
|
|
551
|
-
"autoApprove": true,
|
|
552
|
-
"context7": true,
|
|
553
|
-
"commands": false
|
|
554
|
-
}
|
|
170
|
+
{ "config": ".opencode/resolve.json" }
|
|
555
171
|
]
|
|
556
172
|
]
|
|
557
173
|
}
|
|
558
174
|
```
|
|
559
175
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
---
|
|
563
|
-
|
|
564
|
-
## 설정 참조
|
|
565
|
-
|
|
566
|
-
모든 허용되는 최상위 옵션:
|
|
567
|
-
|
|
568
|
-
| 키 | 타입 | 기본값 | 용도 |
|
|
569
|
-
|---|---|---|---|
|
|
570
|
-
| `profile` | `"mix" \| "gpt" \| "glm"` | `"mix"` | 최상위 동작 프로필. `mix`가 명시적 기본값이며, `gpt`와 `glm`은 프로바이더별 프롬프트, 활성 에이전트 기본값, chat 파라미터를 적용. |
|
|
571
|
-
| `tier` | `"bronze" \| "silver" \| "gold"` | _없음_ | 선택적 활성 에이전트 프리셋. `bronze`는 최소 구성, `silver`는 표준, `gold`는 전체 전문가 세트를 활성화. |
|
|
572
|
-
| `enabled` | `string[]` | `["coder", "resolver", "explorer", "reviewer", "deep-reviewer", "planner"]` | 주입할 resolve 에이전트. 핵심 경로: resolver→coder. 내부 전문가(coder, explorer, reviewer, deep-reviewer, planner)는 서브에이전트 전용. 에이전트별 `agents.<name>.enabled`가 이것을 재정의. |
|
|
573
|
-
| `preserveNative` | `boolean` | `true` | 네이티브 `plan`/`build`는 항상 보존됨. 가독성을 위해 허용됨. |
|
|
574
|
-
| `context7` | `boolean` | `true` | true인 경우, 이미 구성되지 않았으면 Context7 MCP 서버를 등록. |
|
|
575
|
-
| `commands` | `boolean` | `false` | true인 경우, `resolve`, `resolve-code`, `resolve-review` 명령어 추가. |
|
|
576
|
-
| `autoApprove` | `boolean` | `true` | 하위 호환/가독성 플래그. 현재 동작은 내장 기본 권한과 `permission.ask` bash 분류기가 제어하며, 이 플래그가 권한을 재작성하지 않음. |
|
|
577
|
-
| `autoUpdate` | `boolean` | `true` | npm 버전 확인과 OpenCode 플러그인 캐시 갱신 알림을 best-effort로 수행. 비활성화하려면 false. |
|
|
578
|
-
| `maxParallelSubagents` | `positive integer` | _미설정_ | 동시 coder 수에 대한 선택적 프롬프트 수준 상한. 미설정 시 resolver는 soft fan-out 가이드를 사용하고 rate-limit 에러에 backoff. GLM profile도 사용자가 설정하지 않는 한 hard cap을 걸지 않음. |
|
|
579
|
-
| `models` | `object` | `{}` | 별칭 맵. 키는 에이전트 이름 또는 `bronze`/`silver`/`gold`, `gpt-*`, `glm-*`, `fast`, `strong`, `mini`, `codex`, `quick`, `deep`, `glm`, `gpt` 같은 별칭. 값은 모델 id 또는 다른 별칭. |
|
|
580
|
-
| `agents` | `object` | `{}` | 에이전트별 재정의 (아래 참조). |
|
|
581
|
-
| `config` | `string` | _없음_ | 설정 파일의 사용자 정의 경로 (프로젝트 상대경로 또는 절대경로). |
|
|
582
|
-
|
|
583
|
-
`agents.<name>` 내의 에이전트별 옵션:
|
|
584
|
-
|
|
585
|
-
| 키 | 타입 | 참고 |
|
|
586
|
-
|---|---|---|
|
|
587
|
-
| `enabled` | `boolean` | 최상위 `enabled`와 관계없이 이 에이전트를 강제 활성화/비활성화. |
|
|
588
|
-
| `model` | `string` | 모델 id 또는 별칭. 최상위 `models` 맵에 대해 해석됨. |
|
|
589
|
-
| `mode` | `"subagent" \| "primary" \| "all"` | OpenCode 에이전트 모드. |
|
|
590
|
-
| `description` | `string` | 다른 에이전트에게 표시되는 기본 설명을 재정의. |
|
|
591
|
-
| `prompt` | `string` | 기본 시스템 프롬프트를 재정의. (`resolver`의 경우 템플릿된 병렬 규칙 프롬프트도 비활성화.) |
|
|
592
|
-
| `color` | `string` | UI 색상. |
|
|
593
|
-
| `maxSteps` | `positive integer` | 호출당 단계 예산. |
|
|
594
|
-
| `tools` | `Record<string, boolean>` | 개별 OpenCode 도구 토글. |
|
|
595
|
-
| `permission` | `object` | 권한 재정의 — 아래 참조. |
|
|
596
|
-
|
|
597
|
-
권한 키 (각각 `"ask"`, `"allow"`, 또는 `"deny"`):
|
|
598
|
-
|
|
599
|
-
`edit`, `bash`, `webfetch`, `doom_loop`, `external_directory`.
|
|
600
|
-
|
|
601
|
-
`permission.bash`는 명령별 맵일 수도 있습니다:
|
|
602
|
-
|
|
603
|
-
```json
|
|
604
|
-
{
|
|
605
|
-
"permission": {
|
|
606
|
-
"bash": { "npm test": "allow", "rm -rf": "deny" }
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
완전히 주석이 달린 참조 설정이 [`opencode-resolve.reference.jsonc`](./opencode-resolve.reference.jsonc)로 패키지에 포함되어 있습니다 — 필요한 키를 `resolve.json`에 복사하세요 (주석 제외).
|
|
176
|
+
우선순위:
|
|
612
177
|
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
## 자동 승인
|
|
616
|
-
|
|
617
|
-
`autoApprove` (기본값 `true`)는 이제 하위 호환/가독성 플래그입니다. 기존 `resolve.json`이 계속 로드되도록 설정에서 허용하지만, 현재 하네스는 이 값으로 권한을 `"ask"`에서 `"allow"`로 재작성하지 않습니다.
|
|
618
|
-
|
|
619
|
-
저마찰 자율 동작은 두 가지 명시적 기본값에서 옵니다:
|
|
620
|
-
|
|
621
|
-
| 권한 | 현재 기본 동작 |
|
|
622
|
-
|---|---|
|
|
623
|
-
| 쓰기 에이전트 `edit` / `webfetch` | `allow` |
|
|
624
|
-
| 쓰기 에이전트 `bash` | `ask`, 플러그인의 `permission.ask` 분류기로 라우팅 |
|
|
625
|
-
| 안전한 bash 명령 | 분류기가 자동 허용 |
|
|
626
|
-
| 위험한 bash 명령 | 분류기가 자동 거부 |
|
|
627
|
-
| 알 수 없는 bash 명령 | OpenCode/사용자 처리를 위해 `ask` 유지 |
|
|
628
|
-
| 읽기 전용 에이전트 `edit` / `bash` | `deny`; write-capable 플러그인 도구도 read-only 에이전트를 차단 |
|
|
629
|
-
|
|
630
|
-
의도를 나타내기 위해 config에 그대로 둘 수 있습니다:
|
|
631
|
-
|
|
632
|
-
```json
|
|
633
|
-
{
|
|
634
|
-
"autoApprove": false
|
|
635
|
-
}
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
> **신뢰 참고:** 저마찰 쓰기 에이전트 권한은 작업공간과 구성된 모델을 신뢰한다고 가정합니다. 신뢰할 수 없는 코드의 경우 샌드박스나 VM을 사용하세요. Bash는 무조건 허용이 아니라 분류기 라우팅을 유지합니다.
|
|
639
|
-
|
|
640
|
-
---
|
|
641
|
-
|
|
642
|
-
## 병렬 서브에이전트 제한
|
|
643
|
-
|
|
644
|
-
`maxParallelSubagents`는 선택 사항입니다. 생략하면 **resolver**는 soft fan-out 가이드를 사용합니다: 진짜 독립적인 작업에는 coder를 분산하고, rate-limit 에러가 보이면 backoff합니다. resolver 프롬프트에 명시적인 역할별 동시 실행 상한을 넣고 싶을 때만 설정하세요. GLM profile도 기본적으로 hard cap은 없습니다.
|
|
645
|
-
|
|
646
|
-
| 값 | 동작 |
|
|
647
|
-
|---|---|
|
|
648
|
-
| `1` | 한 번에 하나의 coder만. |
|
|
649
|
-
| `2` | 최대 2개의 coder 동시 실행. 독립 작업 분산에 유용. |
|
|
650
|
-
| `N > 2` | 최대 N개의 coder 동시 실행. 컨텍스트 낭비를 피하기 위해 신중하게 사용. |
|
|
651
|
-
|
|
652
|
-
프로젝트별 또는 사용자별 재정의:
|
|
653
|
-
|
|
654
|
-
```json
|
|
655
|
-
{ "maxParallelSubagents": 1 }
|
|
656
|
-
{ "maxParallelSubagents": 2 }
|
|
657
|
-
{ "maxParallelSubagents": 4 }
|
|
178
|
+
```text
|
|
179
|
+
내장 기본값 -> 처음 발견한 설정 파일 -> 인라인 플러그인 옵션
|
|
658
180
|
```
|
|
659
181
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
제한은 설정 로드 시 프롬프트에 템플릿되므로, 새 값을 적용하려면 OpenCode를 재시작하세요. 사용자 정의 `agents.resolver.prompt`를 제공하면 템플릿된 규칙이 건너뛰어지고 프롬프트가 전적으로 적용됩니다.
|
|
182
|
+
전체 주석 설정 예시: [opencode-resolve.reference.jsonc](./opencode-resolve.reference.jsonc)
|
|
663
183
|
|
|
664
|
-
|
|
184
|
+
### 최상위 옵션
|
|
665
185
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
`
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
`
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
186
|
+
| 키 | 타입 | 기본값 | 용도 |
|
|
187
|
+
| --- | --- | --- | --- |
|
|
188
|
+
| `profile` | `mix` / `glm` / `gpt` | `mix` | 프롬프트/profile preset. |
|
|
189
|
+
| `tier` | `bronze` / `silver` / `gold` | 미설정 | 설정된 tier preset 활성화. |
|
|
190
|
+
| `enabled` | 에이전트 이름 배열 | 기본 에이전트 | 주입할 resolve 에이전트. |
|
|
191
|
+
| `models` | object | `{}` | 모델 별칭과 역할별 모델 핀. |
|
|
192
|
+
| `agents` | object | `{}` | 에이전트별 override. |
|
|
193
|
+
| `preserveNative` | boolean | `true` | 명시 override가 없으면 OpenCode 기본 에이전트 보존. |
|
|
194
|
+
| `context7` | boolean | `true` | 없을 때 Context7 MCP 등록. |
|
|
195
|
+
| `commands` | boolean | `false` | `/resolve`, `/resolve-code`, `/resolve-review` 추가. |
|
|
196
|
+
| `autoApprove` | boolean | `true` | 하위 호환용 플래그. 현재 권한은 명시 설정과 분류기가 제어. |
|
|
197
|
+
| `autoUpdate` | boolean | `true` | 설치/업데이트 시 추가적 설정 마이그레이션 허용. |
|
|
198
|
+
| `language` | `auto` / `en` / `ko` | `auto` | 프롬프트 언어 선호. |
|
|
199
|
+
| `maxParallelSubagents` | positive integer | 미설정 | 동시 coder 디스패치에 대한 선택적 프롬프트 수준 soft limit. |
|
|
200
|
+
|
|
201
|
+
### 에이전트 override
|
|
202
|
+
|
|
203
|
+
각 `agents.<name>` 항목은 다음 키를 받을 수 있습니다.
|
|
204
|
+
|
|
205
|
+
| 키 | 값 |
|
|
206
|
+
| --- | --- |
|
|
207
|
+
| `enabled` | boolean |
|
|
208
|
+
| `model` | 모델 id 또는 별칭 |
|
|
209
|
+
| `mode` | `subagent`, `primary`, `all` |
|
|
210
|
+
| `description` | string |
|
|
211
|
+
| `prompt` | string |
|
|
212
|
+
| `color` | string |
|
|
213
|
+
| `maxSteps` | positive integer |
|
|
214
|
+
| `tools` | tool boolean object |
|
|
215
|
+
| `permission` | `edit`, `bash`, `webfetch`, `doom_loop`, `external_directory` |
|
|
216
|
+
|
|
217
|
+
권한 값은 `ask`, `allow`, `deny`입니다. `permission.bash`는 명령 패턴별 맵도 받을 수 있습니다.
|
|
696
218
|
|
|
697
219
|
## 모델 설정
|
|
698
220
|
|
|
699
|
-
`
|
|
221
|
+
기본적으로 `models`는 비어 있고 resolve 에이전트는 OpenCode 최상위 `model`을 상속합니다. 비용, 속도, reasoning depth를 나눌 필요가 있을 때만 역할별 모델을 핀닝하세요.
|
|
700
222
|
|
|
701
|
-
각
|
|
223
|
+
각 에이전트의 모델 해석 순서:
|
|
702
224
|
|
|
703
225
|
1. `agents.<name>.model`
|
|
704
|
-
2. `models.<name>`
|
|
705
|
-
3. 최상위
|
|
706
|
-
4.
|
|
707
|
-
|
|
708
|
-
### 모든 것에 기본 모델 사용 (권장)
|
|
709
|
-
|
|
710
|
-
```json
|
|
711
|
-
{
|
|
712
|
-
"enabled": ["coder", "resolver", "explorer", "reviewer", "deep-reviewer"],
|
|
713
|
-
"models": {}
|
|
714
|
-
}
|
|
715
|
-
```
|
|
226
|
+
2. `models.<name>`
|
|
227
|
+
3. OpenCode 최상위 `model`
|
|
228
|
+
4. OpenCode 자체 fallback
|
|
716
229
|
|
|
717
|
-
|
|
230
|
+
3-tier 예시:
|
|
718
231
|
|
|
719
232
|
```json
|
|
720
233
|
{
|
|
721
|
-
"enabled": ["coder", "resolver", "explorer", "reviewer", "deep-reviewer"],
|
|
722
234
|
"models": {
|
|
723
|
-
"
|
|
724
|
-
"
|
|
725
|
-
"
|
|
726
|
-
"
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
```json
|
|
734
|
-
{
|
|
735
|
-
"agents": {
|
|
736
|
-
"resolver": {
|
|
737
|
-
"model": "openai/gpt-5.3-codex"
|
|
738
|
-
}
|
|
235
|
+
"bronze": "zai-coding-plan/glm-4.5",
|
|
236
|
+
"silver": "zai-coding-plan/glm-5.1",
|
|
237
|
+
"gold": "openai/gpt-5.5",
|
|
238
|
+
"explorer": "bronze",
|
|
239
|
+
"coder": "silver",
|
|
240
|
+
"resolver": "gold",
|
|
241
|
+
"reviewer": "gold",
|
|
242
|
+
"deep-reviewer": "gold",
|
|
243
|
+
"planner": "gold"
|
|
739
244
|
}
|
|
740
245
|
}
|
|
741
246
|
```
|
|
742
247
|
|
|
743
|
-
|
|
248
|
+
지원 모델 별칭:
|
|
744
249
|
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
"plan": {
|
|
752
|
-
"model": "openai/gpt-5.3-codex"
|
|
753
|
-
}
|
|
754
|
-
},
|
|
755
|
-
"plugin": [
|
|
756
|
-
[
|
|
757
|
-
"opencode-resolve",
|
|
758
|
-
{
|
|
759
|
-
"enabled": ["coder", "resolver", "explorer", "reviewer", "deep-reviewer"]
|
|
760
|
-
}
|
|
761
|
-
]
|
|
762
|
-
]
|
|
763
|
-
}
|
|
250
|
+
```text
|
|
251
|
+
fast, strong, mini, codex, quick, deep, glm, gpt,
|
|
252
|
+
bronze, silver, gold,
|
|
253
|
+
gpt-bronze, gpt-silver, gpt-gold,
|
|
254
|
+
glm-bronze, glm-silver, glm-gold,
|
|
255
|
+
모든 지원 에이전트 이름
|
|
764
256
|
```
|
|
765
257
|
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
### 지원되는 모델 별칭 키
|
|
769
|
-
|
|
770
|
-
| 별칭 | 용도 |
|
|
771
|
-
|---|---|
|
|
772
|
-
| `fast` | 빠른/저렴한 모델의 프로바이더 중립적 별칭 |
|
|
773
|
-
| `strong` | 강력한/비싼 모델의 프로바이더 중립적 별칭 |
|
|
774
|
-
| `mini` | 미니/효율적 모델의 프로바이더 중립적 별칭 |
|
|
775
|
-
| `codex` | 코덱스 스타일 코딩 모델의 프로바이더 중립적 별칭 (레거시) |
|
|
776
|
-
| `bronze` / `silver` / `gold` | scout / coder / reasoner 3티어 별칭 |
|
|
777
|
-
| `gpt-bronze` / `gpt-silver` / `gpt-gold` | mixed 설정의 GPT/Codex 전용 3티어 별칭 |
|
|
778
|
-
| `glm-bronze` / `glm-silver` / `glm-gold` | mixed 설정의 GLM 전용 3티어 별칭 |
|
|
779
|
-
| `quick` | 레거시 별칭 (`fast`와 동등) |
|
|
780
|
-
| `deep` | 레거시 별칭 (`strong`과 동등) |
|
|
781
|
-
| `glm` | 레거시 별칭 (하위 호환성) |
|
|
782
|
-
| `gpt` | 레거시 별칭 (하위 호환성) |
|
|
783
|
-
|
|
784
|
-
별칭은 `models`에 정의된 경우에만 해석됩니다. 에이전트 이름(`coder`, `resolver` 등)도 유효한 별칭 키입니다.
|
|
785
|
-
|
|
786
|
-
---
|
|
787
|
-
|
|
788
|
-
## 에이전트 참조
|
|
789
|
-
|
|
790
|
-
| 에이전트 | 기본 | 모드 | Edit | Bash | WebFetch | 용도 |
|
|
791
|
-
|---|:---:|---|---|---|---|---|
|
|
792
|
-
| `resolver` | 예 (핵심) | `all` | allow | ask (분류기 라우팅) | allow | 컨텍스트 효율적 오케스트레이터. 작업을 검증된 체크포인트로 분해, coder 디스패치, 각각 검증, 반복 회복 실패 시 차단 사항 보고. |
|
|
793
|
-
| `codex` | 아니오 | `all` | allow | ask (분류기 라우팅) | allow | `resolver`와 같은 검증 resolve-loop 스타일의 Codex 최적화 primary. 레거시 — 새 GPT 설정에서는 `gpt` 권장. |
|
|
794
|
-
| `gpt` | 아니오 | `all` | allow | ask (분류기 라우팅) | allow | `resolver`와 같은 검증 resolve-loop 스타일의 GPT 최적화 primary. 최초 설치 GPT/mix 프리셋 또는 명시 설정으로 활성화. |
|
|
795
|
-
| `glm` | 아니오 | `all` | allow | ask (분류기 라우팅) | allow | `resolver`와 같은 검증 resolve-loop 스타일의 GLM 최적화 primary. 최초 설치 GLM/mix 프리셋 또는 명시 설정으로 활성화. |
|
|
796
|
-
| `coder` | 예 (핵심) | `subagent` | allow | ask (분류기 라우팅) | allow | 집중된 구현자. 가장 작은 올바른 패치. 필요한 파일만 읽음. |
|
|
797
|
-
| `explorer` | 예 (서브에이전트) | `subagent` | **deny** | **deny** | allow | 내부 빠른 코드베이스 스카우트. Resolver가 범위가 불명확할 때만 디스패치; 좁은 범위는 로컬 read/grep/glob 선호. |
|
|
798
|
-
| `reviewer` | 예 (서브에이전트) | `subagent` | **deny** | **deny** | allow | 내부 검증 갭 감사자. 비사소한 변경에 검증 갭이 있을 때 디스패치. |
|
|
799
|
-
| `deep-reviewer` | 예 (서브에이전트) | `subagent` | **deny** | **deny** | allow | 내부 위험/보안/아키텍처 변경에 대한 철저한 리뷰. 고영향도 작업에만 디스패치. |
|
|
800
|
-
| `planner` | 예 (서브에이전트) | `subagent` | **deny** | **deny** | allow | 명시적 계획 전문가. 사용자가 계획/분해/전략을 요청할 때만 디스패치. |
|
|
801
|
-
| `architect` | 아니오 | `subagent` | **deny** | **deny** | allow | 설계 및 작업 분해. |
|
|
802
|
-
| `gpt-coder` | 아니오 | `subagent` | allow | ask (분류기 라우팅) | allow | 더 강력한 추론 구현 폴백. |
|
|
803
|
-
| `debugger` | 아니오 | `subagent` | allow | ask (분류기 라우팅) | allow | 재현 및 근본 원인 분석. |
|
|
804
|
-
| `researcher` | 아니오 | `subagent` | **deny** | **deny** | allow | 코드베이스 및 문서 연구. |
|
|
805
|
-
|
|
806
|
-
쓰기 에이전트의 `bash: ask`는 의도된 값입니다. 플러그인의 `permission.ask` 훅이 알려진 안전 명령은 자동 허용, 위험 명령은 자동 거부, 알 수 없는 명령은 OpenCode/사용자 처리를 위해 남깁니다.
|
|
807
|
-
|
|
808
|
-
지원되는 모드:
|
|
809
|
-
|
|
810
|
-
| 모드 | 의미 |
|
|
811
|
-
|---|---|
|
|
812
|
-
| `subagent` | 서브에이전트로만 사용 가능 |
|
|
813
|
-
| `primary` | 기본 에이전트로 사용 가능 |
|
|
814
|
-
| `all` | 기본 및 서브에이전트 모두로 사용 가능 |
|
|
258
|
+
## 에이전트
|
|
815
259
|
|
|
816
|
-
|
|
260
|
+
| 에이전트 | 기본 | 모드 | Edit | Bash | Web | 역할 |
|
|
261
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
262
|
+
| `resolver` | yes | `all` | allow | ask | allow | 기본 오케스트레이터. |
|
|
263
|
+
| `coder` | yes | `subagent` | allow | ask | allow | 집중 구현과 검증. |
|
|
264
|
+
| `explorer` | yes | `subagent` | deny | deny | allow | 빠른 읽기 전용 코드베이스 탐색. |
|
|
265
|
+
| `reviewer` | yes | `subagent` | deny | deny | allow | 읽기 전용 검증 갭 리뷰. |
|
|
266
|
+
| `deep-reviewer` | yes | `subagent` | deny | deny | allow | 위험/고영향 변경 리뷰. |
|
|
267
|
+
| `planner` | yes | `subagent` | deny | deny | allow | 필요할 때만 읽기 전용 계획. |
|
|
268
|
+
| `gpt` | no | `all` | allow | ask | allow | GPT 최적화 primary resolver. |
|
|
269
|
+
| `glm` | no | `all` | allow | ask | allow | GLM/ZAI 최적화 primary resolver. |
|
|
270
|
+
| `codex` | no | `all` | allow | ask | allow | 레거시 Codex 최적화 primary resolver. |
|
|
271
|
+
| `architect` | no | `subagent` | deny | deny | allow | 설계/분해 보조. |
|
|
272
|
+
| `gpt-coder` | no | `subagent` | allow | ask | allow | 더 강한 구현 보조. |
|
|
273
|
+
| `debugger` | no | `subagent` | allow | ask | allow | 재현/root-cause 보조. |
|
|
274
|
+
| `researcher` | no | `subagent` | deny | deny | allow | 코드베이스/문서 리서치 보조. |
|
|
817
275
|
|
|
818
|
-
|
|
276
|
+
## 권한
|
|
819
277
|
|
|
820
|
-
`
|
|
278
|
+
resolve 에이전트의 bash는 기본적으로 `ask`입니다. 플러그인의 권한 훅은 흔한 읽기/테스트 명령은 자동 허용하고, force push, shell eval injection, remote script pipe 같은 위험 패턴은 거부합니다. 알 수 없는 명령은 계속 `ask`로 남습니다.
|
|
821
279
|
|
|
822
|
-
|
|
280
|
+
`autoApprove`는 오래된 설정과의 호환을 위해 허용되지만, 현재 동작은 명시적 에이전트 권한과 명령 분류기가 제어합니다.
|
|
823
281
|
|
|
824
|
-
|
|
282
|
+
신뢰할 수 없는 저장소에서는 샌드박스나 VM을 사용하세요.
|
|
825
283
|
|
|
826
|
-
|
|
827
|
-
- **관련 파일만 검사** — 로컬 도구 사용, 광범위한 탐색 지양.
|
|
828
|
-
- 사소한 작업은 직접 편집 적용 — 서브에이전트 불필요.
|
|
829
|
-
- 집중된 파일/동작 지시와 함께 **coder** 디스패치.
|
|
830
|
-
- **가장 저렴한 의미 있는 검증**을 먼저 실행.
|
|
831
|
-
- 문제가 남아있으면 검증 로그에서 재시도; 검증 실패 시 근본 원인을 진단한 뒤 다른 수정 지시로 coder를 다시 디스패치.
|
|
832
|
-
- 연속 실패가 누적되면 완료를 주장하지 않고 차단 사항을 보고; 전체 실패가 많아지면 `architect`로 전략을 전환.
|
|
833
|
-
- 범위가 불명확하고 로컬 read/grep/glob이 불충분할 때만 **explorer** 사용 (내부 서브에이전트, 핵심 경로 아님).
|
|
834
|
-
- 비사소한 변경에 검증 갭이 있을 때만 **reviewer** 사용 (내부 서브에이전트, 핵심 경로 아님).
|
|
835
|
-
- 위험, 보안, 아키텍처, 고영향도 변경에만 **deep-reviewer** 사용 (내부 서브에이전트, 핵심 경로 아님).
|
|
836
|
-
- 해결되거나 차단되면 간결한 증거 요약 반환.
|
|
837
|
-
- `maxParallelSubagents` 역할별 제한을 컨텍스트 효율을 위해 준수.
|
|
284
|
+
## 병렬 서브에이전트
|
|
838
285
|
|
|
839
|
-
|
|
286
|
+
`maxParallelSubagents`는 선택 사항입니다. 생략하면 resolver는 soft guidance를 사용합니다. 진짜 독립적인 작업에만 coder를 분산하고, rate limit이 보이면 backoff합니다.
|
|
840
287
|
|
|
841
|
-
|
|
288
|
+
값을 설정하면 resolver 프롬프트에 삽입됩니다. 런타임 semaphore는 아닙니다. 변경 후 OpenCode를 재시작하세요. `agents.resolver.prompt`를 직접 지정하면 템플릿된 규칙은 대체됩니다.
|
|
842
289
|
|
|
843
|
-
|
|
290
|
+
## Context7
|
|
844
291
|
|
|
845
|
-
|
|
846
|
-
|---|---|
|
|
847
|
-
| `resolve` | 현재 작업에 대해 `resolver` 에이전트를 엔드투엔드로 실행 |
|
|
848
|
-
| `resolve-code` | 집중된 구현을 위해 `coder` 에이전트를 실행 |
|
|
849
|
-
| `resolve-review` | 읽기 전용 감사를 위해 `reviewer` 에이전트를 실행 |
|
|
850
|
-
|
|
851
|
-
---
|
|
852
|
-
|
|
853
|
-
## Context7 통합
|
|
854
|
-
|
|
855
|
-
`context7: true` (기본값)인 경우, 플러그인이 시작 시 [Context7](https://context7.com) MCP 서버를 자동으로 등록합니다:
|
|
292
|
+
`context7: true`이면 `mcp.context7`이 없을 때 Context7 MCP를 등록합니다.
|
|
856
293
|
|
|
857
294
|
```json
|
|
858
295
|
{
|
|
859
|
-
"
|
|
860
|
-
|
|
296
|
+
"mcp": {
|
|
297
|
+
"context7": {
|
|
298
|
+
"type": "remote",
|
|
299
|
+
"url": "https://mcp.context7.com/mcp"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
861
302
|
}
|
|
862
303
|
```
|
|
863
304
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
Context7 등록을 비활성화하려면 (예: 이미 구성되어 있거나 원하지 않는 경우):
|
|
305
|
+
끄려면:
|
|
867
306
|
|
|
868
307
|
```json
|
|
869
|
-
{
|
|
870
|
-
"context7": false
|
|
871
|
-
}
|
|
308
|
+
{ "context7": false }
|
|
872
309
|
```
|
|
873
310
|
|
|
874
|
-
|
|
311
|
+
## 프로젝트 컨텍스트
|
|
875
312
|
|
|
876
|
-
|
|
313
|
+
플러그인은 repo 전체를 프롬프트에 밀어 넣지 않고, 커밋된 프로젝트 컨텍스트 위치만 노출합니다. 감지 대상:
|
|
877
314
|
|
|
878
|
-
|
|
315
|
+
- `HARNESS.md`
|
|
316
|
+
- `AGENTS.md`
|
|
317
|
+
- `.opencode/context`
|
|
318
|
+
- `.claude/context`
|
|
319
|
+
- `context/`
|
|
320
|
+
- `thoughts/`
|
|
321
|
+
- package manager와 흔한 검증 명령
|
|
322
|
+
- TypeScript 프로젝트 여부
|
|
879
323
|
|
|
880
|
-
|
|
324
|
+
resolver는 관련 있는 컨텍스트 문서만 읽도록 지시받습니다.
|
|
881
325
|
|
|
882
|
-
|
|
883
|
-
# npm을 통한 업그레이드
|
|
884
|
-
npm install -g opencode-resolve@latest
|
|
885
|
-
|
|
886
|
-
# OpenCode 캐시 새로고침
|
|
887
|
-
opencode plugin opencode-resolve --global --force
|
|
888
|
-
|
|
889
|
-
# OpenCode 재시작
|
|
890
|
-
```
|
|
891
|
-
|
|
892
|
-
그래도 버전이 바뀌지 않으면 OpenCode가 패키지 캐시를 재사용하는 상태입니다. 해당 플러그인 캐시 항목만 hard refresh 하세요:
|
|
893
|
-
|
|
894
|
-
Linux/macOS:
|
|
326
|
+
## 업그레이드
|
|
895
327
|
|
|
896
328
|
```sh
|
|
897
|
-
|
|
898
|
-
rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
|
|
329
|
+
npm install -g opencode-resolve@latest
|
|
899
330
|
opencode plugin opencode-resolve@latest --global --force
|
|
900
|
-
node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
|
|
901
331
|
```
|
|
902
332
|
|
|
903
|
-
|
|
333
|
+
특정 버전을 `opencode.json`에서 고정하고 해당 버전 캐시를 새로고침합니다.
|
|
904
334
|
|
|
905
|
-
```
|
|
906
|
-
|
|
907
|
-
$PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
|
|
908
|
-
Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
|
|
909
|
-
opencode plugin opencode-resolve@latest --global --force
|
|
910
|
-
$Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
|
|
911
|
-
node -e "console.log(require(process.argv[1]).version)" $Pkg
|
|
335
|
+
```json
|
|
336
|
+
{ "plugin": ["opencode-resolve@<version>"] }
|
|
912
337
|
```
|
|
913
338
|
|
|
914
|
-
업그레이드 후 `postinstall`이 `resolve.json`에 추가적 마이그레이션을 실행합니다 — 새 키가 추가되고, 기존 키는 절대 수정되지 않습니다.
|
|
915
|
-
|
|
916
|
-
### 특정 버전 고정
|
|
917
|
-
|
|
918
339
|
```sh
|
|
919
|
-
|
|
920
|
-
opencode plugin opencode-resolve --global --force
|
|
340
|
+
opencode plugin opencode-resolve@<version> --global --force
|
|
921
341
|
```
|
|
922
342
|
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
## 로컬 개발
|
|
926
|
-
|
|
927
|
-
이 저장소에서:
|
|
343
|
+
## 개발
|
|
928
344
|
|
|
929
345
|
```sh
|
|
930
346
|
npm install
|
|
931
|
-
npm run hooks:install
|
|
932
|
-
npm test
|
|
933
|
-
npm run install:local
|
|
934
|
-
```
|
|
935
|
-
|
|
936
|
-
`install:local`은 플러그인을 빌드하고, OpenCode 전역 플러그인 디렉토리에 링크하며, `~/.config/opencode/resolve.json`이 없으면 생성합니다.
|
|
937
|
-
|
|
938
|
-
`hooks:install`은 이 checkout의 `core.hooksPath`를 `.githooks`로 설정합니다. 추적되는 훅은 의도적으로 빡세게 동작합니다:
|
|
939
|
-
|
|
940
|
-
| 훅 | 게이트 |
|
|
941
|
-
|---|---|
|
|
942
|
-
| `pre-commit` | `npm run typecheck`, `npm test`, `npm run coverage` |
|
|
943
|
-
| `pre-push` | 전체 `pre-commit` 게이트와 `npm pack --dry-run`을 통과해야 원격에 반영 |
|
|
944
|
-
|
|
945
|
-
수동 로컬 설치:
|
|
946
|
-
|
|
947
|
-
```sh
|
|
948
347
|
npm run build
|
|
949
|
-
|
|
950
|
-
|
|
348
|
+
npm test
|
|
349
|
+
npm run coverage
|
|
951
350
|
```
|
|
952
351
|
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
---
|
|
956
|
-
|
|
957
|
-
## 검증
|
|
958
|
-
|
|
959
|
-
일반 검사 실행:
|
|
352
|
+
이 checkout을 로컬 설치:
|
|
960
353
|
|
|
961
354
|
```sh
|
|
962
|
-
npm run
|
|
963
|
-
npm test
|
|
964
|
-
npm run coverage
|
|
965
|
-
npm run build
|
|
355
|
+
npm run install:local
|
|
966
356
|
```
|
|
967
357
|
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
게시 전:
|
|
358
|
+
Git hook:
|
|
971
359
|
|
|
972
360
|
```sh
|
|
973
|
-
npm run
|
|
974
|
-
npm test
|
|
975
|
-
npm run coverage
|
|
976
|
-
npm audit --audit-level=moderate
|
|
977
|
-
npm publish --dry-run
|
|
361
|
+
npm run hooks:install
|
|
978
362
|
```
|
|
979
363
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
---
|
|
364
|
+
테스트는 에이전트 주입, 설정 로딩, 모델 별칭, 권한, 선택적 명령어, Context7 보존, 네이티브 에이전트 보존, postinstall 동작을 검증합니다.
|
|
983
365
|
|
|
984
366
|
## 릴리스
|
|
985
367
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
| 시크릿 | 설명 |
|
|
991
|
-
|---|---|
|
|
992
|
-
| `NPM_TOKEN` | 게시 권한이 있는 npm 자동화 토큰 |
|
|
993
|
-
|
|
994
|
-
태그 릴리스 흐름:
|
|
368
|
+
1. `package.json` 버전을 올립니다.
|
|
369
|
+
2. `npm run prepush`를 실행합니다.
|
|
370
|
+
3. 커밋하고 태그를 푸시합니다.
|
|
995
371
|
|
|
996
372
|
```sh
|
|
997
|
-
|
|
998
|
-
git
|
|
373
|
+
git add package.json package-lock.json README.md README.ko.md
|
|
374
|
+
git commit -m "release: vX.Y.Z"
|
|
375
|
+
git tag vX.Y.Z
|
|
376
|
+
git push origin main --tags
|
|
999
377
|
```
|
|
1000
378
|
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
릴리스 워크플로우는 `npm ci`, `npm run typecheck`, `npm test`, `npm publish --access public --provenance`를 실행합니다.
|
|
1004
|
-
|
|
1005
|
-
---
|
|
379
|
+
publish workflow가 테스트 후 npm에 배포합니다.
|
|
1006
380
|
|
|
1007
381
|
## 설계 규칙
|
|
1008
382
|
|
|
1009
|
-
- 네이티브
|
|
1010
|
-
-
|
|
1011
|
-
-
|
|
1012
|
-
-
|
|
1013
|
-
-
|
|
1014
|
-
- Resolver는 위험, 보안, 아키텍처, 고영향도 변경에만 `deep-reviewer` 디스패치.
|
|
1015
|
-
- Reviewer와 deep-reviewer는 읽기 전용 — 수정은 항상 `coder` 또는 `resolver`를 거침.
|
|
1016
|
-
- 반복 검증 실패는 진단, 다른 수정 전략, 차단 사항 보고로 이어져야 함. 대규모 작업은 검증된 체크포인트로 분해됨.
|
|
1017
|
-
- Resolver는 컨텍스트 효율을 위해 `maxParallelSubagents`를 준수.
|
|
1018
|
-
- 편집 전에 검색하고 검사. 가장 작은 올바른 변경. 실용적인 경우 검증.
|
|
1019
|
-
- 필요한 파일만 읽음. 광범위한 탐색 지양. 대상 검증, 전체 스위트 아님.
|
|
1020
|
-
|
|
1021
|
-
---
|
|
383
|
+
- OpenCode 네이티브 에이전트를 기본적으로 대체하지 않습니다.
|
|
384
|
+
- 기본 설정은 작게 유지합니다.
|
|
385
|
+
- bash 권한은 보수적으로 유지합니다.
|
|
386
|
+
- 마이그레이션은 추가적으로만 수행합니다.
|
|
387
|
+
- 명확한 이점이 없으면 런타임 의존성을 늘리지 않습니다.
|
|
1022
388
|
|
|
1023
389
|
## 라이선스
|
|
1024
390
|
|
|
1025
|
-
|
|
391
|
+
MIT
|