summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/zh-tw/commands.mdx
blob: 88069e27196f9846e8a6b05e5e316b0d0554e162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
---
title: 指令
description: 為重複任務建立自定義指令。
---

自定義指令允許您指定在 TUI 中執行該指令時要執行的提示。

```bash frame="none"
/my-command
```

除了 `/init`、`/undo`、`/redo`、`/share`、`/help` 等內建指令之外,還有自定義指令。 [了解更多](/docs/tui#commands)。

---

## 建立指令檔案

在 `commands/` 目錄中建立 markdown 檔案來定義自定義指令。

建立 `.opencode/commands/test.md`:

```md title=".opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---

Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```

frontmatter 定義指令屬性。內容成為範本。

透過輸入 `/` 後跟指令名稱來使用該指令。

```bash frame="none"
"/test"
```

---

## 設定

您 可以透過 opencode 設定或透過在 `commands/` 目錄中建立 markdown 檔案來新增自定義指令。

---

### JSON

在 opencode [設定](/docs/config) 中使用 `command` 選項:

```json title="opencode.jsonc" {4-12}
{
  "$schema": "https://opencode.ai/config.json",
  "command": {
    // This becomes the name of the command
    "test": {
      // This is the prompt that will be sent to the LLM
      "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
      // This is shown as the description in the TUI
      "description": "Run tests with coverage",
      "agent": "build",
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}
```

現在您可以在 TUI 中執行此指令:

```bash frame="none"
/test
```

---

### Markdown

您也可以使用 Markdown 檔案定義指令。將它們放入:

- 全域:`~/.config/opencode/commands/`
- 每個專案:`.opencode/commands/`

```markdown title="~/.config/opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---

Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```

Markdown 檔名成為指令名。例如,`test.md` 讓您執行:

```bash frame="none"
/test
```

---

## 提示設定

自定義指令的提示支援幾個特殊的預留位置和語法。

---

### 參數 (Arguments)

使用 `$ARGUMENTS` 預留位置將參數傳遞給指令。

```md title=".opencode/commands/component.md"
---
description: Create a new component
---

Create a new React component named $ARGUMENTS with TypeScript support.
Include proper typing and basic structure.
```

使用參數執行指令:

```bash frame="none"
/component Button
```

`$ARGUMENTS` 將替換為 `Button`。

您也可以使用位置參數存取各個參數:

- `$1` - 第一個參數
- `$2` - 第二個參數
- `$3` - 第三個參數
- 等等...

例如:

```md title=".opencode/commands/create-file.md"
---
description: Create a new file with content
---

Create a file named $1 in the directory $2
with the following content: $3
```

執行指令:

```bash frame="none"
/create-file config.json src "{ \"key\": \"value\" }"
```

這取代了:

- `$1` 與 `config.json`
- `$2` 與 `src`
- `$3` 與 `{ "key": "value" }`

---

### Shell 輸出

使用 _!`command`_ 將 [bash 指令](/docs/tui#bash-commands) 輸出注入到提示中。

例如,要建立分析測試覆蓋率的自定義指令:

```md title=".opencode/commands/analyze-coverage.md"
---
description: Analyze test coverage
---

Here are the current test results:
!`npm test`

Based on these results, suggest improvements to increase coverage.
```

或者查看最近的變更:

```md title=".opencode/commands/review-changes.md"
---
description: Review recent changes
---

Recent git commits:
!`git log --oneline -10`

Review these changes and suggest any improvements.
```

指令在專案的根目錄中執行,其輸出成為提示的一部分。

---

### 檔案參考

使用 `@` 後跟檔名將檔案包含在指令中。

```md title=".opencode/commands/review-component.md"
---
description: Review component
---

Review the component in @src/components/Button.tsx.
Check for performance issues and suggest improvements.
```

檔案內容會自動包含在提示中。

---

## 選項

讓我們詳細看看設定選項。

---

### 範本 (Template)

`template` 選項定義執行指令時將發送到 LLM 的提示。

```json title="opencode.json"
{
  "command": {
    "test": {
      "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
    }
  }
}
```

這是一個**必需的**設定選項。

---

### 描述 (Description)

使用 `description` 選項提供指令功能的簡要描述。

```json title="opencode.json"
{
  "command": {
    "test": {
      "description": "Run tests with coverage"
    }
  }
}
```

當您輸入指令時,這將在 TUI 中顯示為描述。

---

### 代理 (Agent)

使用 `agent` 設定可選擇指定哪個 [代理](/docs/agents) 應執行此指令。
如果這是 [子代理](/docs/agents/#subagents),該指令將預設觸發子代理呼叫。
要禁用此行為,請將 `subtask` 設定為 `false`。

```json title="opencode.json"
{
  "command": {
    "review": {
      "agent": "plan"
    }
  }
}
```

這是一個**可選**設定選項。如果未指定,則預設為您當前的代理。

---

### 子任務 (Subtask)

使用 `subtask` 布林值強制指令觸發 [子代理](/docs/agents/#subagents) 呼叫。
如果您希望指令不污染您的主要上下文並且將**強制**代理充當子代理,那麼這非常有用,
即使 `mode` 在 [代理](/docs/agents) 設定上設定為 `primary`。

```json title="opencode.json"
{
  "command": {
    "analyze": {
      "subtask": true
    }
  }
}
```

這是一個**可選**設定選項。

---

### 模型 (Model)

使用 `model` 設定覆寫此指令的預設模型。

```json title="opencode.json"
{
  "command": {
    "analyze": {
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}
```

這是一個**可選**設定選項。

---

### 內建

opencode 包含 `/init`、`/undo`、`/redo`、`/share`、`/help` 等內建指令; [了解更多](/docs/tui#commands)。

:::note
自定義指令可以覆寫內建指令。
:::

如果您定義同名的自定義指令,它將覆寫內建指令。