chore: initialize qiming workspace repository
This commit is contained in:
156
qimingcode/packages/web/src/content/docs/acp.mdx
Normal file
156
qimingcode/packages/web/src/content/docs/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: ACP Support
|
||||
description: Use OpenCode in any ACP-compatible editor.
|
||||
---
|
||||
|
||||
OpenCode supports the [Agent Client Protocol](https://agentclientprotocol.com) or (ACP), allowing you to use it directly in compatible editors and IDEs.
|
||||
|
||||
:::tip
|
||||
For a list of editors and tools that support ACP, check out the [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP is an open protocol that standardizes communication between code editors and AI coding agents.
|
||||
|
||||
---
|
||||
|
||||
## Configure
|
||||
|
||||
To use OpenCode via ACP, configure your editor to run the `opencode acp` command.
|
||||
|
||||
The command starts OpenCode as an ACP-compatible subprocess that communicates with your editor over JSON-RPC via stdio.
|
||||
|
||||
Below are examples for popular editors that support ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
Add to your [Zed](https://zed.dev) configuration (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
To open it, use the `agent: new thread` action in the **Command Palette**.
|
||||
|
||||
You can also bind a keyboard shortcut by editing your `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDEs
|
||||
|
||||
Add to your [JetBrains IDE](https://www.jetbrains.com/) acp.json according to the [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
To open it, use the new 'OpenCode' agent in the AI Chat agent selector.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
Add to your [Avante.nvim](https://github.com/yetone/avante.nvim) configuration:
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you need to pass environment variables:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
To use OpenCode as an ACP agent in [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), add the following to your Neovim config:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
This config sets up CodeCompanion to use OpenCode as the ACP agent for chat.
|
||||
|
||||
If you need to pass environment variables (like `OPENCODE_API_KEY`), refer to [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) in the CodeCompanion.nvim documentation for full details.
|
||||
|
||||
## Support
|
||||
|
||||
OpenCode works the same via ACP as it does in the terminal. All features are supported:
|
||||
|
||||
:::note
|
||||
Some built-in slash commands like `/undo` and `/redo` are currently unsupported.
|
||||
:::
|
||||
|
||||
- Built-in tools (file operations, terminal commands, etc.)
|
||||
- Custom tools and slash commands
|
||||
- MCP servers configured in your OpenCode config
|
||||
- Project-specific rules from `AGENTS.md`
|
||||
- Custom formatters and linters
|
||||
- Agents and permissions system
|
||||
774
qimingcode/packages/web/src/content/docs/agents.mdx
Normal file
774
qimingcode/packages/web/src/content/docs/agents.mdx
Normal file
@@ -0,0 +1,774 @@
|
||||
---
|
||||
title: Agents
|
||||
description: Configure and use specialized agents.
|
||||
---
|
||||
|
||||
Agents are specialized AI assistants that can be configured for specific tasks and workflows. They allow you to create focused tools with custom prompts, models, and tool access.
|
||||
|
||||
:::tip
|
||||
Use the plan agent to analyze code and review suggestions without making any code changes.
|
||||
:::
|
||||
|
||||
You can switch between agents during a session or invoke them with the `@` mention.
|
||||
|
||||
---
|
||||
|
||||
## Types
|
||||
|
||||
There are two types of agents in OpenCode; primary agents and subagents.
|
||||
|
||||
---
|
||||
|
||||
### Primary agents
|
||||
|
||||
Primary agents are the main assistants you interact with directly. You can cycle through them using the **Tab** key, or your configured `switch_agent` keybind. These agents handle your main conversation. Tool access is configured via permissions — for example, Build has all tools enabled while Plan is restricted.
|
||||
|
||||
:::tip
|
||||
You can use the **Tab** key to switch between primary agents during a session.
|
||||
:::
|
||||
|
||||
OpenCode comes with two built-in primary agents, **Build** and **Plan**. We'll
|
||||
look at these below.
|
||||
|
||||
---
|
||||
|
||||
### Subagents
|
||||
|
||||
Subagents are specialized assistants that primary agents can invoke for specific tasks. You can also manually invoke them by **@ mentioning** them in your messages.
|
||||
|
||||
OpenCode comes with two built-in subagents, **General** and **Explore**. We'll look at this below.
|
||||
|
||||
---
|
||||
|
||||
## Built-in
|
||||
|
||||
OpenCode comes with two built-in primary agents and two built-in subagents.
|
||||
|
||||
---
|
||||
|
||||
### Use build
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Build is the **default** primary agent with all tools enabled. This is the standard agent for development work where you need full access to file operations and system commands.
|
||||
|
||||
---
|
||||
|
||||
### Use plan
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
A restricted agent designed for planning and analysis. We use a permission system to give you more control and prevent unintended changes.
|
||||
By default, all of the following are set to `ask`:
|
||||
|
||||
- `file edits`: All writes, patches, and edits
|
||||
- `bash`: All bash commands
|
||||
|
||||
This agent is useful when you want the LLM to analyze code, suggest changes, or create plans without making any actual modifications to your codebase.
|
||||
|
||||
---
|
||||
|
||||
### Use general
|
||||
|
||||
_Mode_: `subagent`
|
||||
|
||||
A general-purpose agent for researching complex questions and executing multi-step tasks. Has full tool access (except todo), so it can make file changes when needed. Use this to run multiple units of work in parallel.
|
||||
|
||||
---
|
||||
|
||||
### Use explore
|
||||
|
||||
_Mode_: `subagent`
|
||||
|
||||
A fast, read-only agent for exploring codebases. Cannot modify files. Use this when you need to quickly find files by patterns, search code for keywords, or answer questions about the codebase.
|
||||
|
||||
---
|
||||
|
||||
### Use compaction
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Hidden system agent that compacts long context into a smaller summary. It runs automatically when needed and is not selectable in the UI.
|
||||
|
||||
---
|
||||
|
||||
### Use title
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Hidden system agent that generates short session titles. It runs automatically and is not selectable in the UI.
|
||||
|
||||
---
|
||||
|
||||
### Use summary
|
||||
|
||||
_Mode_: `primary`
|
||||
|
||||
Hidden system agent that creates session summaries. It runs automatically and is not selectable in the UI.
|
||||
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
||||
1. For primary agents, use the **Tab** key to cycle through them during a session. You can also use your configured `switch_agent` keybind.
|
||||
|
||||
2. Subagents can be invoked:
|
||||
- **Automatically** by primary agents for specialized tasks based on their descriptions.
|
||||
- Manually by **@ mentioning** a subagent in your message. For example.
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **Navigation between sessions**: When subagents create child sessions, use `session_child_first` (default: **\<Leader>+Down**) to enter the first child session from the parent.
|
||||
|
||||
4. Once you are in a child session, use:
|
||||
- `session_child_cycle` (default: **Right**) to cycle to the next child session
|
||||
- `session_child_cycle_reverse` (default: **Left**) to cycle to the previous child session
|
||||
- `session_parent` (default: **Up**) to return to the parent session
|
||||
|
||||
This lets you switch between the main conversation and specialized subagent work.
|
||||
|
||||
---
|
||||
|
||||
## Configure
|
||||
|
||||
You can customize the built-in agents or create your own through configuration. Agents can be configured in two ways:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Configure agents in your `opencode.json` config file:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"permission": {
|
||||
"edit": "allow",
|
||||
"bash": "allow"
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "deny"
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
You can also define agents using markdown files. Place them in:
|
||||
|
||||
- Global: `~/.config/opencode/agents/`
|
||||
- Per-project: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
permission:
|
||||
edit: deny
|
||||
bash: deny
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
The markdown file name becomes the agent name. For example, `review.md` creates a `review` agent.
|
||||
|
||||
---
|
||||
|
||||
## Options
|
||||
|
||||
Let's look at these configuration options in detail.
|
||||
|
||||
---
|
||||
|
||||
### Description
|
||||
|
||||
Use the `description` option to provide a brief description of what the agent does and when to use it.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is a **required** config option.
|
||||
|
||||
---
|
||||
|
||||
### Temperature
|
||||
|
||||
Control the randomness and creativity of the LLM's responses with the `temperature` config.
|
||||
|
||||
Lower values make responses more focused and deterministic, while higher values increase creativity and variability.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Temperature values typically range from 0.0 to 1.0:
|
||||
|
||||
- **0.0-0.2**: Very focused and deterministic responses, ideal for code analysis and planning
|
||||
- **0.3-0.5**: Balanced responses with some creativity, good for general development tasks
|
||||
- **0.6-1.0**: More creative and varied responses, useful for brainstorming and exploration
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If no temperature is specified, OpenCode uses model-specific defaults; typically 0 for most models, 0.55 for Qwen models.
|
||||
|
||||
---
|
||||
|
||||
### Max steps
|
||||
|
||||
Control the maximum number of agentic iterations an agent can perform before being forced to respond with text only. This allows users who wish to control costs to set a limit on agentic actions.
|
||||
|
||||
If this is not set, the agent will continue to iterate until the model chooses to stop or the user interrupts the session.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When the limit is reached, the agent receives a special system prompt instructing it to respond with a summarization of its work and recommended remaining tasks.
|
||||
|
||||
:::caution
|
||||
The legacy `maxSteps` field is deprecated. Use `steps` instead.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Disable
|
||||
|
||||
Set to `true` to disable the agent.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Specify a custom system prompt file for this agent with the `prompt` config. The prompt file should contain instructions specific to the agent's purpose.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This path is relative to where the config file is located. So this works for both the global OpenCode config and the project specific config.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Use the `model` config to override the model for this agent. Useful for using different models optimized for different tasks. For example, a faster model for planning, a more capable model for implementation.
|
||||
|
||||
:::tip
|
||||
If you don’t specify a model, primary agents use the [model globally configured](/docs/config#models) while subagents will use the model of the primary agent that invoked the subagent.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The model ID in your OpenCode config uses the format `provider/model-id`. For example, if you're using [OpenCode Zen](/docs/zen), you would use `opencode/gpt-5.1-codex` for GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### Tools (deprecated)
|
||||
|
||||
`tools` is **deprecated**. Prefer the agent's [`permission`](#permissions) field for new configs, updates and more fine-grained control.
|
||||
|
||||
Allows you to control which tools are available in this agent. You can enable or disable specific tools by setting them to `true` or `false`. In an agent's `tools` config, `true` is equivalent to `{"*": "allow"}` permission and `false` is equivalent to `{"*": "deny"}` permission.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
The agent-specific config overrides the global config.
|
||||
:::
|
||||
|
||||
You can also use wildcards in legacy `tools` entries to control multiple tools at once. For example, to disable all tools from an MCP server:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about tools](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Permissions
|
||||
|
||||
You can configure permissions to manage what actions an agent can take. Each permission key can be set to:
|
||||
|
||||
- `"ask"` — Prompt for approval before running the tool
|
||||
- `"allow"` — Allow all operations without approval
|
||||
- `"deny"` — Disable the tool
|
||||
|
||||
The available permission keys are:
|
||||
|
||||
| Key | Tools it gates |
|
||||
| -------------------- | ---------------------------------------------------------------- |
|
||||
| `read` | `read` |
|
||||
| `edit` | `write`, `edit`, `apply_patch` |
|
||||
| `glob` | `glob` |
|
||||
| `grep` | `grep` |
|
||||
| `list` | `list` |
|
||||
| `bash` | `bash` |
|
||||
| `task` | `task` |
|
||||
| `external_directory` | Any tool that reads or writes files outside the project worktree |
|
||||
| `todowrite` | `todowrite`, `todoread` |
|
||||
| `webfetch` | `webfetch` |
|
||||
| `websearch` | `websearch` |
|
||||
| `codesearch` | `codesearch` |
|
||||
| `lsp` | `lsp` |
|
||||
| `skill` | `skill` |
|
||||
| `question` | `question` |
|
||||
| `doom_loop` | Recovery prompts when an agent appears stuck |
|
||||
|
||||
`read`, `edit`, `glob`, `grep`, `list`, `bash`, `task`, `external_directory`, `lsp`, and `skill` accept either a shorthand action (`"allow" | "ask" | "deny"`) or an object of glob/pattern → action for fine-grained control. The remaining keys accept the shorthand action only.
|
||||
|
||||
:::note
|
||||
Permission keys are matched as wildcard patterns against the underlying tool name, so the same syntax works for built-ins, custom tools, and MCP tools — for example `"mymcp_*": "deny"` denies every tool from an MCP server, and `"mymcp_search": "ask"` targets a single one.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can override these permissions per agent.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can also set permissions in Markdown agents.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
You can set permissions for specific bash commands.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This can take a glob pattern.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
And you can also use the `*` wildcard to manage permissions for all commands.
|
||||
Since the last matching rule takes precedence, put the `*` wildcard first and specific rules after.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about permissions](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Mode
|
||||
|
||||
Control the agent's mode with the `mode` config. The `mode` option is used to determine how the agent can be used.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The `mode` option can be set to `primary`, `subagent`, or `all`. If no `mode` is specified, it defaults to `all`.
|
||||
|
||||
---
|
||||
|
||||
### Hidden
|
||||
|
||||
Hide a subagent from the `@` autocomplete menu with `hidden: true`. Useful for internal subagents that should only be invoked programmatically by other agents via the Task tool.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This only affects user visibility in the autocomplete menu. Hidden agents can still be invoked by the model via the Task tool if permissions allow.
|
||||
|
||||
:::note
|
||||
Only applies to `mode: subagent` agents.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Task permissions
|
||||
|
||||
Control which subagents an agent can invoke via the Task tool with `permission.task`. Uses glob patterns for flexible matching.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When set to `deny`, the subagent is removed from the Task tool description entirely, so the model won't attempt to invoke it.
|
||||
|
||||
:::tip
|
||||
Rules are evaluated in order, and the **last matching rule wins**. In the example above, `orchestrator-planner` matches both `*` (deny) and `orchestrator-*` (allow), but since `orchestrator-*` comes after `*`, the result is `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Users can always invoke any subagent directly via the `@` autocomplete menu, even if the agent's task permissions would deny it.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Color
|
||||
|
||||
Customize the agent's visual appearance in the UI with the `color` option. This affects how the agent appears in the interface.
|
||||
|
||||
Use a valid hex color (e.g., `#FF5733`) or theme color: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
Control response diversity with the `top_p` option. Alternative to temperature for controlling randomness.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Values range from 0.0 to 1.0. Lower values are more focused, higher values more diverse.
|
||||
|
||||
---
|
||||
|
||||
### Additional
|
||||
|
||||
Any other options you specify in your agent configuration will be **passed through directly** to the provider as model options. This allows you to use provider-specific features and parameters.
|
||||
|
||||
For example, with OpenAI's reasoning models, you can control the reasoning effort:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
These additional options are model and provider-specific. Check your provider's documentation for available parameters.
|
||||
|
||||
:::tip
|
||||
Run `opencode models` to see a list of the available models.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Create agents
|
||||
|
||||
You can create new agents using the following command:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
This interactive command will:
|
||||
|
||||
1. Ask where to save the agent; global or project-specific.
|
||||
2. Description of what the agent should do.
|
||||
3. Generate an appropriate system prompt and identifier.
|
||||
4. Let you select which permissions the agent should be allowed (anything you don't select is denied).
|
||||
5. Finally, create a markdown file with the agent configuration.
|
||||
|
||||
---
|
||||
|
||||
## Use cases
|
||||
|
||||
Here are some common use cases for different agents.
|
||||
|
||||
- **Build agent**: Full development work with all tools enabled
|
||||
- **Plan agent**: Analysis and planning without making changes
|
||||
- **Review agent**: Code review with read-only access plus documentation tools
|
||||
- **Debug agent**: Focused on investigation with bash and read tools enabled
|
||||
- **Docs agent**: Documentation writing with file operations but no system commands
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
Here are some example agents you might find useful.
|
||||
|
||||
:::tip
|
||||
Do you have an agent you'd like to share? [Submit a PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Documentation agent
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
permission:
|
||||
bash: deny
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Security auditor
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
156
qimingcode/packages/web/src/content/docs/ar/acp.mdx
Normal file
156
qimingcode/packages/web/src/content/docs/ar/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: دعم ACP
|
||||
description: استخدم OpenCode في أي محرر متوافق مع ACP.
|
||||
---
|
||||
|
||||
يدعم OpenCode بروتوكول [Agent Client Protocol](https://agentclientprotocol.com) أو (ACP)، مما يتيح لك استخدامه مباشرة في المحررات وبيئات التطوير المتكاملة (IDEs) المتوافقة.
|
||||
|
||||
:::tip
|
||||
للاطلاع على قائمة بالمحررات والأدوات التي تدعم ACP، راجع [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP بروتوكول مفتوح يوحّد آلية التواصل بين محررات الشيفرة ووكلاء البرمجة بالذكاء الاصطناعي.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
لاستخدام OpenCode عبر ACP، اضبط محررك ليشغّل الأمر `opencode acp`.
|
||||
|
||||
يشغّل هذا الأمر OpenCode كعملية فرعية متوافقة مع ACP تتواصل مع محررك عبر JSON-RPC باستخدام stdio.
|
||||
|
||||
فيما يلي أمثلة لمحررات شائعة تدعم ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
أضف إلى إعدادات [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
لفتحه، استخدم الإجراء `agent: new thread` في **Command Palette**.
|
||||
|
||||
يمكنك أيضا ربط اختصار لوحة مفاتيح عبر تعديل `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDEs
|
||||
|
||||
أضف إلى ملف acp.json الخاص بـ [JetBrains IDE](https://www.jetbrains.com/) وفقا لـ [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
لفتحه، اختر الوكيل الجديد 'OpenCode' من محدد الوكلاء في AI Chat.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
أضف إلى إعدادات [Avante.nvim](https://github.com/yetone/avante.nvim):
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا احتجت إلى تمرير متغيرات البيئة:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
لاستخدام OpenCode كوكيل ACP في [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim)، أضف التالي إلى إعدادات Neovim:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
يضبط هذا الإعداد CodeCompanion لاستخدام OpenCode كوكيل ACP للدردشة.
|
||||
|
||||
إذا احتجت إلى تمرير متغيرات البيئة (مثل `OPENCODE_API_KEY`)، فارجع إلى [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) ضمن توثيق CodeCompanion.nvim للاطلاع على التفاصيل كاملة.
|
||||
|
||||
## الدعم
|
||||
|
||||
يعمل OpenCode عبر ACP بالطريقة نفسها التي يعمل بها في terminal. جميع الميزات مدعومة:
|
||||
|
||||
:::note
|
||||
بعض أوامر الشرطة المائلة المضمنة مثل `/undo` و`/redo` غير مدعومة حاليا.
|
||||
:::
|
||||
|
||||
- الأدوات المضمنة (عمليات الملفات، أوامر terminal، إلخ.)
|
||||
- الأدوات المخصصة وأوامر الشرطة المائلة
|
||||
- خوادم MCP المضبوطة في إعدادات OpenCode
|
||||
- قواعد خاصة بالمشروع من `AGENTS.md`
|
||||
- المنسقات (formatters) والمدققات (linters) المخصصة
|
||||
- نظام الوكلاء والأذونات
|
||||
746
qimingcode/packages/web/src/content/docs/ar/agents.mdx
Normal file
746
qimingcode/packages/web/src/content/docs/ar/agents.mdx
Normal file
@@ -0,0 +1,746 @@
|
||||
---
|
||||
title: الوكلاء
|
||||
description: هيّئ الوكلاء المتخصصين واستخدمهم.
|
||||
---
|
||||
|
||||
الوكلاء هم مساعدون متخصصون بالذكاء الاصطناعي يمكن تهيئتهم لمهام وسير عمل محدد. يتيحون لك إنشاء أدوات مركزة مع موجّهات مخصصة ونماذج وصلاحية وصول للأدوات.
|
||||
|
||||
:::tip
|
||||
استخدم وكيل plan لتحليل الشفرة ومراجعة الاقتراحات بدون إجراء أي تغييرات على الشفرة.
|
||||
:::
|
||||
|
||||
يمكنك التبديل بين الوكلاء أثناء الجلسة أو استدعاؤهم عبر الإشارة بـ `@`.
|
||||
|
||||
---
|
||||
|
||||
## الأنواع
|
||||
|
||||
يوجد نوعان من الوكلاء في OpenCode: وكلاء أساسيون ووكلاء فرعيون.
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء الأساسيون
|
||||
|
||||
الوكلاء الأساسيون هم المساعدون الرئيسيون الذين تتفاعل معهم مباشرة. يمكنك التنقل بينهم باستخدام مفتاح **Tab** أو اختصار `switch_agent` الذي قمت بتهيئته. يتولى هؤلاء الوكلاء محادثتك الرئيسية. يتم ضبط وصول الأدوات عبر الأذونات — على سبيل المثال، يمتلك Build جميع الأدوات مفعلة بينما يكون Plan مقيّدا.
|
||||
|
||||
:::tip
|
||||
يمكنك استخدام مفتاح **Tab** للتبديل بين الوكلاء الأساسيين أثناء الجلسة.
|
||||
:::
|
||||
|
||||
يأتي OpenCode مع وكيلين أساسيين مدمجين: **Build** و **Plan**. سنلقي نظرة عليهما أدناه.
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء الفرعيون
|
||||
|
||||
الوكلاء الفرعيون هم مساعدين متخصصين يمكن للوكلاء الأساسيين استدعاؤهم لمهام محددة. يمكنك أيضا استدعاؤهم يدويا عبر **الإشارة بـ @** في رسائلك.
|
||||
|
||||
يأتي OpenCode مع وكيلين فرعيين مدمجين: **General** و **Explore**. سنلقي نظرة على ذلك أدناه.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
يأتي OpenCode مع وكيلين أساسيين مدمجين ووكيلين فرعيين مدمجين.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Build
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
Build هو الوكيل الأساسي **الافتراضي** مع تفعيل جميع الأدوات. هذا هو الوكيل القياسي لأعمال التطوير عندما تحتاج إلى وصول كامل لعمليات الملفات وأوامر النظام.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Plan
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل مقيّد صُمم للتخطيط والتحليل. نستخدم نظام أذونات لمنحك تحكما أكبر ومنع التغييرات غير المقصودة.
|
||||
افتراضيا، يتم ضبط كل ما يلي على `ask`:
|
||||
|
||||
- `file edits`: جميع عمليات الكتابة والتصحيح (patches) والتحرير
|
||||
- `bash`: جميع أوامر bash
|
||||
|
||||
يفيد هذا الوكيل عندما تريد من LLM تحليل الشفرة أو اقتراح تغييرات أو إنشاء خطط بدون إجراء أي تعديلات فعلية على قاعدة الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### استخدام General
|
||||
|
||||
_الوضع_: `subagent`
|
||||
|
||||
وكيل عام الغرض للبحث في أسئلة معقدة وتنفيذ مهام متعددة الخطوات. لديه وصول كامل للأدوات (باستثناء todo)، لذا يمكنه إجراء تغييرات على الملفات عند الحاجة. استخدمه لتشغيل عدة وحدات عمل بالتوازي.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Explore
|
||||
|
||||
_الوضع_: `subagent`
|
||||
|
||||
وكيل سريع للقراءة فقط لاستكشاف قواعد الشفرة. لا يستطيع تعديل الملفات. استخدمه عندما تحتاج إلى العثور بسرعة على ملفات عبر أنماط، أو البحث في الشفرة عن كلمات مفتاحية، أو الإجابة عن أسئلة حول قاعدة الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Compaction
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي يضغط السياق الطويل إلى ملخص أصغر. يعمل تلقائيا عند الحاجة ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Title
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي ينشئ عناوين قصيرة للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
### استخدام Summary
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي ينشئ ملخصات للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
1. للوكلاء الأساسيين، استخدم مفتاح **Tab** للتنقل بينهم أثناء الجلسة. يمكنك أيضا استخدام اختصار `switch_agent` الذي قمت بتهيئته.
|
||||
|
||||
2. يمكن استدعاء الوكلاء الفرعيين:
|
||||
- **تلقائيا** بواسطة الوكلاء الأساسيين لمهام متخصصة بناء على أوصافهم.
|
||||
- يدويا عبر **الإشارة بـ @** إلى وكيل فرعي في رسالتك. على سبيل المثال:
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **التنقل بين الجلسات**: عندما ينشئ الوكلاء الفرعيون جلسات فرعية خاصة بهم، يمكنك التنقل بين الجلسة الأم وجميع الجلسات الفرعية باستخدام:
|
||||
- **\<Leader>+Right** (أو اختصار `session_child_cycle` الذي قمت بتهيئته) للتنقل للأمام عبر parent → child1 → child2 → ... → parent
|
||||
- **\<Leader>+Left** (أو اختصار `session_child_cycle_reverse` الذي قمت بتهيئته) للتنقل للخلف عبر parent ← child1 ← child2 ← ... ← parent
|
||||
|
||||
يتيح لك ذلك التبديل بسلاسة بين المحادثة الرئيسية وعمل الوكلاء الفرعيين المتخصص.
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
يمكنك تخصيص الوكلاء المدمجين أو إنشاء وكلائك عبر التهيئة. يمكن تهيئة الوكلاء بطريقتين:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
هيّئ الوكلاء في ملف إعدادات `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
يمكنك أيضا تعريف الوكلاء باستخدام ملفات Markdown. ضعها في:
|
||||
|
||||
- عام: `~/.config/opencode/agents/`
|
||||
- لكل مشروع: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
يصبح اسم ملف Markdown هو اسم الوكيل. على سبيل المثال، ينشئ `review.md` وكيلا باسم `review`.
|
||||
|
||||
---
|
||||
|
||||
## الخيارات
|
||||
|
||||
لنلق نظرة على خيارات التهيئة هذه بمزيد من التفصيل.
|
||||
|
||||
---
|
||||
|
||||
### الوصف
|
||||
|
||||
استخدم خيار `description` لتقديم وصف موجز لما يفعله الوكيل ومتى ينبغي استخدامه.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار تهيئة **إلزامي**.
|
||||
|
||||
---
|
||||
|
||||
### درجة الحرارة
|
||||
|
||||
تحكم في العشوائية والإبداع في ردود LLM عبر إعداد `temperature`.
|
||||
|
||||
القيم الأقل تجعل الردود أكثر تركيزا وحتمية، بينما تزيد القيم الأعلى من الإبداع والتنوع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عادة تتراوح قيم `temperature` بين 0.0 و 1.0:
|
||||
|
||||
- **0.0-0.2**: ردود شديدة التركيز وحتمية، مثالية لتحليل الشفرة والتخطيط
|
||||
- **0.3-0.5**: ردود متوازنة مع قدر من الإبداع، مناسبة لمهام التطوير العامة
|
||||
- **0.6-1.0**: ردود أكثر إبداعا وتنوعا، مفيدة للعصف الذهني والاستكشاف
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد temperature، يستخدم OpenCode القيم الافتراضية الخاصة بالنموذج؛ عادة 0 لمعظم النماذج و 0.55 لنماذج Qwen.
|
||||
|
||||
---
|
||||
|
||||
### الحد الأقصى للخطوات
|
||||
|
||||
تحكم في الحد الأقصى لعدد التكرارات الوكيلة التي يمكن لوكيل تنفيذها قبل أن يُجبر على الرد بنص فقط. يتيح ذلك للمستخدمين الذين يرغبون في التحكم بالتكاليف وضع حد للإجراءات الوكيلة.
|
||||
|
||||
إذا لم يتم ضبط هذا الخيار، سيستمر الوكيل بالتكرار حتى يقرر النموذج التوقف أو يقاطع المستخدم الجلسة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند بلوغ الحد، يتلقى الوكيل موجّها نظاميا خاصا يطلب منه الرد بملخص لعمله والمهام المتبقية الموصى بها.
|
||||
|
||||
:::caution
|
||||
الحقل القديم `maxSteps` متقادم. استخدم `steps` بدلا منه.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### التعطيل
|
||||
|
||||
اضبطه على `true` لتعطيل الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الموجّه
|
||||
|
||||
حدد ملف موجّه نظامي مخصص لهذا الوكيل عبر إعداد `prompt`. يجب أن يحتوي ملف الموجّه على تعليمات خاصة بهدف الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا المسار نسبي لمكان وجود ملف الإعدادات. لذلك يعمل هذا لكل من إعدادات OpenCode العامة وإعدادات المشروع.
|
||||
|
||||
---
|
||||
|
||||
### النموذج
|
||||
|
||||
استخدم إعداد `model` لتجاوز (override) النموذج لهذا الوكيل. يفيد ذلك لاستخدام نماذج مختلفة مُحسّنة لمهام مختلفة. على سبيل المثال، نموذج أسرع للتخطيط ونموذج أقدر للتنفيذ.
|
||||
|
||||
:::tip
|
||||
إذا لم تحدد نموذجا، يستخدم الوكلاء الأساسيون [النموذج المُهيأ عالميا](/docs/config#models)، بينما يستخدم الوكلاء الفرعيون نموذج الوكيل الأساسي الذي استدعاهم.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يستخدم معرّف النموذج في إعدادات OpenCode الصيغة `provider/model-id`. على سبيل المثال، إذا كنت تستخدم [OpenCode Zen](/docs/zen)، فستستخدم `opencode/gpt-5.1-codex` لـ GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
تحكم في الأدوات المتاحة لهذا الوكيل عبر إعداد `tools`. يمكنك تفعيل أو تعطيل أدوات محددة بضبطها على `true` أو `false`.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
إعدادات الوكيل الخاصة تتجاوز الإعدادات العامة.
|
||||
:::
|
||||
|
||||
يمكنك أيضا استخدام المحارف البديلة (wildcards) للتحكم في عدة أدوات دفعة واحدة. على سبيل المثال، لتعطيل جميع الأدوات القادمة من خادم MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد عن الأدوات](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### الأذونات
|
||||
|
||||
يمكنك تهيئة الأذونات لإدارة الإجراءات التي يستطيع الوكيل تنفيذها. حاليا، يمكن تهيئة أذونات أدوات `edit` و `bash` و `webfetch` إلى:
|
||||
|
||||
- `"ask"` — طلب الموافقة قبل تشغيل الأداة
|
||||
- `"allow"` — السماح بكل العمليات بدون موافقة
|
||||
- `"deny"` — تعطيل الأداة
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك تجاوز هذه الأذونات لكل وكيل.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا ضبط الأذونات في وكلاء Markdown.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
يمكنك ضبط الأذونات لأوامر bash محددة.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن لهذا أن يقبل نمط glob.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ويمكنك أيضا استخدام المحرف البديل `*` لإدارة الأذونات لكل الأوامر.
|
||||
وبما أن آخر قاعدة مطابقة لها الأولوية، ضع قاعدة `*` أولا ثم القواعد الأكثر تخصيصا بعدها.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد عن الأذونات](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### الوضع
|
||||
|
||||
تحكم في وضع الوكيل عبر إعداد `mode`. يُستخدم خيار `mode` لتحديد كيفية استخدام الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن ضبط خيار `mode` على `primary` أو `subagent` أو `all`. إذا لم يتم تحديد `mode`، فالقيمة الافتراضية هي `all`.
|
||||
|
||||
---
|
||||
|
||||
### مخفي
|
||||
|
||||
أخفِ وكيلا فرعيا من قائمة الإكمال التلقائي لـ `@` عبر `hidden: true`. يفيد ذلك للوكلاء الفرعيين الداخليين الذين ينبغي استدعاؤهم برمجيا فقط بواسطة وكلاء آخرين عبر أداة Task.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يؤثر هذا فقط على ظهور الوكيل للمستخدم في قائمة الإكمال التلقائي. لا يزال بإمكان النموذج استدعاء الوكلاء المخفيين عبر أداة Task إذا سمحت الأذونات.
|
||||
|
||||
:::note
|
||||
ينطبق فقط على الوكلاء ذوي `mode: subagent`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### أذونات Task
|
||||
|
||||
تحكم في أي الوكلاء الفرعيين يمكن لوكيل استدعاؤهم عبر أداة Task باستخدام `permission.task`. يستخدم أنماط glob لمطابقة مرنة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند ضبطها على `deny`، تتم إزالة الوكيل الفرعي بالكامل من وصف أداة Task، لذا لن يحاول النموذج استدعاءه.
|
||||
|
||||
:::tip
|
||||
تُقيّم القواعد بالترتيب، و **آخر قاعدة مطابقة هي التي تفوز**. في المثال أعلاه، يطابق `orchestrator-planner` كلا من `*` (deny) و `orchestrator-*` (allow)، ولكن بما أن `orchestrator-*` تأتي بعد `*` فالنتيجة هي `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
يمكن للمستخدمين دائما استدعاء أي وكيل فرعي مباشرة عبر قائمة الإكمال التلقائي لـ `@`، حتى لو كانت أذونات task للوكيل سترفض ذلك.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### اللون
|
||||
|
||||
خصص المظهر البصري للوكيل في واجهة المستخدم عبر خيار `color`. يؤثر ذلك على كيفية ظهور الوكيل في الواجهة.
|
||||
|
||||
استخدم لونا سداسيا صالحا (مثل `#FF5733`) أو لون سمة: `primary` و `secondary` و `accent` و `success` و `warning` و `error` و `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
تحكم في تنوع الردود عبر خيار `top_p`. بديل عن temperature للتحكم بالعشوائية.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتراوح القيم من 0.0 إلى 1.0. القيم الأقل أكثر تركيزا، والقيم الأعلى أكثر تنوعا.
|
||||
|
||||
---
|
||||
|
||||
### خيارات إضافية
|
||||
|
||||
أي خيارات أخرى تحددها في تهيئة الوكيل سيتم **تمريرها مباشرة** إلى مزود النموذج كخيارات للنموذج. يتيح لك ذلك استخدام ميزات ومعاملات خاصة بالمزود.
|
||||
|
||||
على سبيل المثال، مع نماذج الاستدلال من OpenAI يمكنك التحكم في مجهود الاستدلال:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذه الخيارات الإضافية تعتمد على النموذج والمزود. راجع توثيق مزودك لمعرفة المعاملات المتاحة.
|
||||
|
||||
:::tip
|
||||
شغّل `opencode models` لعرض قائمة بالنماذج المتاحة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## إنشاء وكلاء
|
||||
|
||||
يمكنك إنشاء وكلاء جدد باستخدام الأمر التالي:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
سيقوم هذا الأمر التفاعلي بما يلي:
|
||||
|
||||
1. سيسألك أين تريد حفظ الوكيل: عام (global) أو خاص بالمشروع.
|
||||
2. سيطلب وصفا لما ينبغي أن يفعله الوكيل.
|
||||
3. سيولّد موجّها نظاميا ومعرّفا مناسبا.
|
||||
4. سيتيح لك اختيار الأدوات التي يمكن للوكيل الوصول إليها.
|
||||
5. أخيرا، سينشئ ملف Markdown يحتوي تهيئة الوكيل.
|
||||
|
||||
---
|
||||
|
||||
## حالات الاستخدام
|
||||
|
||||
فيما يلي بعض حالات الاستخدام الشائعة لوكلاء مختلفين.
|
||||
|
||||
- **Build agent**: أعمال تطوير كاملة مع تفعيل جميع الأدوات
|
||||
- **Plan agent**: تحليل وتخطيط بدون إجراء تغييرات
|
||||
- **Review agent**: مراجعة الشفرة مع وصول للقراءة فقط بالإضافة إلى أدوات التوثيق
|
||||
- **Debug agent**: يركز على التحقيق مع تفعيل أدوات bash والقراءة
|
||||
- **Docs agent**: كتابة التوثيق مع عمليات الملفات بدون أوامر النظام
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
فيما يلي بعض أمثلة الوكلاء التي قد تجدها مفيدة.
|
||||
|
||||
:::tip
|
||||
هل لديك وكيل تود مشاركته؟ [قدّم PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### وكيل التوثيق
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### مدقق أمني
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
602
qimingcode/packages/web/src/content/docs/ar/cli.mdx
Normal file
602
qimingcode/packages/web/src/content/docs/ar/cli.mdx
Normal file
@@ -0,0 +1,602 @@
|
||||
---
|
||||
title: CLI
|
||||
description: أوامر وخيارات CLI في OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
يبدأ CLI الخاص بـ OpenCode افتراضيا واجهة [TUI](/docs/tui) عند تشغيله بدون أي معاملات.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
كما يدعم أيضا أوامر موثقة في هذه الصفحة، ما يتيح لك التفاعل مع OpenCode برمجيا.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
بدء واجهة المستخدم terminal (TUI) الخاصة بـ OpenCode.
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | المختصر | الوصف |
|
||||
| ------------ | ------- | ----------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--fork` | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| `--prompt` | | الموجّه المراد استخدامه |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--port` | | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
## الأوامر
|
||||
|
||||
يتضمن CLI الخاص بـ OpenCode أيضا الأوامر التالية.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
إدارة وكلاء OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
إرفاق terminal بخادم الواجهة الخلفية لـ OpenCode قيد التشغيل بالفعل، والذي تم تشغيله عبر الأمرين `serve` أو `web`.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
يتيح ذلك استخدام واجهة TUI مع واجهة خلفية لـ OpenCode تعمل عن بعد. على سبيل المثال:
|
||||
|
||||
```bash
|
||||
# ابدأ خادم الواجهة الخلفية للوصول عبر الويب/الجوال
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# في محطة طرفية (terminal) أخرى، اربط TUI بالواجهة الخلفية قيد التشغيل
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ----------- | ------- | ----------------------------------- |
|
||||
| `--dir` | | دليل العمل الذي ستبدأ منه واجهة TUI |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
إنشاء وكيل جديد بإعدادات مخصصة.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
سيرشدك هذا الأمر خلال إنشاء وكيل جديد مع موجه نظام مخصص وإعدادات الأدوات.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع الوكلاء المتاحين.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
أمر لإدارة بيانات الاعتماد وتسجيل الدخول لمزودي الخدمة.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
يعتمد OpenCode على قائمة المزودين في [Models.dev](https://models.dev)، لذا يمكنك استخدام `opencode auth login` لتهيئة مفاتيح API لأي مزود ترغب باستخدامه. يتم حفظ ذلك في `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
عند تشغيل OpenCode يقوم بتحميل المزودين من ملف بيانات الاعتماد، وكذلك أي مفاتيح معرّفة في متغيرات البيئة لديك أو في ملف `.env` ضمن مشروعك.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
يسرد جميع المزودين الذين تم توثيقهم كما هم محفوظون في ملف بيانات الاعتماد.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
أو النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
يسجلك خارج مزود عبر حذفه من ملف بيانات الاعتماد.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
إدارة وكيل GitHub لأتمتة المستودع.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
تثبيت وكيل GitHub في مستودعك.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
يقوم ذلك بإعداد سير عمل GitHub Actions اللازم ويرشدك خلال عملية التهيئة. [اعرف المزيد](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
تشغيل وكيل GitHub. يُستخدم هذا عادة ضمن GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| --------- | ------------------------------------ |
|
||||
| `--event` | حدث GitHub مُحاكى لتشغيل الوكيل عليه |
|
||||
| `--token` | رمز وصول شخصي لـ GitHub |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
إدارة خوادم Model Context Protocol.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
إضافة خادم MCP إلى تهيئتك.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
سيرشدك هذا الأمر خلال إضافة خادم MCP محلي أو بعيد.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع خوادم MCP المُهيأة وحالة اتصالها.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
أو استخدم النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
إجراء المصادقة مع خادم MCP يدعم OAuth.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
إذا لم تُحدِّد اسم خادم، فسيُطلب منك الاختيار من الخوادم المتاحة الداعمة لـ OAuth.
|
||||
|
||||
يمكنك أيضا عرض الخوادم الداعمة لـ OAuth وحالة المصادقة الخاصة بها.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
أو استخدم النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
إزالة بيانات اعتماد OAuth لخادم MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
تشخيص مشاكل اتصال OAuth لخادم MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
عرض جميع النماذج المتاحة من المزودين المُهيأين.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
يعرض هذا الأمر جميع النماذج المتاحة عبر المزودين المُهيأين لديك بصيغة `provider/model`.
|
||||
|
||||
هذا مفيد لتحديد اسم النموذج الدقيق الذي ستستخدمه في [تهيئتك](/docs/config/).
|
||||
|
||||
يمكنك اختياريا تمرير معرّف مزود لتصفية النماذج حسب ذلك المزود.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------- |
|
||||
| `--refresh` | تحديث ذاكرة التخزين المؤقت للنماذج من models.dev |
|
||||
| `--verbose` | استخدام مخرجات أكثر تفصيلا للنماذج (تشمل بيانات مثل التكاليف) |
|
||||
|
||||
استخدم الراية `--refresh` لتحديث قائمة النماذج المخزنة مؤقتا. يفيد ذلك عند إضافة نماذج جديدة إلى مزود وتريد رؤيتها في OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
تشغيل opencode في وضع غير تفاعلي عبر تمرير موجه مباشرة.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
هذا مفيد للبرمجة النصية والأتمتة، أو عندما تريد إجابة سريعة دون تشغيل واجهة TUI كاملة. على سبيل المثال.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
يمكنك أيضا الإرفاق بمثيل `opencode serve` قيد التشغيل لتجنّب زمن الإقلاع البارد لخوادم MCP في كل تشغيل:
|
||||
|
||||
```bash
|
||||
# ابدأ خادمًا بلا واجهة في محطة طرفية واحدة
|
||||
opencode serve
|
||||
|
||||
# في محطة طرفية أخرى، شغّل الأوامر التي ترتبط به
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------ | ------- | ----------------------------------------------------------------- |
|
||||
| `--command` | | الأمر المراد تشغيله؛ استخدم الرسالة كوسائط |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--fork` | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| `--share` | | مشاركة الجلسة |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--file` | `-f` | ملف/ملفات لإرفاقها بالرسالة |
|
||||
| `--format` | | التنسيق: default (منسق) أو json (أحداث JSON خام) |
|
||||
| `--title` | | عنوان للجلسة (يستخدم موجهًا مقتطعًا إن لم تُحدَّد قيمة) |
|
||||
| `--attach` | | الإرفاق بخادم opencode قيد التشغيل (مثل http://localhost:4096) |
|
||||
| `--port` | | منفذ الخادم المحلي (الافتراضي منفذ عشوائي) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
بدء خادم OpenCode بدون واجهة للوصول عبر API. راجع [توثيق الخادم](/docs/server) لواجهة HTTP الكاملة.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
يشغّل هذا خادم HTTP يوفّر وصولا عبر API لوظائف opencode دون واجهة TUI. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
إدارة جلسات OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع جلسات OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------- | ------- | ------------------------------------- |
|
||||
| `--max-count` | `-n` | حصر النتائج في أحدث N جلسات |
|
||||
| `--format` | | تنسيق المخرجات: table أو json (table) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
عرض إحصاءات استخدام الرموز والتكلفة لجلسات OpenCode لديك.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------------------- |
|
||||
| `--days` | عرض الإحصاءات لآخر N يومًا (الافتراضي: كل الوقت) |
|
||||
| `--tools` | عدد الأدوات المطلوب عرضها (الافتراضي: الكل) |
|
||||
| `--models` | عرض تفصيل استخدام النماذج (مخفي افتراضيا). مرّر رقمًا لعرض أعلى N |
|
||||
| `--project` | التصفية حسب المشروع (الافتراضي: كل المشاريع، سلسلة فارغة: المشروع الحالي) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
تصدير بيانات الجلسة بصيغة JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
إذا لم تُقدّم معرّف جلسة، فسيُطلب منك الاختيار من الجلسات المتاحة.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
استيراد بيانات الجلسة من ملف JSON أو رابط مشاركة OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
يمكنك الاستيراد من ملف محلي أو من رابط مشاركة OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
بدء خادم OpenCode بدون واجهة مع واجهة ويب.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
يشغّل هذا خادم HTTP ويفتح متصفح ويب للوصول إلى OpenCode عبر واجهة ويب. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
بدء خادم ACP (Agent Client Protocol).
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
يشغّل هذا الأمر خادم ACP يتواصل عبر stdin/stdout باستخدام nd-JSON.
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | --------------------------------- |
|
||||
| `--cwd` | دليل العمل |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
إلغاء تثبيت OpenCode وإزالة جميع الملفات ذات الصلة.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| --------------- | ------- | ----------------------------------- |
|
||||
| `--keep-config` | `-c` | الإبقاء على ملفات التهيئة |
|
||||
| `--keep-data` | `-d` | الإبقاء على بيانات الجلسات واللقطات |
|
||||
| `--dry-run` | | عرض ما سيتم حذفه دون تنفيذ الحذف |
|
||||
| `--force` | `-f` | تخطي مطالبات التأكيد |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
تحديث opencode إلى أحدث إصدار أو إلى إصدار محدد.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
للترقية إلى أحدث إصدار.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
للترقية إلى إصدار محدد.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ---------- | ------- | ----------------------------------------------------------- |
|
||||
| `--method` | `-m` | طريقة التثبيت المستخدمة: curl أو npm أو pnpm أو bun أو brew |
|
||||
|
||||
---
|
||||
|
||||
## الخيارات العامة
|
||||
|
||||
يدعم سطر أوامر opencode الخيارات العامة التالية.
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| -------------- | ------- | -------------------------------------- |
|
||||
| `--help` | `-h` | عرض المساعدة |
|
||||
| `--version` | `-v` | طباعة رقم الإصدار |
|
||||
| `--print-logs` | | طباعة السجلات إلى stderr |
|
||||
| `--log-level` | | مستوى السجل (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## متغيرات البيئة
|
||||
|
||||
يمكن تهيئة OpenCode باستخدام متغيرات البيئة.
|
||||
|
||||
| المتغير | النوع | الوصف |
|
||||
| ------------------------------------- | ------- | --------------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | مشاركة الجلسات تلقائيا |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | مسار ملف Git Bash التنفيذي على Windows |
|
||||
| `OPENCODE_CONFIG` | string | مسار ملف التهيئة |
|
||||
| `OPENCODE_CONFIG_DIR` | string | مسار دليل التهيئة |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | محتوى تهيئة JSON مُضمّن |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | تعطيل التحقق التلقائي من التحديثات |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | تعطيل تنقية البيانات القديمة |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | تعطيل تحديث عنوان terminal تلقائيا |
|
||||
| `OPENCODE_PERMISSION` | string | تهيئة أذونات JSON مُضمّنة |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | تعطيل الإضافات الافتراضية |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | تعطيل تنزيل خوادم LSP تلقائيا |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | تفعيل النماذج التجريبية |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | تعطيل ضغط السياق تلقائيا |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | تعطيل القراءة من `.claude` (الموجه + المهارات) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | تعطيل قراءة `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | تعطيل تحميل `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | تعطيل جلب النماذج من مصادر بعيدة |
|
||||
| `OPENCODE_FAKE_VCS` | string | مزود VCS وهمي لأغراض الاختبار |
|
||||
| `OPENCODE_CLIENT` | string | معرّف العميل (الافتراضي `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | تفعيل أدوات بحث الويب من Exa |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | تفعيل المصادقة الأساسية لخادمي `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | تجاوز اسم مستخدم المصادقة الأساسية (الافتراضي `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | رابط مخصص لجلب تهيئة النماذج |
|
||||
|
||||
---
|
||||
|
||||
### تجريبي
|
||||
|
||||
تقوم متغيرات البيئة التالية بتفعيل ميزات تجريبية قد تتغير أو تتم إزالتها.
|
||||
|
||||
| المتغير | النوع | الوصف |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | تفعيل جميع الميزات التجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | تفعيل اكتشاف الأيقونات |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | تعطيل النسخ عند التحديد في TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | المهلة الافتراضية لأوامر bash بالميلي ثانية |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | الحد الأقصى لرموز المخرجات لاستجابات LLM |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | تفعيل مراقب الملفات لكامل الدليل |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | تفعيل مُنسّق oxfmt |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | تفعيل أداة LSP تجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | تعطيل مراقب الملفات |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | تفعيل ميزات Exa التجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | تمكين TY LSP لملفات python |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | تفعيل ميزات markdown تجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | تفعيل وضع الخطة |
|
||||
322
qimingcode/packages/web/src/content/docs/ar/commands.mdx
Normal file
322
qimingcode/packages/web/src/content/docs/ar/commands.mdx
Normal file
@@ -0,0 +1,322 @@
|
||||
---
|
||||
title: الأوامر
|
||||
description: أنشئ أوامر مخصصة للمهام المتكررة.
|
||||
---
|
||||
|
||||
تتيح لك الأوامر المخصصة تحديد مُطالبة (prompt) تريد تشغيلها عند تنفيذ ذلك الأمر في واجهة TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
تُعدّ الأوامر المخصصة إضافةً إلى الأوامر المضمنة مثل `/init` و`/undo` و`/redo` و`/share` و`/help`. [اعرف المزيد](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## إنشاء ملفات الأوامر
|
||||
|
||||
أنشئ ملفات Markdown داخل الدليل `commands/` لتعريف أوامر مخصصة.
|
||||
|
||||
أنشئ الملف `.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 أو بإنشاء ملفات Markdown داخل الدليل `commands/`.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
استخدم خيار `command` في [config](/docs/config) الخاص بـ OpenCode:
|
||||
|
||||
```json title="opencode.jsonc" {4-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
// يصبح هذا اسم الأمر
|
||||
"test": {
|
||||
// هذه هي المطالبة التي ستُرسل إلى LLM
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
|
||||
// يظهر هذا كوصف في 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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إعداد المُطالبة
|
||||
|
||||
تدعم مُطالبات الأوامر المخصصة عدة عناصر نائبة (placeholders) وبنى خاصة.
|
||||
|
||||
---
|
||||
|
||||
### الوسائط
|
||||
|
||||
مرِّر وسائط إلى الأوامر باستخدام العنصر النائب `$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` لتحديد أي [agent](/docs/agents) ينبغي أن ينفّذ هذا الأمر (اختياريًا).
|
||||
إذا كان هذا [subagent](/docs/agents/#subagents)، فسيؤدي الأمر افتراضيًا إلى تشغيل استدعاء subagent.
|
||||
لإيقاف هذا السلوك، عيِّن `subtask` إلى `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار إعداد **اختياري**. إن لم تُحدده، فسيُستخدم agent الحالي افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
### مهمة فرعية (`subtask`)
|
||||
|
||||
استخدم القيمة المنطقية `subtask` لفرض أن يُشغِّل الأمر استدعاء [subagent](/docs/agents/#subagents).
|
||||
يفيد هذا إذا أردت ألا يلوّث الأمر السياق الأساسي لديك، إذ سيُجبر (**force**) الـ agent على العمل كـ subagent،
|
||||
حتى لو كان `mode` مضبوطًا على `primary` في إعدادات [agent](/docs/agents).
|
||||
|
||||
```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
|
||||
يمكن للأوامر المخصصة تجاوز الأوامر المضمنة.
|
||||
:::
|
||||
|
||||
إذا عرّفت أمرًا مخصصًا بالاسم نفسه، فسيستبدل الأمر المضمن.
|
||||
685
qimingcode/packages/web/src/content/docs/ar/config.mdx
Normal file
685
qimingcode/packages/web/src/content/docs/ar/config.mdx
Normal file
@@ -0,0 +1,685 @@
|
||||
---
|
||||
title: الإعدادات
|
||||
description: استخدام ملف إعدادات OpenCode بصيغة JSON.
|
||||
---
|
||||
|
||||
يمكنك ضبط OpenCode باستخدام ملف إعدادات بصيغة JSON.
|
||||
|
||||
---
|
||||
|
||||
## التنسيق
|
||||
|
||||
يدعم OpenCode تنسيقي **JSON** و**JSONC** (JSON مع تعليقات).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
// إعدادات السمة
|
||||
"theme": "opencode",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المواقع
|
||||
|
||||
يمكنك وضع ملف الإعدادات في عدة مواقع مختلفة، ولكل موقع
|
||||
ترتيب أولوية مختلف.
|
||||
|
||||
:::note
|
||||
تُدمَج ملفات الإعدادات **معًا** ولا تُستبدَل.
|
||||
:::
|
||||
|
||||
تُدمَج ملفات الإعدادات معًا ولا تُستبدَل. يتم جمع الإعدادات من مواقع الإعدادات التالية. تتجاوز الإعدادات اللاحقة الإعدادات السابقة فقط عند تعارض المفاتيح. أما الإعدادات غير المتعارضة فتبقى محفوظة من جميع الملفات.
|
||||
|
||||
على سبيل المثال، إذا كان الإعداد العام يضبط `theme: "opencode"` و`autoupdate: true`، وكان إعداد المشروع يضبط `model: "anthropic/claude-sonnet-4-5"`، فستتضمن الإعدادات النهائية الخيارات الثلاثة جميعها.
|
||||
|
||||
---
|
||||
|
||||
### ترتيب الأولوية
|
||||
|
||||
تُحمَّل مصادر الإعدادات بهذا الترتيب (المصادر اللاحقة تتجاوز السابقة):
|
||||
|
||||
1. **الإعدادات البعيدة** (من `.well-known/opencode`) - الإعدادات الافتراضية على مستوى المؤسسة
|
||||
2. **الإعدادات العامة** (`~/.config/opencode/opencode.json`) - تفضيلات المستخدم
|
||||
3. **إعدادات مخصصة** (`OPENCODE_CONFIG` env var) - تجاوزات مخصصة
|
||||
4. **إعدادات المشروع** (`opencode.json` داخل المشروع) - إعدادات خاصة بالمشروع
|
||||
5. **أدلة `.opencode`** - الوكلاء، الأوامر، الإضافات
|
||||
6. **إعدادات ضمنية** (`OPENCODE_CONFIG_CONTENT` env var) - تجاوزات وقت التشغيل
|
||||
|
||||
هذا يعني أن إعدادات المشروع يمكنها تجاوز الإعدادات العامة، وأن الإعدادات العامة يمكنها تجاوز الإعدادات الافتراضية البعيدة على مستوى المؤسسة.
|
||||
|
||||
:::note
|
||||
يستخدم الدليلان `.opencode` و`~/.config/opencode` **أسماء جمع** للأدلة الفرعية: `agents/` و`commands/` و`modes/` و`plugins/` و`skills/` و`tools/` و`themes/`. كما تُدعَم أسماء المفرد (مثل `agent/`) للتوافق مع الإصدارات السابقة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### عن بُعد
|
||||
|
||||
يمكن للمؤسسات توفير إعدادات افتراضية عبر نقطة النهاية `.well-known/opencode`. يتم جلب ذلك تلقائيًا عندما تقوم بالمصادقة مع مزوّد يدعم هذه الميزة.
|
||||
|
||||
تُحمَّل الإعدادات البعيدة أولًا لتكون طبقة الأساس. ويمكن لجميع مصادر الإعدادات الأخرى (العامة، وإعدادات المشروع) تجاوز هذه القيم الافتراضية.
|
||||
|
||||
على سبيل المثال، إذا كانت مؤسستك توفر خوادم MCP معطّلة افتراضيًا:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك تفعيل خوادم محددة في إعداداتك المحلية:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### عام
|
||||
|
||||
ضع إعدادات OpenCode العامة في `~/.config/opencode/opencode.json`. استخدم الإعدادات العامة للتفضيلات على مستوى المستخدم مثل السمات، والمزوّدين، أو اختصارات المفاتيح.
|
||||
|
||||
تتجاوز الإعدادات العامة القيم الافتراضية البعيدة الخاصة بالمؤسسة.
|
||||
|
||||
---
|
||||
|
||||
### لكل مشروع
|
||||
|
||||
أضف `opencode.json` في جذر مشروعك. تمتلك إعدادات المشروع أعلى أولوية بين ملفات الإعدادات القياسية، إذ تتجاوز الإعدادات العامة والبعيدة معًا.
|
||||
|
||||
:::tip
|
||||
ضع إعدادات المشروع الخاصة في جذر مشروعك.
|
||||
:::
|
||||
|
||||
عند تشغيل OpenCode، يبحث عن ملف إعدادات في الدليل الحالي أو يصعد حتى أقرب دليل Git.
|
||||
|
||||
ومن الآمن أيضًا تضمينه في Git، كما يستخدم نفس المخطط الخاص بالإعدادات العامة.
|
||||
|
||||
---
|
||||
|
||||
### مسار مخصص
|
||||
|
||||
حدّد مسار ملف إعدادات مخصصًا باستخدام متغير البيئة `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
تُحمَّل الإعدادات المخصصة بين الإعدادات العامة وإعدادات المشروع ضمن ترتيب الأولوية.
|
||||
|
||||
---
|
||||
|
||||
### دليل مخصص
|
||||
|
||||
حدّد دليل إعدادات مخصصًا باستخدام متغير البيئة `OPENCODE_CONFIG_DIR`.
|
||||
سيتم البحث داخل هذا الدليل عن الوكلاء والأوامر والأوضاع والإضافات تمامًا مثل
|
||||
الدليل القياسي `.opencode`، ويجب أن يتبع نفس البنية.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
يُحمَّل الدليل المخصص بعد الإعدادات العامة وأدلة `.opencode`، لذلك **يمكنه تجاوز** إعداداتها.
|
||||
|
||||
---
|
||||
|
||||
## المخطط
|
||||
|
||||
يحتوي ملف الإعدادات على مخطط مُعرَّف في [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
يفترض أن يتمكن محررك من التحقق والإكمال التلقائي اعتمادًا على هذا المخطط.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
يمكنك ضبط الإعدادات الخاصة بـ TUI عبر الخيار `tui`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
الخيارات المتاحة:
|
||||
|
||||
- `scroll_acceleration.enabled` - تفعيل تسارع التمرير بأسلوب macOS. **له أولوية على `scroll_speed`.**
|
||||
- `scroll_speed` - مُضاعِف سرعة تمرير مخصص (الافتراضي: `3`، الحد الأدنى: `1`). يتم تجاهله إذا كان `scroll_acceleration.enabled` مساويًا لـ `true`.
|
||||
- `diff_style` - التحكم في عرض `diff`. القيمة `"auto"` تتكيف مع عرض terminal، و`"stacked"` تعرض عمودًا واحدًا دائمًا.
|
||||
|
||||
[تعرف على المزيد حول استخدام TUI هنا](/docs/tui).
|
||||
|
||||
---
|
||||
|
||||
### الخادم
|
||||
|
||||
يمكنك ضبط إعدادات الخادم لأوامر `opencode serve` و`opencode web` عبر الخيار `server`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
الخيارات المتاحة:
|
||||
|
||||
- `port` - المنفذ الذي سيتم الاستماع عليه.
|
||||
- `hostname` - اسم المضيف الذي سيتم الاستماع عليه. عند تفعيل `mdns` وعدم ضبط اسم مضيف، تكون القيمة الافتراضية `0.0.0.0`.
|
||||
- `mdns` - تفعيل اكتشاف الخدمة عبر mDNS. يتيح ذلك للأجهزة الأخرى على الشبكة اكتشاف خادم OpenCode.
|
||||
- `mdnsDomain` - اسم نطاق مخصص لخدمة mDNS. القيمة الافتراضية هي `opencode.local`. مفيد لتشغيل عدة نُسخ على نفس الشبكة.
|
||||
- `cors` - أصول إضافية مسموح بها لـ CORS عند استخدام خادم HTTP من عميل يعتمد على المتصفح. يجب أن تكون القيم أصولًا كاملة (البروتوكول + المضيف + منفذ اختياري)، مثل `https://app.example.com`.
|
||||
|
||||
[تعرف على المزيد حول الخادم هنا](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
يمكنك إدارة الأدوات التي يمكن لـ LLM استخدامها عبر الخيار `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول الأدوات هنا](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### النماذج
|
||||
|
||||
يمكنك ضبط المزوّدين والنماذج التي تريد استخدامها في إعدادات OpenCode عبر الخيارات `provider` و`model` و`small_model`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
يضبط الخيار `small_model` نموذجًا منفصلًا للمهام الخفيفة مثل توليد العناوين. افتراضيًا يحاول OpenCode استخدام نموذج أقل تكلفة إذا كان متاحًا لدى مزوّدك، وإلا فسيعود إلى النموذج الرئيسي.
|
||||
|
||||
قد تتضمن خيارات المزوّد `timeout` و`setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - مهلة الطلب بالميلي ثانية (الافتراضي: 300000). اضبطه إلى `false` لتعطيله.
|
||||
- `setCacheKey` - يضمن تعيين مفتاح التخزين المؤقت دائمًا للمزوّد المحدد.
|
||||
|
||||
يمكنك أيضًا ضبط [النماذج المحلية](/docs/models#local). [تعرف على المزيد](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### خيارات خاصة بالمزوّد
|
||||
|
||||
يدعم بعض المزوّدين خيارات إعداد إضافية تتجاوز الإعدادات العامة مثل `timeout` و`apiKey`.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
يدعم Amazon Bedrock إعدادات خاصة بـ AWS:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - منطقة AWS لـ Bedrock (الافتراضي: متغير البيئة `AWS_REGION` أو `us-east-1`)
|
||||
- `profile` - ملف تعريف AWS المُسمّى من `~/.aws/credentials` (الافتراضي: متغير البيئة `AWS_PROFILE`)
|
||||
- `endpoint` - عنوان URL لنقطة نهاية مخصصة لنقاط نهاية VPC. هذا اسم بديل للخيار العام `baseURL` باستخدام مصطلحات AWS. إذا تم تحديدهما معًا، تكون أولوية `endpoint` أعلى.
|
||||
|
||||
:::note
|
||||
لرموز Bearer (`AWS_BEARER_TOKEN_BEDROCK` أو `/connect`) أولوية أعلى من المصادقة القائمة على ملف التعريف. راجع [أولوية المصادقة](/docs/providers#authentication-precedence) للتفاصيل.
|
||||
:::
|
||||
|
||||
[تعرف على المزيد حول إعداد Amazon Bedrock](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### السمات
|
||||
|
||||
يمكنك ضبط السمة التي تريد استخدامها في إعدادات OpenCode عبر الخيار `theme`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": ""
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء
|
||||
|
||||
يمكنك ضبط وكلاء متخصصين لمهام محددة عبر الخيار `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// تعطيل أدوات تعديل الملفات لوكيل المراجعة فقط
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعريف الوكلاء باستخدام ملفات markdown في `~/.config/opencode/agents/` أو `.opencode/agents/`. [تعرف على المزيد هنا](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### الوكيل الافتراضي
|
||||
|
||||
يمكنك تعيين الوكيل الافتراضي باستخدام الخيار `default_agent`. يحدد ذلك أي وكيل سيتم استخدامه عندما لا يتم تحديد وكيل صراحةً.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
يجب أن يكون الوكيل الافتراضي وكيلًا أساسيًا (وليس وكيلًا فرعيًا). يمكن أن يكون وكيلًا مدمجًا مثل `"build"` أو `"plan"`، أو [وكيلًا مخصصًا](/docs/agents) قمت بتعريفه. إذا لم يكن الوكيل المحدد موجودًا أو كان وكيلًا فرعيًا، فسيعود OpenCode إلى `"build"` مع تحذير.
|
||||
|
||||
ينطبق هذا الإعداد على جميع الواجهات: TUI وCLI (`opencode run`) وتطبيق سطح المكتب وGitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### المشاركة
|
||||
|
||||
يمكنك ضبط ميزة [share](/docs/share) عبر الخيار `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
يقبل هذا الإعداد القيم التالية:
|
||||
|
||||
- `"manual"` - السماح بالمشاركة اليدوية عبر الأوامر (الافتراضي)
|
||||
- `"auto"` - مشاركة المحادثات الجديدة تلقائيًا
|
||||
- `"disabled"` - تعطيل المشاركة بالكامل
|
||||
|
||||
افتراضيًا تكون المشاركة في الوضع اليدوي، حيث تحتاج إلى مشاركة المحادثات صراحةً باستخدام الأمر `/share`.
|
||||
|
||||
---
|
||||
|
||||
### الأوامر
|
||||
|
||||
يمكنك ضبط أوامر مخصصة للمهام المتكررة عبر الخيار `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.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": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعريف الأوامر باستخدام ملفات markdown في `~/.config/opencode/commands/` أو `.opencode/commands/`. [تعرف على المزيد هنا](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### اختصارات المفاتيح
|
||||
|
||||
يمكنك تخصيص اختصارات المفاتيح عبر الخيار `keybinds`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### التحديث التلقائي
|
||||
|
||||
سيقوم OpenCode بتنزيل أي تحديثات جديدة تلقائيًا عند بدء التشغيل. يمكنك تعطيل ذلك عبر الخيار `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم تكن تريد التحديثات لكنك تريد الإشعار عند توفر نسخة جديدة، فاضبط `autoupdate` على `"notify"`.
|
||||
لاحظ أن هذا يعمل فقط إذا لم يتم تثبيته عبر مدير حزم مثل Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### المنسّقات
|
||||
|
||||
يمكنك ضبط منسّقات الشفرة عبر الخيار `formatter`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول المنسّقات هنا](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### الأذونات
|
||||
|
||||
افتراضيًا يسمح opencode **بجميع العمليات** دون الحاجة إلى موافقة صريحة. يمكنك تغيير ذلك عبر الخيار `permission`.
|
||||
|
||||
على سبيل المثال، لضمان أن أداتي `edit` و`bash` تتطلبان موافقة المستخدم:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول الأذونات هنا](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### ضغط السياق
|
||||
|
||||
يمكنك التحكم في سلوك ضغط السياق عبر الخيار `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - ضغط الجلسة تلقائيًا عند امتلاء السياق (الافتراضي: `true`).
|
||||
- `prune` - إزالة مخرجات الأدوات القديمة لتوفير الرموز (tokens) (الافتراضي: `true`).
|
||||
- `reserved` - مخزن مؤقت للرموز (tokens) من أجل الضغط. يترك نافذة كافية لتجنب الفيضان أثناء الضغط.
|
||||
|
||||
---
|
||||
|
||||
### المراقِب
|
||||
|
||||
يمكنك ضبط أنماط التجاهل لمراقِب الملفات عبر الخيار `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتبع الأنماط صياغة `glob`. استخدم ذلك لاستبعاد الأدلة المزدحمة من مراقبة الملفات.
|
||||
|
||||
---
|
||||
|
||||
### خوادم MCP
|
||||
|
||||
يمكنك ضبط خوادم MCP التي تريد استخدامها عبر الخيار `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### الإضافات
|
||||
|
||||
[الإضافات](/docs/plugins) توسّع OpenCode بأدوات وخُطافات وتكاملات مخصصة.
|
||||
|
||||
ضع ملفات الإضافات في `.opencode/plugins/` أو `~/.config/opencode/plugins/`. يمكنك أيضًا تحميل إضافات من npm عبر الخيار `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### التعليمات
|
||||
|
||||
يمكنك ضبط التعليمات الخاصة بالنموذج الذي تستخدمه عبر الخيار `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يقبل هذا مصفوفة من المسارات وأنماط `glob` لملفات التعليمات. [تعرف على المزيد
|
||||
حول القواعد هنا](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### المزوّدون المعطّلون
|
||||
|
||||
يمكنك تعطيل المزوّدين الذين يتم تحميلهم تلقائيًا عبر الخيار `disabled_providers`. هذا مفيد عندما تريد منع تحميل مزوّدين معينين حتى لو كانت بيانات الاعتماد الخاصة بهم متاحة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
الخيار `disabled_providers` له أولوية على `enabled_providers`.
|
||||
:::
|
||||
|
||||
يقبل الخيار `disabled_providers` مصفوفة من معرفات المزوّدين. عند تعطيل مزوّد:
|
||||
|
||||
- لن يتم تحميله حتى لو كانت متغيرات البيئة مضبوطة.
|
||||
- لن يتم تحميله حتى لو كانت مفاتيح API مضبوطة عبر الأمر `/connect`.
|
||||
- لن تظهر نماذج هذا المزوّد في قائمة اختيار النموذج.
|
||||
|
||||
---
|
||||
|
||||
### المزوّدون المفعّلون
|
||||
|
||||
يمكنك تحديد قائمة سماح للمزوّدين عبر الخيار `enabled_providers`. عند ضبطه، سيتم تفعيل المزوّدين المحددين فقط وسيتم تجاهل البقية.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
هذا مفيد عندما تريد تقييد OpenCode لاستخدام مزوّدين محددين بدلًا من تعطيلهم واحدًا تلو الآخر.
|
||||
|
||||
:::note
|
||||
الخيار `disabled_providers` له أولوية على `enabled_providers`.
|
||||
:::
|
||||
|
||||
إذا ظهر مزوّد ضمن كل من `enabled_providers` و`disabled_providers`، تكون أولوية `disabled_providers` أعلى للتوافق مع الإصدارات السابقة.
|
||||
|
||||
---
|
||||
|
||||
### تجريبي
|
||||
|
||||
يحتوي المفتاح `experimental` على خيارات قيد التطوير النشط.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
الخيارات التجريبية غير مستقرة. قد تتغير أو تُزال دون إشعار.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## المتغيرات
|
||||
|
||||
يمكنك استخدام استبدال المتغيرات في ملفات الإعدادات للإشارة إلى متغيرات البيئة ومحتويات الملفات.
|
||||
|
||||
---
|
||||
|
||||
### متغيرات البيئة
|
||||
|
||||
استخدم `{env:VARIABLE_NAME}` لاستبدال متغيرات البيئة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يكن متغير البيئة مضبوطًا، فسيتم استبداله بسلسلة فارغة.
|
||||
|
||||
---
|
||||
|
||||
### الملفات
|
||||
|
||||
استخدم `{file:path/to/file}` لاستبدال محتويات ملف:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن أن تكون مسارات الملفات:
|
||||
|
||||
- نسبية إلى دليل ملف الإعدادات
|
||||
- أو مسارات مطلقة تبدأ بـ `/` أو `~`
|
||||
|
||||
يُفيد ذلك في:
|
||||
|
||||
- الاحتفاظ بالبيانات الحساسة مثل مفاتيح API في ملفات منفصلة.
|
||||
- تضمين ملفات تعليمات كبيرة دون تشويش ملف الإعدادات.
|
||||
- مشاركة مقتطفات إعدادات مشتركة عبر عدة ملفات إعدادات.
|
||||
196
qimingcode/packages/web/src/content/docs/ar/custom-tools.mdx
Normal file
196
qimingcode/packages/web/src/content/docs/ar/custom-tools.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: الأدوات المخصصة
|
||||
description: أنشئ أدوات يمكن لـ LLM استدعاؤها في opencode.
|
||||
---
|
||||
|
||||
الأدوات المخصصة هي دوال تنشئها يمكن لـ LLM استدعاؤها أثناء المحادثات. تعمل جنبا إلى جنب مع [الأدوات المدمجة](/docs/tools) في opencode مثل `read` و`write` و`bash`.
|
||||
|
||||
---
|
||||
|
||||
## إنشاء أداة
|
||||
|
||||
تُعرّف الأدوات كملفات **TypeScript** أو **JavaScript**. لكن تعريف الأداة يمكنه استدعاء سكربتات مكتوبة **بأي لغة** — إذ تُستخدم TypeScript أو JavaScript فقط لتعريف الأداة نفسه.
|
||||
|
||||
---
|
||||
|
||||
### الموقع
|
||||
|
||||
يمكن تعريفها:
|
||||
|
||||
- محليا بوضعها في مجلد `.opencode/tools/` داخل مشروعك.
|
||||
- أو عالميا بوضعها في `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### البنية
|
||||
|
||||
أسهل طريقة لإنشاء أدوات هي استخدام المساعد `tool()` الذي يوفر أمان الأنواع والتحقق.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
يصبح **اسم الملف** هو **اسم الأداة**. المثال أعلاه ينشئ أداة باسم `database`.
|
||||
|
||||
---
|
||||
|
||||
#### عدة أدوات في ملف واحد
|
||||
|
||||
يمكنك أيضا تصدير عدة أدوات من ملف واحد. يصبح كل تصدير **أداة مستقلة** باسم **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
ينشئ هذا أداتين: `math_add` و`math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
#### تضارب الأسماء مع الأدوات المدمجة
|
||||
|
||||
تُصنّف الأدوات المخصصة حسب اسم الأداة. إذا استخدمت أداة مخصصة نفس اسم أداة مدمجة، فإن الأداة المخصصة تأخذ الأولوية.
|
||||
|
||||
على سبيل المثال، يستبدل هذا الملف أداة `bash` المدمجة:
|
||||
|
||||
```ts title=".opencode/tools/bash.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Restricted bash wrapper",
|
||||
args: {
|
||||
command: tool.schema.string(),
|
||||
},
|
||||
async execute(args) {
|
||||
return `blocked: ${args.command}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
:::note
|
||||
فضّل استخدام أسماء فريدة ما لم تكن تريد استبدال أداة مدمجة عمدا. إذا كنت تريد تعطيل أداة مدمجة ولكن لا تريد استبدالها، استخدم [الأذونات](/docs/permissions).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### الوسائط
|
||||
|
||||
يمكنك استخدام `tool.schema`، وهو في الأساس [Zod](https://zod.dev)، لتعريف أنواع الوسائط.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا استيراد [Zod](https://zod.dev) مباشرة وإرجاع كائن عادي:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### السياق
|
||||
|
||||
تستقبل الأدوات سياقا حول الجلسة الحالية:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
استخدم `context.directory` لدليل العمل الخاص بالجلسة.
|
||||
استخدم `context.worktree` لجذر شجرة العمل (worktree) في git.
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
### كتابة أداة بلغة Python
|
||||
|
||||
يمكنك كتابة أدواتك بأي لغة تريدها. إليك مثالا يجمع رقمين باستخدام Python.
|
||||
|
||||
أولا، أنشئ الأداة كسكربت Python:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
ثم أنشئ تعريف الأداة الذي يستدعيه:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
هنا نستخدم أداة [`Bun.$`](https://bun.com/docs/runtime/shell) لتشغيل سكربت Python.
|
||||
78
qimingcode/packages/web/src/content/docs/ar/ecosystem.mdx
Normal file
78
qimingcode/packages/web/src/content/docs/ar/ecosystem.mdx
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
title: النظام البيئي
|
||||
description: مشاريع وتكاملات مبنية باستخدام OpenCode.
|
||||
---
|
||||
|
||||
مجموعة من مشاريع المجتمع المبنية على OpenCode.
|
||||
|
||||
:::note
|
||||
هل تريد إضافة مشروعك المتعلق بـ OpenCode إلى هذه القائمة؟ أرسل طلب سحب (PR).
|
||||
:::
|
||||
|
||||
يمكنك أيضًا الاطلاع على [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) و [opencode.cafe](https://opencode.cafe)، وهو مجتمع يجمع النظام البيئي والمجتمع.
|
||||
|
||||
---
|
||||
|
||||
## الإضافات
|
||||
|
||||
| الاسم | الوصف |
|
||||
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | تشغيل جلسات OpenCode تلقائيًا في صناديق حماية Daytona معزولة مع مزامنة git ومعاينات حية |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | حقن ترويسات جلسة Helicone تلقائيًا لتجميع الطلبات |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | حقن أنواع TypeScript/Svelte تلقائيًا في عمليات قراءة الملفات باستخدام أدوات البحث |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | استخدام اشتراك ChatGPT Plus/Pro الخاص بك بدلاً من أرصدة API |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | استخدام خطة Gemini الحالية الخاصة بك بدلاً من فوترة API |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | استخدام نماذج Antigravity المجانية بدلاً من فوترة API |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | عزل devcontainer متعدد الفروع مع نسخ shallow ومنافذ معينة تلقائيًا |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | إضافة Google Antigravity OAuth، مع دعم بحث Google، ومعالجة API أكثر قوة |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | تحسين استخدام التوكنات عن طريق تقليم مخرجات الأدوات القديمة |
|
||||
| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | تنقيح الأسرار/بيانات التعريف الشخصي (PII) إلى نصوص بديلة بأسلوب VibeGuard قبل استدعاءات LLM؛ واستعادتها محليًا |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | إضافة دعم بحث الويب الأصلي للموفرين المدعومين بأسلوب Google grounded |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | تمكين وكلاء الذكاء الاصطناعي من تشغيل عمليات الخلفية في PTY، وإرسال مدخلات تفاعلية إليها. |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | تعليمات لأوامر shell غير التفاعلية - تمنع التعليق الناتج عن العمليات المعتمدة على TTY |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | تتبع استخدام OpenCode باستخدام Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | تنظيف جداول markdown التي تنتجها LLMs |
|
||||
| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | تحرير Fast Apply وبحث WarpGrep في قاعدة الكود وضغط السياق عبر Morph |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | وكلاء الخلفية، وأدوات LSP/AST/MCP المعدة مسبقًا، ووكلاء مختارون، متوافق مع Claude Code |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | إشعارات سطح المكتب وتنبيهات صوتية لجلسات OpenCode |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | إشعارات سطح المكتب وتنبيهات صوتية لأحداث الإذن والاكتمال والخطأ |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | تسمية جلسات Zellij تلقائيًا بدعم الذكاء الاصطناعي بناءً على سياق OpenCode |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | السماح لوكلاء OpenCode بتحميل المطالبات (prompts) بشكل كسول عند الطلب مع اكتشاف المهارات وحقنها |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | ذاكرة مستمرة عبر الجلسات باستخدام Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | مراجعة تفاعلية للخطة مع تعليقات توضيحية مرئية ومشاركة خاصة/بدون اتصال |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | توسيع opencode /commands إلى نظام تنسيق قوي مع تحكم دقيق في التدفق |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | جدولة الوظائف المتكررة باستخدام launchd (Mac) أو systemd (Linux) بصيغة cron |
|
||||
| [micode](https://github.com/vtemian/micode) | سير عمل منظم: عصف ذهني ← تخطيط ← تنفيذ مع استمرارية الجلسة |
|
||||
| [octto](https://github.com/vtemian/octto) | واجهة مستخدم تفاعلية للمتصفح للعصف الذهني بالذكاء الاصطناعي مع نماذج متعددة الأسئلة |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | وكلاء خلفية بأسلوب Claude Code مع تفويض غير متزامن واستمرارية السياق |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | إشعارات نظام التشغيل الأصلية لـ OpenCode – اعرف متى تكتمل المهام |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | حزمة تنسيق متعددة الوكلاء – 16 مكونًا، تثبيت واحد |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | أشجار عمل git (worktrees) خالية من الاحتكاك لـ OpenCode |
|
||||
| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | تتبع وتصحيح أخطاء وكلاء الذكاء الاصطناعي باستخدام Sentry AI Monitoring |
|
||||
|
||||
---
|
||||
|
||||
## المشاريع
|
||||
|
||||
| الاسم | الوصف |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | بوت Discord للتحكم في جلسات OpenCode، مبني على SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | إضافة Neovim للمطالبات المدركة للمحرر، مبنية على API |
|
||||
| [portal](https://github.com/hosenur/portal) | واجهة ويب مخصصة للجوال لـ OpenCode عبر Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | قالب لبناء إضافات OpenCode |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | واجهة Neovim لـ opencode - وكيل برمجة بالذكاء الاصطناعي يعتمد على الطرفية |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | موفر Vercel AI SDK لاستخدام OpenCode عبر @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | تطبيق ويب / سطح مكتب وامتداد VS Code لـ OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | إضافة Obsidian تدمج OpenCode في واجهة مستخدم Obsidian |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | بديل مفتوح المصدر لـ Claude Cowork، مدعوم بواسطة OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | مدير امتدادات OpenCode مع ملفات تعريف محمولة ومعزولة. |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | تطبيق عميل لسطح المكتب والويب والجوال وعن بعد لـ OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## الوكلاء
|
||||
|
||||
| الاسم | الوصف |
|
||||
| ----------------------------------------------------------------- | ------------------------------------------------ |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | وكلاء ذكاء اصطناعي وأوامر معيارية للتطوير المنظم |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | تكوينات، ومطالبات، ووكلاء، وإضافات لسير عمل محسن |
|
||||
165
qimingcode/packages/web/src/content/docs/ar/enterprise.mdx
Normal file
165
qimingcode/packages/web/src/content/docs/ar/enterprise.mdx
Normal file
@@ -0,0 +1,165 @@
|
||||
---
|
||||
title: المؤسسات
|
||||
description: استخدام OpenCode بأمان داخل مؤسستك.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك.
|
||||
|
||||
:::note
|
||||
لا يقوم OpenCode بتخزين أي من شيفرتك أو بيانات السياق.
|
||||
:::
|
||||
|
||||
لبدء استخدام OpenCode Enterprise:
|
||||
|
||||
1. أجرِ تجربة داخلية مع فريقك.
|
||||
2. **<a href={email}>اتصل بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
---
|
||||
|
||||
## تجربة
|
||||
|
||||
OpenCode مفتوح المصدر ولا يخزن أي من شيفرتك أو بيانات السياق، لذا يمكن للمطورين لديك ببساطة [البدء](/docs/) وإجراء تجربة.
|
||||
|
||||
---
|
||||
|
||||
### التعامل مع البيانات
|
||||
|
||||
**لا يقوم OpenCode بتخزين شيفرتك أو بيانات السياق.** تتم جميع المعالجة محليا أو عبر استدعاءات API مباشرة إلى مزود AI لديك.
|
||||
|
||||
وهذا يعني أنه طالما أنك تستخدم مزودا تثق به، أو بوابة AI داخلية، يمكنك استخدام OpenCode بأمان.
|
||||
|
||||
الاستثناء الوحيد هنا هو ميزة `/share` الاختيارية.
|
||||
|
||||
---
|
||||
|
||||
#### مشاركة المحادثات
|
||||
|
||||
إذا فعّل المستخدم ميزة `/share`، فسيتم إرسال المحادثة والبيانات المرتبطة بها إلى الخدمة التي نستخدمها لاستضافة صفحات المشاركة هذه على opencode.ai.
|
||||
|
||||
يتم تقديم البيانات حاليا عبر شبكة الحافة الخاصة بـ CDN لدينا، وتُخزّن مؤقتا على الحافة بالقرب من مستخدميك.
|
||||
|
||||
نوصي بتعطيل ذلك أثناء التجربة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[تعرّف على المزيد حول المشاركة](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### ملكية الشيفرة
|
||||
|
||||
**أنت تملك كل الشيفرة التي ينتجها OpenCode.** لا توجد قيود ترخيص أو مطالبات بالملكية.
|
||||
|
||||
---
|
||||
|
||||
## التسعير
|
||||
|
||||
نستخدم نموذج تسعير لكل مقعد في OpenCode Enterprise. إذا كانت لديك بوابة LLM خاصة بك، فلن نفرض رسوما على الرموز (tokens) المستخدمة. لمزيد من التفاصيل حول التسعير وخيارات التنفيذ، **<a href={email}>اتصل بنا</a>**.
|
||||
|
||||
---
|
||||
|
||||
## النشر
|
||||
|
||||
بعد إكمال التجربة وعندما تكون جاهزا لاستخدام OpenCode داخل مؤسستك، يمكنك **<a href={email}>الاتصال بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات المركزية
|
||||
|
||||
يمكننا إعداد OpenCode لاستخدام إعدادات مركزية واحدة لكامل مؤسستك.
|
||||
|
||||
يمكن لهذه الإعدادات المركزية أن تتكامل مع مزود SSO لديك، وتضمن أن جميع المستخدمين يصلون فقط إلى بوابة AI الداخلية لديك.
|
||||
|
||||
---
|
||||
|
||||
### تكامل SSO
|
||||
|
||||
عبر الإعدادات المركزية، يمكن لـ OpenCode التكامل مع مزود SSO في مؤسستك لأغراض المصادقة.
|
||||
|
||||
يتيح ذلك لـ OpenCode الحصول على بيانات الاعتماد لبوابة AI الداخلية لديك عبر نظام إدارة الهوية الحالي لديك.
|
||||
|
||||
---
|
||||
|
||||
### بوابة AI الداخلية
|
||||
|
||||
مع الإعدادات المركزية، يمكن أيضا تهيئة OpenCode لاستخدام بوابة AI الداخلية لديك فقط.
|
||||
|
||||
يمكنك أيضا تعطيل جميع مزودي AI الآخرين، لضمان مرور جميع الطلبات عبر البنية التحتية المعتمدة في مؤسستك.
|
||||
|
||||
---
|
||||
|
||||
### الاستضافة الذاتية
|
||||
|
||||
بينما نوصي بتعطيل صفحات المشاركة لضمان ألا تغادر بياناتك مؤسستك مطلقا، يمكننا أيضا مساعدتك على استضافتها ذاتيا على بنيتك التحتية.
|
||||
|
||||
هذا موجود حاليا على خارطة طريقنا. إذا كنت مهتما، **<a href={email}>أخبرنا</a>**.
|
||||
|
||||
---
|
||||
|
||||
## الأسئلة الشائعة
|
||||
|
||||
<details>
|
||||
<summary>ما هو OpenCode Enterprise؟</summary>
|
||||
|
||||
OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>كيف أبدأ باستخدام OpenCode Enterprise؟</summary>
|
||||
|
||||
ابدأ ببساطة بتجربة داخلية مع فريقك. لا يقوم OpenCode افتراضيا بتخزين شيفرتك أو بيانات السياق، مما يجعل البدء سهلا.
|
||||
|
||||
ثم **<a href={email}>اتصل بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>كيف يعمل تسعير المؤسسات؟</summary>
|
||||
|
||||
نقدم تسعيرا للمؤسسات لكل مقعد. إذا كانت لديك بوابة LLM خاصة بك، فلن نفرض رسوما على الرموز (tokens) المستخدمة. لمزيد من التفاصيل، **<a href={email}>اتصل بنا</a>** للحصول على عرض سعر مخصص بناء على احتياجات مؤسستك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>هل بياناتي آمنة مع OpenCode Enterprise؟</summary>
|
||||
|
||||
نعم. لا يقوم OpenCode بتخزين شيفرتك أو بيانات السياق. تتم جميع المعالجة محليا أو عبر استدعاءات API مباشرة إلى مزود AI لديك. ومع الإعدادات المركزية وتكامل SSO، تظل بياناتك آمنة داخل البنية التحتية لمؤسستك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>هل يمكننا استخدام سجل NPM خاص بنا؟</summary>
|
||||
|
||||
يدعم OpenCode سجلات npm الخاصة عبر دعم Bun الأصلي لملف `.npmrc`. إذا كانت مؤسستك تستخدم سجلا خاصا مثل JFrog Artifactory أو Nexus أو ما شابه ذلك، فتأكد من مصادقة المطورين قبل تشغيل OpenCode.
|
||||
|
||||
لإعداد المصادقة مع السجل الخاص بك:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى إنشاء `~/.npmrc` مع تفاصيل المصادقة. سيلتقط OpenCode هذا تلقائيا.
|
||||
|
||||
:::caution
|
||||
يجب أن تكون مسجلا الدخول إلى السجل الخاص قبل تشغيل OpenCode.
|
||||
:::
|
||||
|
||||
بدلا من ذلك، يمكنك تهيئة ملف `.npmrc` يدويا:
|
||||
|
||||
```bash title="~/.npmrc"
|
||||
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
|
||||
```
|
||||
|
||||
يجب أن يكون المطورون مسجلين الدخول إلى السجل الخاص قبل تشغيل OpenCode لضمان إمكانية تثبيت الحزم من سجل مؤسستك.
|
||||
|
||||
</details>
|
||||
131
qimingcode/packages/web/src/content/docs/ar/formatters.mdx
Normal file
131
qimingcode/packages/web/src/content/docs/ar/formatters.mdx
Normal file
@@ -0,0 +1,131 @@
|
||||
---
|
||||
title: المُنسِّقات
|
||||
description: يستخدم OpenCode مُنسِّقات خاصة بكل لغة.
|
||||
---
|
||||
|
||||
يُنسِّق OpenCode الملفات تلقائيا بعد كتابتها أو تعديلها باستخدام مُنسِّقات خاصة بكل لغة. يضمن ذلك أن الشيفرة التي يتم توليدها تتبع أساليب التنسيق المعتمدة في مشروعك.
|
||||
|
||||
---
|
||||
|
||||
## مُضمَّنة
|
||||
|
||||
يأتي OpenCode مع عدة مُنسِّقات مُضمَّنة للغات وأطر العمل الشائعة. فيما يلي قائمة بالمُنسِّقات وامتدادات الملفات المدعومة والأوامر أو خيارات الإعداد التي تحتاجها.
|
||||
|
||||
| المُنسِّق | الامتدادات | المتطلبات |
|
||||
| -------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | يتوفر أمر `gofmt` |
|
||||
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | يتوفر أمر `mix` |
|
||||
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، و[غير ذلك](https://prettier.io/docs/en/index.html) | وجود اعتماد `prettier` في `package.json` |
|
||||
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، و[غير ذلك](https://biomejs.dev/) | ملف إعداد `biome.json(c)` |
|
||||
| zig | .zig, .zon | يتوفر أمر `zig` |
|
||||
| clang-format | .c, .cpp, .h, .hpp, .ino، و[غير ذلك](https://clang.llvm.org/docs/ClangFormat.html) | ملف إعداد `.clang-format` |
|
||||
| ktlint | .kt, .kts | يتوفر أمر `ktlint` |
|
||||
| ruff | .py, .pyi | يتوفر أمر `ruff` مع إعداد |
|
||||
| rustfmt | .rs | يتوفر أمر `rustfmt` |
|
||||
| cargofmt | .rs | يتوفر أمر `cargo fmt` |
|
||||
| uv | .py, .pyi | يتوفر أمر `uv` |
|
||||
| rubocop | .rb, .rake, .gemspec, .ru | يتوفر أمر `rubocop` |
|
||||
| standardrb | .rb, .rake, .gemspec, .ru | يتوفر أمر `standardrb` |
|
||||
| htmlbeautifier | .erb, .html.erb | يتوفر أمر `htmlbeautifier` |
|
||||
| air | .R | يتوفر أمر `air` |
|
||||
| dart | .dart | يتوفر أمر `dart` |
|
||||
| dfmt | .d | يتوفر أمر `dfmt` |
|
||||
| ocamlformat | .ml, .mli | يتوفر أمر `ocamlformat` وملف إعداد `.ocamlformat` |
|
||||
| terraform | .tf, .tfvars | يتوفر أمر `terraform` |
|
||||
| gleam | .gleam | يتوفر أمر `gleam` |
|
||||
| nixfmt | .nix | يتوفر أمر `nixfmt` |
|
||||
| shfmt | .sh, .bash | يتوفر أمر `shfmt` |
|
||||
| pint | .php | وجود اعتماد `laravel/pint` في `composer.json` |
|
||||
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | وجود اعتماد `oxfmt` في `package.json` و[علم متغير بيئة تجريبي](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | يتوفر أمر `ormolu` |
|
||||
|
||||
لذا إذا كان مشروعك يتضمن `prettier` ضمن `package.json`، فسيستخدمه OpenCode تلقائيا.
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
عندما يكتب OpenCode ملفا أو يحرره، فإنه:
|
||||
|
||||
1. يتحقق من امتداد الملف مقابل جميع المُنسِّقات المفعّلة.
|
||||
2. يشغّل أمر المُنسِّق المناسب على الملف.
|
||||
3. يطبق تغييرات التنسيق تلقائيا.
|
||||
|
||||
تتم هذه العملية في الخلفية لضمان الحفاظ على أساليب تنسيق الشيفرة دون أي خطوات يدوية.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص المُنسِّقات عبر قسم `formatter` في إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
يدعم إعداد كل مُنسِّق ما يلي:
|
||||
|
||||
| الخاصية | النوع | الوصف |
|
||||
| ------------- | -------- | ------------------------------------------------------ |
|
||||
| `disabled` | boolean | اضبطها على `true` لتعطيل المُنسِّق |
|
||||
| `command` | string[] | الأمر الذي سيتم تشغيله للتنسيق |
|
||||
| `environment` | object | متغيرات البيئة التي يتم ضبطها عند تشغيل المُنسِّق |
|
||||
| `extensions` | string[] | امتدادات الملفات التي يجب أن يتعامل معها هذا المُنسِّق |
|
||||
|
||||
لنلقِ نظرة على بعض الأمثلة.
|
||||
|
||||
---
|
||||
|
||||
### تعطيل المُنسِّقات
|
||||
|
||||
لتعطيل **جميع** المُنسِّقات على مستوى عام، اضبط `formatter` على `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
لتعطيل مُنسِّق **محدد**، اضبط `disabled` على `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### مُنسِّقات مخصّصة
|
||||
|
||||
يمكنك تجاوز المُنسِّقات المُضمَّنة أو إضافة مُنسِّقات جديدة عبر تحديد الأمر ومتغيرات البيئة وامتدادات الملفات:
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
},
|
||||
"custom-markdown-formatter": {
|
||||
"command": ["deno", "fmt", "$FILE"],
|
||||
"extensions": [".md"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
سيتم استبدال **العنصر النائب `$FILE`** في الأمر بمسار الملف الذي يجري تنسيقه.
|
||||
321
qimingcode/packages/web/src/content/docs/ar/github.mdx
Normal file
321
qimingcode/packages/web/src/content/docs/ar/github.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: استخدم OpenCode في GitHub Issues وPull Requests.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitHub لديك. اذكر `/opencode` أو `/oc` في تعليقك، وسيقوم OpenCode بتنفيذ المهام داخل GitHub Actions runner لديك.
|
||||
|
||||
---
|
||||
|
||||
## الميزات
|
||||
|
||||
- **فرز Issues**: اطلب من OpenCode الاطلاع على Issue وشرحها لك.
|
||||
- **إصلاح وتنفيذ**: اطلب من OpenCode إصلاح Issue أو تنفيذ ميزة. وسيعمل على فرع جديد ويقدّم PR يضم كل التغييرات.
|
||||
- **آمن**: يعمل OpenCode داخل GitHub runners لديك.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
شغّل الأمر التالي داخل مشروع موجود في مستودع GitHub:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
سيأخذك هذا خلال تثبيت GitHub app، وإنشاء workflow، وإعداد secrets.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد اليدوي
|
||||
|
||||
أو يمكنك إعداده يدويًا.
|
||||
|
||||
1. **تثبيت GitHub app**
|
||||
|
||||
انتقل إلى [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). تأكد من تثبيته على المستودع الهدف.
|
||||
|
||||
2. **إضافة الـworkflow**
|
||||
|
||||
أضف ملف الـworkflow التالي إلى `.github/workflows/opencode.yml` في مستودعك. تأكد من ضبط `model` المناسب ومفاتيح API المطلوبة ضمن `env`.
|
||||
|
||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
||||
name: opencode
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
if: |
|
||||
contains(github.event.comment.body, '/oc') ||
|
||||
contains(github.event.comment.body, '/opencode')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
# share: true
|
||||
# github_token: xxxx
|
||||
```
|
||||
|
||||
3. **تخزين مفاتيح API ضمن secrets**
|
||||
|
||||
في **settings** الخاصة بالمؤسسة أو المشروع، وسّع **Secrets and variables** في الشريط الجانبي الأيسر ثم اختر **Actions**، وأضف مفاتيح API المطلوبة.
|
||||
|
||||
---
|
||||
|
||||
## الإعدادات
|
||||
|
||||
- `model`: النموذج الذي سيستخدمه OpenCode. يأخذ الصيغة `provider/model`. هذا **مطلوب**.
|
||||
- `agent`: الـagent الذي سيتم استخدامه. يجب أن يكون agent أساسيًا. يعود افتراضيًا إلى `default_agent` من الإعدادات أو `"build"` إذا لم يُعثر عليه.
|
||||
- `share`: هل تتم مشاركة جلسة OpenCode. القيمة الافتراضية **true** للمستودعات العامة.
|
||||
- `prompt`: موجه مخصص اختياري لتجاوز السلوك الافتراضي. استخدمه لتخصيص كيفية معالجة OpenCode للطلبات.
|
||||
- `token`: GitHub access token اختياري لتنفيذ عمليات مثل إنشاء التعليقات، وcommit للتغييرات، وفتح Pull Requests. افتراضيًا يستخدم OpenCode installation access token الخاص بـOpenCode GitHub App، لذا تظهر commits والتعليقات وPull Requests وكأنها صادرة من التطبيق.
|
||||
|
||||
بدلًا من ذلك، يمكنك استخدام [`GITHUB_TOKEN` المدمج](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) في GitHub Action runner دون تثبيت OpenCode GitHub App. فقط تأكد من منح الأذونات المطلوبة في الـworkflow:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
يمكنك أيضًا استخدام [رموز الوصول الشخصية](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) إن فضّلت ذلك.
|
||||
|
||||
---
|
||||
|
||||
## الأحداث المدعومة
|
||||
|
||||
يمكن تشغيل OpenCode عبر أحداث GitHub التالية:
|
||||
|
||||
| نوع الحدث | يتم تشغيله عبر | التفاصيل |
|
||||
| ----------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | تعليق على Issue أو PR | اذكر `/opencode` أو `/oc` في تعليقك. يقرأ OpenCode السياق ويمكنه إنشاء فروع، وفتح PRs، أو الرد. |
|
||||
| `pull_request_review_comment` | تعليق على أسطر كود محددة في PR | اذكر `/opencode` أو `/oc` أثناء مراجعة الكود. يستلم OpenCode مسار الملف وأرقام الأسطر وسياق الـdiff. |
|
||||
| `issues` | فتح Issue أو تعديلها | تشغيل OpenCode تلقائيًا عند إنشاء Issues أو تعديلها. يتطلب إدخال `prompt`. |
|
||||
| `pull_request` | فتح PR أو تحديثه | تشغيل OpenCode تلقائيًا عند فتح PRs أو مزامنتها أو إعادة فتحها. مفيد للمراجعات الآلية. |
|
||||
| `schedule` | جدول يعتمد على Cron | تشغيل OpenCode وفق جدول. يتطلب إدخال `prompt`. يذهب الناتج إلى logs وPRs (لا يوجد Issue للتعليق عليها). |
|
||||
| `workflow_dispatch` | تشغيل يدوي من واجهة GitHub | تشغيل OpenCode عند الطلب عبر Actions tab. يتطلب إدخال `prompt`. يذهب الناتج إلى logs وPRs. |
|
||||
|
||||
### مثال للجدولة
|
||||
|
||||
شغّل OpenCode وفق جدول لتنفيذ مهام آلية:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Scheduled OpenCode Task
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Every Monday at 9am UTC
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review the codebase for any TODO comments and create a summary.
|
||||
If you find issues worth addressing, open an issue to track them.
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `schedule`، يكون إدخال `prompt` **مطلوبًا** لعدم وجود تعليق لاستخراج التعليمات منه. تعمل عمليات الـworkflow المجدولة دون سياق مستخدم للتحقق من الأذونات، لذا يجب أن يمنح الـworkflow صلاحيات `contents: write` و`pull-requests: write` إذا كنت تتوقع أن ينشئ OpenCode فروعًا أو PRs.
|
||||
|
||||
---
|
||||
|
||||
### مثال Pull Request
|
||||
|
||||
راجع PRs تلقائيًا عند فتحها أو تحديثها:
|
||||
|
||||
```yaml title=".github/workflows/opencode-review.yml"
|
||||
name: opencode-review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
use_github_token: true
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `pull_request`، إذا لم يتم توفير `prompt`، فإن OpenCode يراجع Pull Request افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
### مثال فرز Issues
|
||||
|
||||
قم بفرز Issues الجديدة تلقائيًا. يقوم هذا المثال بتصفية الحسابات الأقدم من 30 يومًا لتقليل الرسائل المزعجة:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Issue Triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Check account age
|
||||
id: check
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const user = await github.rest.users.getByUsername({
|
||||
username: context.payload.issue.user.login
|
||||
});
|
||||
const created = new Date(user.data.created_at);
|
||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
||||
return days >= 30;
|
||||
result-encoding: string
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
if: steps.check.outputs.result == 'true'
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
if: steps.check.outputs.result == 'true'
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review this issue. If there's a clear fix or relevant docs:
|
||||
- Provide documentation links
|
||||
- Add error handling guidance for code examples
|
||||
Otherwise, do not comment.
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `issues`، يكون إدخال `prompt` **مطلوبًا** لعدم وجود تعليق لاستخراج التعليمات منه.
|
||||
|
||||
---
|
||||
|
||||
## الموجهات المخصصة
|
||||
|
||||
قم بتجاوز الموجه الافتراضي لتخصيص سلوك OpenCode ضمن الـworkflow لديك.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
يفيد ذلك في فرض معايير مراجعة محددة، أو معايير كتابة الكود، أو مجالات تركيز تناسب مشروعك.
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
إليك بعض الأمثلة على كيفية استخدام OpenCode في GitHub.
|
||||
|
||||
- **شرح Issue**
|
||||
|
||||
أضف هذا التعليق داخل GitHub Issue.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
سيقرأ OpenCode كامل النقاش، بما في ذلك جميع التعليقات، ويرد بشرح واضح.
|
||||
|
||||
- **إصلاح Issue**
|
||||
|
||||
داخل GitHub Issue، اكتب:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
وسيُنشئ OpenCode فرعًا جديدًا، وينفّذ التغييرات، ويفتح PR يتضمنها.
|
||||
|
||||
- **مراجعة PRs وإجراء تغييرات**
|
||||
|
||||
اترك التعليق التالي على GitHub PR.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
سينفّذ OpenCode التغيير المطلوب ويعمل له commit إلى نفس PR.
|
||||
|
||||
- **مراجعة أسطر كود محددة**
|
||||
|
||||
اترك تعليقًا مباشرة على أسطر الكود في تبويب "Files" داخل PR. يكتشف OpenCode تلقائيًا الملف وأرقام الأسطر وسياق الـdiff لتقديم ردود دقيقة.
|
||||
|
||||
```
|
||||
[Comment on specific lines in Files tab]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
عند التعليق على أسطر محددة، يستلم OpenCode:
|
||||
- الملف الدقيق الذي تتم مراجعته
|
||||
- أسطر الكود المحددة
|
||||
- سياق الـdiff المحيط
|
||||
- معلومات أرقام الأسطر
|
||||
|
||||
يسمح ذلك بطلبات أكثر تحديدًا دون الحاجة لذكر مسارات الملفات أو أرقام الأسطر يدويًا.
|
||||
195
qimingcode/packages/web/src/content/docs/ar/gitlab.mdx
Normal file
195
qimingcode/packages/web/src/content/docs/ar/gitlab.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: استخدم OpenCode في مشكلات GitLab وطلبات الدمج.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitLab لديك عبر خط أنابيب GitLab CI/CD أو عبر GitLab Duo.
|
||||
|
||||
في كلتا الحالتين، سيعمل OpenCode على مشغّلات GitLab لديك.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
يعمل OpenCode ضمن خط أنابيب GitLab عادي. يمكنك دمجه في الخط كمكوّن [CI](https://docs.gitlab.com/ee/ci/components/).
|
||||
|
||||
هنا نستخدم مكوّن CI/CD أنشأه المجتمع لـ OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### الميزات
|
||||
|
||||
- **استخدام إعدادات مخصّصة لكل مهمة**: يمكنك إعداد OpenCode باستخدام دليل إعدادات مخصّص، مثل `./config/#custom-directory`، لتفعيل الوظائف أو تعطيلها في كل تشغيل لـ OpenCode.
|
||||
- **إعداد بسيط**: يقوم مكوّن CI بإعداد OpenCode في الخلفية؛ كل ما عليك هو إنشاء إعدادات OpenCode والمطالبة (prompt) الأولية.
|
||||
- **مرن**: يدعم مكوّن CI عدة مُدخلات لتخصيص سلوكه.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد
|
||||
|
||||
1. احفظ JSON مصادقة OpenCode كمتغيرات بيئة CI من نوع File ضمن **Settings** > **CI/CD** > **Variables**. تأكد من تعيينها على "Masked and hidden".
|
||||
2. أضف ما يلي إلى ملف `.gitlab-ci.yml`.
|
||||
|
||||
```yaml title=".gitlab-ci.yml"
|
||||
include:
|
||||
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
|
||||
inputs:
|
||||
config_dir: ${CI_PROJECT_DIR}/opencode-config
|
||||
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
|
||||
command: optional-custom-command
|
||||
message: "Your prompt here"
|
||||
```
|
||||
|
||||
لمزيد من المُدخلات وحالات الاستخدام، [اطّلع على الوثائق](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) الخاصة بهذا المكوّن.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitLab لديك.
|
||||
اذكر `@opencode` في تعليق، وسينفّذ OpenCode المهام ضمن خط أنابيب GitLab CI لديك.
|
||||
|
||||
---
|
||||
|
||||
### الميزات
|
||||
|
||||
- **فرز المشكلات**: اطلب من OpenCode النظر في مشكلة وشرحها لك.
|
||||
- **الإصلاح والتنفيذ**: اطلب من OpenCode إصلاح مشكلة أو تنفيذ ميزة.
|
||||
سيُنشئ فرعًا جديدًا ويرفع طلب دمج بالتغييرات.
|
||||
- **آمن**: يعمل OpenCode على مشغّلات GitLab لديك.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد
|
||||
|
||||
يعمل OpenCode ضمن خط أنابيب GitLab CI/CD لديك، وإليك ما ستحتاجه لإعداده:
|
||||
|
||||
:::tip
|
||||
اطّلع على [**وثائق GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) للحصول على تعليمات محدّثة.
|
||||
:::
|
||||
|
||||
1. قم بتهيئة بيئة GitLab لديك
|
||||
2. أعد إعداد CI/CD
|
||||
3. احصل على مفتاح API من مزوّد نموذج ذكاء اصطناعي
|
||||
4. أنشئ حساب خدمة
|
||||
5. اضبط متغيرات CI/CD
|
||||
6. أنشئ ملف إعداد للتدفق، وإليك مثالًا:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>إعدادات التدفق</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Installing opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Installing glab"
|
||||
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
|
||||
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
|
||||
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
|
||||
- apt-get install --yes glab
|
||||
- echo "Configuring glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Creating OpenCode auth configuration"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configuring git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testing glab"
|
||||
- glab issue list
|
||||
- echo "Running OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
You are an AI assistant helping with GitLab operations.
|
||||
|
||||
Context: $AI_FLOW_CONTEXT
|
||||
Task: $AI_FLOW_INPUT
|
||||
Event: $AI_FLOW_EVENT
|
||||
|
||||
Please execute the requested task using the available GitLab tools.
|
||||
Be thorough in your analysis and provide clear explanations.
|
||||
|
||||
<important>
|
||||
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
|
||||
|
||||
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
|
||||
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Checking for git changes and pushing if any exist"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Git changes detected, adding and pushing..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "No staged changes to commit"
|
||||
else
|
||||
echo "Committing changes to branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Codex changes"
|
||||
echo "Pushing changes up to $CI_WORKLOAD_REF"
|
||||
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
|
||||
echo "Changes successfully pushed"
|
||||
fi
|
||||
else
|
||||
echo "No git changes detected, skipping push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
يمكنك الرجوع إلى [وثائق GitLab CLI agents](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) للحصول على تعليمات مفصلة.
|
||||
|
||||
---
|
||||
|
||||
### أمثلة
|
||||
|
||||
فيما يلي بعض الأمثلة على كيفية استخدام OpenCode في GitLab.
|
||||
|
||||
:::tip
|
||||
يمكنك ضبطه لاستخدام عبارة تشغيل مختلفة عن `@opencode`.
|
||||
:::
|
||||
|
||||
- **شرح مشكلة**
|
||||
|
||||
أضف هذا التعليق في مشكلة على GitLab.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
سيقرأ OpenCode المشكلة ويرد بشرح واضح.
|
||||
|
||||
- **إصلاح مشكلة**
|
||||
|
||||
في مشكلة على GitLab، قل:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
سيُنشئ OpenCode فرعًا جديدًا، وينفّذ التغييرات، ويفتح طلب دمج بالتغييرات.
|
||||
|
||||
- **مراجعة طلبات الدمج**
|
||||
|
||||
اترك التعليق التالي على طلب دمج في GitLab.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
سيُراجع OpenCode طلب الدمج ويقدّم ملاحظات.
|
||||
182
qimingcode/packages/web/src/content/docs/ar/go.mdx
Normal file
182
qimingcode/packages/web/src/content/docs/ar/go.mdx
Normal file
@@ -0,0 +1,182 @@
|
||||
---
|
||||
title: Go
|
||||
description: اشتراك منخفض التكلفة لنماذج البرمجة المفتوحة.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Go هو اشتراك منخفض التكلفة — **$5 للشهر الأول**، ثم **$10/شهريًا** — يمنحك وصولًا موثوقًا إلى نماذج البرمجة المفتوحة الشائعة.
|
||||
|
||||
:::note
|
||||
OpenCode Go حاليًا في المرحلة التجريبية.
|
||||
:::
|
||||
|
||||
يعمل Go مثل أي مزود آخر في OpenCode. تشترك في OpenCode Go وتحصل على مفتاح API الخاص بك. وهو **اختياري تمامًا**، ولا تحتاج إلى استخدامه لاستخدام OpenCode.
|
||||
|
||||
صُمّم أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر.
|
||||
|
||||
---
|
||||
|
||||
## الخلفية
|
||||
|
||||
أصبحت النماذج المفتوحة جيدة جدًا. فهي الآن تقترب في الأداء من النماذج المملوكة في مهام البرمجة. وبما أن كثيرًا من المزودين يمكنهم تقديمها بشكل تنافسي، فهي عادةً أقل تكلفة بكثير.
|
||||
|
||||
ومع ذلك، قد يكون الحصول على وصول موثوق إليها بزمن استجابة منخفض أمرًا صعبًا. إذ يختلف المزودون في الجودة والتوافر.
|
||||
|
||||
:::tip
|
||||
اختبرنا مجموعة مختارة من النماذج والمزودين الذين يعملون جيدًا مع OpenCode.
|
||||
:::
|
||||
|
||||
لمعالجة ذلك، قمنا بعدة أمور:
|
||||
|
||||
1. اختبرنا مجموعة مختارة من النماذج المفتوحة وتحدثنا مع فرقها حول أفضل طريقة لتشغيلها.
|
||||
2. ثم عملنا مع عدد قليل من المزودين للتأكد من تقديم هذه النماذج بالشكل الصحيح.
|
||||
3. وأخيرًا، أجرينا مقارنات معيارية لمزيج النموذج/المزود، وتوصلنا إلى قائمة نشعر بالثقة في التوصية بها.
|
||||
|
||||
يمنحك OpenCode Go الوصول إلى هذه النماذج مقابل **$5 للشهر الأول**، ثم **$10/شهريًا**.
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
يعمل OpenCode Go مثل أي مزود آخر في OpenCode.
|
||||
|
||||
1. تسجّل الدخول إلى **<a href={console}>OpenCode Zen</a>**، وتشترك في Go، ثم تنسخ مفتاح API الخاص بك.
|
||||
2. تشغّل الأمر `/connect` في TUI، وتختار `OpenCode Go`، ثم تلصق مفتاح API الخاص بك.
|
||||
3. شغّل `/models` في TUI لرؤية قائمة النماذج المتاحة عبر Go.
|
||||
|
||||
:::note
|
||||
يمكن لعضو واحد فقط في كل workspace الاشتراك في OpenCode Go.
|
||||
:::
|
||||
|
||||
تشمل قائمة النماذج الحالية:
|
||||
|
||||
- **GLM-5**
|
||||
- **GLM-5.1**
|
||||
- **Kimi K2.5**
|
||||
- **Kimi K2.6**
|
||||
- **MiMo-V2-Pro**
|
||||
- **MiMo-V2-Omni**
|
||||
- **MiMo-V2.5-Pro**
|
||||
- **MiMo-V2.5**
|
||||
- **MiniMax M2.5**
|
||||
- **Qwen3.5 Plus**
|
||||
- **Qwen3.6 Plus**
|
||||
- **MiniMax M2.7**
|
||||
- **DeepSeek V4 Pro**
|
||||
- **DeepSeek V4 Flash**
|
||||
|
||||
قد تتغير قائمة النماذج مع استمرارنا في اختبار نماذج جديدة وإضافتها.
|
||||
|
||||
---
|
||||
|
||||
## حدود الاستخدام
|
||||
|
||||
يتضمن OpenCode Go الحدود التالية:
|
||||
|
||||
- **حد 5 ساعات** — استخدام بقيمة $12
|
||||
- **الحد الأسبوعي** — استخدام بقيمة $30
|
||||
- **الحد الشهري** — استخدام بقيمة $60
|
||||
|
||||
تُحدَّد الحدود بالقيمة بالدولار. وهذا يعني أن عدد طلباتك الفعلي يعتمد على النموذج الذي تستخدمه. تتيح النماذج الأقل تكلفة مثل MiniMax M2.5 عددًا أكبر من الطلبات، بينما تتيح النماذج الأعلى تكلفة مثل GLM-5.1 عددًا أقل.
|
||||
|
||||
يوضح الجدول أدناه عددًا تقديريًا للطلبات بناءً على أنماط استخدام Go المعتادة:
|
||||
|
||||
| Model | الطلبات لكل 5 ساعات | الطلبات في الأسبوع | الطلبات في الشهر |
|
||||
| ------------------ | ------------------- | ------------------ | ---------------- |
|
||||
| GLM-5.1 | 880 | 2,150 | 4,300 |
|
||||
| GLM-5 | 1,150 | 2,880 | 5,750 |
|
||||
| Kimi K2.5 | 1,850 | 4,630 | 9,250 |
|
||||
| Kimi K2.6 | 1,150 | 2,880 | 5,750 |
|
||||
| MiMo-V2-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2-Omni | 2,150 | 5,450 | 10,900 |
|
||||
| MiMo-V2.5-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2.5 (≤ 256K) | 2,150 | 5,450 | 10,900 |
|
||||
| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 |
|
||||
| MiniMax M2.7 | 3,400 | 8,500 | 17,000 |
|
||||
| MiniMax M2.5 | 6,300 | 15,900 | 31,800 |
|
||||
| Qwen3.5 Plus | 10,200 | 25,200 | 50,500 |
|
||||
| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 |
|
||||
| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 |
|
||||
|
||||
تستند التقديرات إلى متوسطات أنماط الطلبات المرصودة:
|
||||
|
||||
- GLM-5/5.1 — 700 input، و52,000 cached، و150 output tokens لكل طلب
|
||||
- Kimi K2.5/K2.6 — 870 input، و55,000 cached، و200 output tokens لكل طلب
|
||||
- DeepSeek V4 Pro — 750 input، و82,000 cached، و290 output tokens لكل طلب
|
||||
- DeepSeek V4 Flash — 790 input، و68,000 cached، و280 output tokens لكل طلب
|
||||
- MiniMax M2.7/M2.5 — 300 input، و55,000 cached، و125 output tokens لكل طلب
|
||||
- Qwen3.5 Plus — 410 input، و47,000 cached، و140 output tokens لكل طلب
|
||||
- Qwen3.6 Plus — 500 input، و57,000 cached، و190 output tokens لكل طلب
|
||||
- MiMo-V2-Pro — 350 input، و41,000 cached، و250 output tokens لكل طلب
|
||||
- MiMo-V2-Omni — 1000 input، و60,000 cached، و140 output tokens لكل طلب
|
||||
- MiMo-V2.5-Pro — 350 input، و41,000 cached، و250 output tokens لكل طلب
|
||||
- MiMo-V2.5 — 1000 input، و60,000 cached، و140 output tokens لكل طلب
|
||||
|
||||
يمكنك تتبّع استخدامك الحالي في **<a href={console}>console</a>**.
|
||||
|
||||
:::tip
|
||||
إذا وصلت إلى حد الاستخدام، يمكنك الاستمرار في استخدام النماذج المجانية.
|
||||
:::
|
||||
|
||||
قد تتغير حدود الاستخدام مع تعلّمنا من الاستخدام المبكر والملاحظات.
|
||||
|
||||
---
|
||||
|
||||
### الاستخدام بعد تجاوز الحدود
|
||||
|
||||
إذا كان لديك أيضًا رصيد في Zen balance، فيمكنك تفعيل خيار **Use balance** في console. عند تفعيله، سيعود Go إلى استخدام Zen balance الخاص بك بعد بلوغ حدود الاستخدام بدلًا من حظر الطلبات.
|
||||
|
||||
---
|
||||
|
||||
## نقاط النهاية
|
||||
|
||||
يمكنك أيضًا الوصول إلى نماذج Go عبر نقاط نهاية API التالية.
|
||||
|
||||
| Model | Model ID | Endpoint | AI SDK Package |
|
||||
| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- |
|
||||
| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM-5 | glm-5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Pro | mimo-v2-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Omni | mimo-v2-omni | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5-Pro | mimo-v2.5-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5 | mimo-v2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
|
||||
يستخدم [model id](/docs/config/#models) في إعدادات OpenCode لديك التنسيق `opencode-go/<model-id>`. على سبيل المثال، بالنسبة إلى Kimi K2.6، ستستخدم `opencode-go/kimi-k2.6` في إعداداتك.
|
||||
|
||||
---
|
||||
|
||||
### النماذج
|
||||
|
||||
يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/go/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الخصوصية
|
||||
|
||||
صُمّمت هذه الخطة أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. ويتّبع مزودونا سياسة عدم الاحتفاظ بالبيانات، ولا يستخدمون بياناتك لتدريب النماذج.
|
||||
|
||||
---
|
||||
|
||||
## الأهداف
|
||||
|
||||
أنشأنا OpenCode Go من أجل:
|
||||
|
||||
1. جعل البرمجة بالذكاء الاصطناعي **متاحة** لعدد أكبر من الأشخاص عبر اشتراك منخفض التكلفة.
|
||||
2. توفير وصول **موثوق** إلى أفضل نماذج البرمجة المفتوحة.
|
||||
3. تنسيق نماذج **مختبرة وخضعت لمقارنات معيارية** لاستخدامها مع وكلاء البرمجة.
|
||||
4. **عدم فرض قيود ارتباط** من خلال السماح لك أيضًا باستخدام أي مزود آخر مع OpenCode.
|
||||
48
qimingcode/packages/web/src/content/docs/ar/ide.mdx
Normal file
48
qimingcode/packages/web/src/content/docs/ar/ide.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: IDE
|
||||
description: امتداد OpenCode لـ VS Code و Cursor وغيرها من بيئات التطوير
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع VS Code و Cursor أو أي IDE يدعم terminal. ما عليك سوى تشغيل `opencode` في terminal للبدء.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
- **تشغيل سريع**: استخدم `Cmd+Esc` (Mac) أو `Ctrl+Esc` (Windows/Linux) لفتح OpenCode في عرض terminal مقسّم، أو للتركيز على جلسة terminal موجودة إذا كانت قيد التشغيل بالفعل.
|
||||
- **جلسة جديدة**: استخدم `Cmd+Shift+Esc` (Mac) أو `Ctrl+Shift+Esc` (Windows/Linux) لبدء جلسة terminal جديدة لـ OpenCode حتى لو كانت هناك جلسة مفتوحة. يمكنك أيضا النقر على زر OpenCode في واجهة المستخدم.
|
||||
- **وعي بالسياق**: شارك تلقائيا تحديدك الحالي أو تبويبك مع OpenCode.
|
||||
- **اختصارات الإشارة إلى الملفات**: استخدم `Cmd+Option+K` (Mac) أو `Alt+Ctrl+K` (Linux/Windows) لإدراج مراجع الملفات. مثلا: `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
لتثبيت OpenCode على VS Code والتفرعات الشائعة مثل Cursor و Windsurf و VSCodium:
|
||||
|
||||
1. افتح VS Code
|
||||
2. افتح terminal المدمجة
|
||||
3. شغّل `opencode` - سيتم تثبيت الامتداد تلقائيا
|
||||
|
||||
أما إذا كنت تريد استخدام IDE الخاص بك عند تشغيل `/editor` أو `/export` من واجهة TUI، فستحتاج إلى ضبط `export EDITOR="code --wait"`. [اعرف المزيد](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### التثبيت اليدوي
|
||||
|
||||
ابحث عن **OpenCode** في Extension Marketplace وانقر **Install**.
|
||||
|
||||
---
|
||||
|
||||
### استكشاف الأخطاء وإصلاحها
|
||||
|
||||
إذا فشل تثبيت الامتداد تلقائيا:
|
||||
|
||||
- تأكد من أنك تشغّل `opencode` داخل terminal المدمجة.
|
||||
- تأكد من تثبيت CLI الخاصة بـ IDE لديك:
|
||||
- لـ VS Code: أمر `code`
|
||||
- لـ Cursor: أمر `cursor`
|
||||
- لـ Windsurf: أمر `windsurf`
|
||||
- لـ VSCodium: أمر `codium`
|
||||
- إذا لم تكن مثبتة، شغّل `Cmd+Shift+P` (Mac) أو `Ctrl+Shift+P` (Windows/Linux) وابحث عن "Shell Command: Install 'code' command in PATH" (أو ما يعادله في IDE لديك)
|
||||
- تأكد من أن VS Code لديه الصلاحية لتثبيت الامتدادات
|
||||
344
qimingcode/packages/web/src/content/docs/ar/index.mdx
Normal file
344
qimingcode/packages/web/src/content/docs/ar/index.mdx
Normal file
@@ -0,0 +1,344 @@
|
||||
---
|
||||
title: مقدمة
|
||||
description: ابدأ باستخدام OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) هو وكيل ترميز بالذكاء الاصطناعي مفتوح المصدر. يتوفر كواجهة terminal، وتطبيق لسطح المكتب، أو إضافة لبيئة تطوير متكاملة (IDE).
|
||||
|
||||

|
||||
|
||||
لنبدأ.
|
||||
|
||||
---
|
||||
|
||||
#### المتطلبات
|
||||
|
||||
لاستخدام OpenCode في terminal، ستحتاج إلى:
|
||||
|
||||
1. محاكي terminal حديث مثل:
|
||||
- [WezTerm](https://wezterm.org) متعدد المنصات
|
||||
- [Alacritty](https://alacritty.org) متعدد المنصات
|
||||
- [Ghostty](https://ghostty.org) على Linux وmacOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/) على Linux وmacOS
|
||||
|
||||
2. مفاتيح API لمزوّدي نماذج اللغة (LLM) الذين تريد استخدامهم.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
أسهل طريقة لتثبيت OpenCode هي عبر سكربت التثبيت.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
يمكنك أيضا تثبيته عبر الأوامر التالية:
|
||||
|
||||
- **باستخدام Node.js**
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem label="npm">
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Bun">
|
||||
```bash
|
||||
bun install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="pnpm">
|
||||
```bash
|
||||
pnpm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Yarn">
|
||||
```bash
|
||||
yarn global add opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
- **باستخدام Homebrew على macOS وLinux**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> نوصي باستخدام tap الخاص بـ OpenCode للحصول على أحدث الإصدارات. صيغة `brew install opencode` الرسمية تُدار بواسطة فريق Homebrew ويتم تحديثها بوتيرة أقل.
|
||||
|
||||
- **باستخدام Paru على Arch Linux**
|
||||
|
||||
```bash
|
||||
sudo pacman -S opencode # Arch Linux (Stable)
|
||||
paru -S opencode-bin # Arch Linux (Latest from AUR)
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[موصى به: استخدم WSL]
|
||||
لأفضل تجربة على Windows، نوصي باستخدام [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). يوفر أداء أفضل وتوافقا كاملا مع ميزات OpenCode.
|
||||
:::
|
||||
|
||||
- **باستخدام Chocolatey**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **باستخدام Scoop**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **باستخدام NPM**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **باستخدام Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **باستخدام Docker**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
دعم تثبيت OpenCode على Windows باستخدام Bun قيد العمل حاليا.
|
||||
|
||||
يمكنك أيضا تنزيل الملف التنفيذي من صفحة [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
مع OpenCode يمكنك استخدام أي مزود LLM عبر إعداد مفاتيح API الخاصة به.
|
||||
|
||||
إذا كنت جديدا على استخدام مزوّدي LLM، فنوصي باستخدام [OpenCode Zen](/docs/zen).
|
||||
إنها قائمة منتقاة من النماذج تم اختبارها والتحقق منها بواسطة فريق OpenCode.
|
||||
|
||||
1. شغّل الأمر `/connect` في واجهة TUI، واختر opencode، ثم انتقل إلى [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. سجّل الدخول، وأضف تفاصيل الدفع، ثم انسخ مفتاح API.
|
||||
|
||||
3. الصق مفتاح API.
|
||||
|
||||
```txt
|
||||
┌ API key
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
بدلا من ذلك يمكنك اختيار أحد المزوّدين الآخرين. [اعرف المزيد](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
بعد أن قمت بإعداد مزوّد، يمكنك الانتقال إلى المشروع الذي تريد العمل عليه.
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
```
|
||||
|
||||
ثم شغّل OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
بعد ذلك، هيّئ OpenCode للمشروع عبر تشغيل الأمر التالي.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
سيجعل هذا OpenCode يحلل مشروعك ويُنشئ ملف `AGENTS.md` في جذر المشروع.
|
||||
|
||||
:::tip
|
||||
يستحسن أن تقوم بعمل commit لملف `AGENTS.md` الخاص بمشروعك إلى Git.
|
||||
:::
|
||||
|
||||
يساعد هذا OpenCode على فهم بنية المشروع وأنماط الترميز المستخدمة.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
أصبحت الآن جاهزا لاستخدام OpenCode للعمل على مشروعك. لا تتردد في سؤاله أي شيء!
|
||||
|
||||
إذا كنت جديدا على استخدام وكيل ترميز بالذكاء الاصطناعي، فإليك بعض الأمثلة التي قد تساعد.
|
||||
|
||||
---
|
||||
|
||||
### اطرح أسئلة
|
||||
|
||||
يمكنك أن تطلب من OpenCode شرح قاعدة الشيفرة لك.
|
||||
|
||||
:::tip
|
||||
استخدم المفتاح `@` للبحث التقريبي عن الملفات داخل المشروع.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
How is authentication handled in @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
يفيد هذا عندما تكون هناك أجزاء من قاعدة الشيفرة لم تعمل عليها.
|
||||
|
||||
---
|
||||
|
||||
### أضف ميزات
|
||||
|
||||
يمكنك أن تطلب من OpenCode إضافة ميزات جديدة إلى مشروعك، لكننا نوصي أولا بطلب إنشاء خطة.
|
||||
|
||||
1. **أنشئ خطة**
|
||||
|
||||
لدى OpenCode _وضع Plan_ يعطل قدرته على إجراء التغييرات، ويقترح بدلا من ذلك _كيف_ سينفّذ الميزة.
|
||||
|
||||
انتقل إليه باستخدام مفتاح **Tab**. سترى مؤشرا لذلك في الزاوية السفلية اليمنى.
|
||||
|
||||
```bash frame="none" title="التبديل إلى وضع Plan"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
الآن لنصف ما نريده أن يفعله.
|
||||
|
||||
```txt frame="none"
|
||||
When a user deletes a note, we'd like to flag it as deleted in the database.
|
||||
Then create a screen that shows all the recently deleted notes.
|
||||
From this screen, the user can undelete a note or permanently delete it.
|
||||
```
|
||||
|
||||
احرص على تزويد OpenCode بتفاصيل كافية ليفهم ما تريد. يساعد أن تتحدث إليه كما لو كنت تتحدث إلى مطور مبتدئ ضمن فريقك.
|
||||
|
||||
:::tip
|
||||
أعطِ OpenCode سياقا وأمثلة كافية لمساعدته على فهم ما تريد.
|
||||
:::
|
||||
|
||||
2. **حسّن الخطة**
|
||||
|
||||
بعد أن يقدم لك خطة، يمكنك إعطاؤه ملاحظات أو إضافة تفاصيل أكثر.
|
||||
|
||||
```txt frame="none"
|
||||
We'd like to design this new screen using a design I've used before.
|
||||
[Image #1] Take a look at this image and use it as a reference.
|
||||
```
|
||||
|
||||
:::tip
|
||||
اسحب الصور وأفلِتها داخل terminal لإضافتها إلى الطلب.
|
||||
:::
|
||||
|
||||
يستطيع OpenCode فحص أي صور تزوده بها وإضافتها إلى الطلب. يمكنك فعل ذلك عبر سحب الصورة وإفلاتها داخل terminal.
|
||||
|
||||
3. **ابنِ الميزة**
|
||||
|
||||
عندما تشعر بالارتياح للخطة، عد إلى _وضع Build_ بالضغط على مفتاح **Tab** مرة أخرى.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
ثم اطلب منه تنفيذ التغييرات.
|
||||
|
||||
```bash frame="none"
|
||||
Sounds good! Go ahead and make the changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### نفّذ تغييرات
|
||||
|
||||
للتغييرات الأبسط، يمكنك أن تطلب من OpenCode تنفيذها مباشرة دون الحاجة لمراجعة خطة أولا.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
We need to add authentication to the /settings route. Take a look at how this is
|
||||
handled in the /notes route in @packages/functions/src/notes.ts and implement
|
||||
the same logic in @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
تأكد من تقديم قدر مناسب من التفاصيل لكي يجري OpenCode التغييرات الصحيحة.
|
||||
|
||||
---
|
||||
|
||||
### تراجع عن التغييرات
|
||||
|
||||
لنفترض أنك طلبت من OpenCode إجراء بعض التغييرات.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
لكن تتضح لك لاحقا أنها ليست ما تريده. يمكنك **التراجع** عن التغييرات باستخدام الأمر `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
سيقوم OpenCode الآن بعكس التغييرات التي أُجريت ويعرض رسالتك الأصلية مجددا.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
من هنا يمكنك تعديل الطلب وطلب المحاولة مرة أخرى.
|
||||
|
||||
:::tip
|
||||
يمكنك تشغيل `/undo` عدة مرات للتراجع عن عدة تغييرات.
|
||||
:::
|
||||
|
||||
أو يمكنك **إعادة تنفيذ** التغييرات باستخدام الأمر `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المشاركة
|
||||
|
||||
يمكن [مشاركة المحادثات](/docs/share) التي تجريها مع OpenCode مع فريقك.
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
سيقوم هذا بإنشاء رابط للمحادثة الحالية ونسخه إلى الحافظة.
|
||||
|
||||
:::note
|
||||
لا تتم مشاركة المحادثات افتراضيا.
|
||||
:::
|
||||
|
||||
إليك [مثالا لمحادثة](https://opencode.ai/s/4XP1fce5) مع OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## التخصيص
|
||||
|
||||
وهذا كل شيء! أصبحت الآن محترفا في استخدام OpenCode.
|
||||
|
||||
لتجعله مناسبا لك، نوصي بـ [اختيار سمة](/docs/themes)، و[تخصيص اختصارات لوحة المفاتيح](/docs/keybinds)، و[إعداد منسقات الشيفرة](/docs/formatters)، و[إنشاء أوامر مخصصة](/docs/commands)، أو التجربة مع [إعدادات OpenCode](/docs/config).
|
||||
194
qimingcode/packages/web/src/content/docs/ar/keybinds.mdx
Normal file
194
qimingcode/packages/web/src/content/docs/ar/keybinds.mdx
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
title: اختصارات لوحة المفاتيح
|
||||
description: خصّص اختصارات لوحة المفاتيح.
|
||||
---
|
||||
|
||||
يوفّر OpenCode قائمة باختصارات لوحة المفاتيح يمكنك تخصيصها عبر إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x",
|
||||
"app_exit": "ctrl+c,ctrl+d,<leader>q",
|
||||
"editor_open": "<leader>e",
|
||||
"theme_list": "<leader>t",
|
||||
"sidebar_toggle": "<leader>b",
|
||||
"scrollbar_toggle": "none",
|
||||
"username_toggle": "none",
|
||||
"status_view": "<leader>s",
|
||||
"tool_details": "none",
|
||||
"session_export": "<leader>x",
|
||||
"session_new": "<leader>n",
|
||||
"session_list": "<leader>l",
|
||||
"session_timeline": "<leader>g",
|
||||
"session_fork": "none",
|
||||
"session_rename": "none",
|
||||
"session_share": "none",
|
||||
"session_unshare": "none",
|
||||
"session_interrupt": "escape",
|
||||
"session_compact": "<leader>c",
|
||||
"session_child_first": "<leader>down",
|
||||
"session_child_cycle": "<leader>right",
|
||||
"session_child_cycle_reverse": "<leader>left",
|
||||
"session_parent": "<leader>up",
|
||||
"messages_page_up": "pageup,ctrl+alt+b",
|
||||
"messages_page_down": "pagedown,ctrl+alt+f",
|
||||
"messages_line_up": "ctrl+alt+y",
|
||||
"messages_line_down": "ctrl+alt+e",
|
||||
"messages_half_page_up": "ctrl+alt+u",
|
||||
"messages_half_page_down": "ctrl+alt+d",
|
||||
"messages_first": "ctrl+g,home",
|
||||
"messages_last": "ctrl+alt+g,end",
|
||||
"messages_next": "none",
|
||||
"messages_previous": "none",
|
||||
"messages_copy": "<leader>y",
|
||||
"messages_undo": "<leader>u",
|
||||
"messages_redo": "<leader>r",
|
||||
"messages_last_user": "none",
|
||||
"messages_toggle_conceal": "<leader>h",
|
||||
"model_list": "<leader>m",
|
||||
"model_cycle_recent": "f2",
|
||||
"model_cycle_recent_reverse": "shift+f2",
|
||||
"model_cycle_favorite": "none",
|
||||
"model_cycle_favorite_reverse": "none",
|
||||
"variant_cycle": "ctrl+t",
|
||||
"variant_list": "none",
|
||||
"command_list": "ctrl+p",
|
||||
"agent_list": "<leader>a",
|
||||
"agent_cycle": "tab",
|
||||
"agent_cycle_reverse": "shift+tab",
|
||||
"input_clear": "ctrl+c",
|
||||
"input_paste": "ctrl+v",
|
||||
"input_submit": "return",
|
||||
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
|
||||
"input_move_left": "left,ctrl+b",
|
||||
"input_move_right": "right,ctrl+f",
|
||||
"input_move_up": "up",
|
||||
"input_move_down": "down",
|
||||
"input_select_left": "shift+left",
|
||||
"input_select_right": "shift+right",
|
||||
"input_select_up": "shift+up",
|
||||
"input_select_down": "shift+down",
|
||||
"input_line_home": "ctrl+a",
|
||||
"input_line_end": "ctrl+e",
|
||||
"input_select_line_home": "ctrl+shift+a",
|
||||
"input_select_line_end": "ctrl+shift+e",
|
||||
"input_visual_line_home": "alt+a",
|
||||
"input_visual_line_end": "alt+e",
|
||||
"input_select_visual_line_home": "alt+shift+a",
|
||||
"input_select_visual_line_end": "alt+shift+e",
|
||||
"input_buffer_home": "home",
|
||||
"input_buffer_end": "end",
|
||||
"input_select_buffer_home": "shift+home",
|
||||
"input_select_buffer_end": "shift+end",
|
||||
"input_delete_line": "ctrl+shift+d",
|
||||
"input_delete_to_line_end": "ctrl+k",
|
||||
"input_delete_to_line_start": "ctrl+u",
|
||||
"input_backspace": "backspace,shift+backspace",
|
||||
"input_delete": "ctrl+d,delete,shift+delete",
|
||||
"input_undo": "ctrl+-,super+z",
|
||||
"input_redo": "ctrl+.,super+shift+z",
|
||||
"input_word_forward": "alt+f,alt+right,ctrl+right",
|
||||
"input_word_backward": "alt+b,alt+left,ctrl+left",
|
||||
"input_select_word_forward": "alt+shift+f,alt+shift+right",
|
||||
"input_select_word_backward": "alt+shift+b,alt+shift+left",
|
||||
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
|
||||
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
|
||||
"history_previous": "up",
|
||||
"history_next": "down",
|
||||
"terminal_suspend": "ctrl+z",
|
||||
"terminal_title_toggle": "none",
|
||||
"tips_toggle": "<leader>h",
|
||||
"display_thinking": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مفتاح القائد
|
||||
|
||||
يستخدم OpenCode مفتاح `leader` لمعظم اختصارات لوحة المفاتيح. يساعد ذلك على تجنّب التعارضات في terminal لديك.
|
||||
|
||||
افتراضيا، يكون `ctrl+x` هو مفتاح القائد، وتتطلّب معظم الإجراءات أن تضغط أولا مفتاح القائد ثم الاختصار. على سبيل المثال، لبدء جلسة جديدة اضغط `ctrl+x` أولا ثم اضغط `n`.
|
||||
|
||||
لا يلزم استخدام مفتاح قائد لاختصاراتك، لكننا نوصي بذلك.
|
||||
|
||||
---
|
||||
|
||||
## تعطيل اختصار
|
||||
|
||||
يمكنك تعطيل أي اختصار بإضافة معرّف الاختصار إلى ملف الإعدادات بقيمة "none".
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## اختصارات موجّه سطح المكتب
|
||||
|
||||
يدعم حقل إدخال الموجّه في تطبيق OpenCode لسطح المكتب اختصارات شائعة لتحرير النص على نمط Readline/Emacs. هذه الاختصارات مدمجة حاليا ولا يمكن تخصيصها عبر `opencode.json`.
|
||||
|
||||
| الاختصار | الإجراء |
|
||||
| -------- | ------------------------------------------ |
|
||||
| `ctrl+a` | الانتقال إلى بداية السطر الحالي |
|
||||
| `ctrl+e` | الانتقال إلى نهاية السطر الحالي |
|
||||
| `ctrl+b` | تحريك المؤشر للخلف حرفا واحدا |
|
||||
| `ctrl+f` | تحريك المؤشر للأمام حرفا واحدا |
|
||||
| `alt+b` | تحريك المؤشر للخلف كلمة واحدة |
|
||||
| `alt+f` | تحريك المؤشر للأمام كلمة واحدة |
|
||||
| `ctrl+d` | حذف الحرف الموجود تحت المؤشر |
|
||||
| `ctrl+k` | حذف حتى نهاية السطر |
|
||||
| `ctrl+u` | حذف حتى بداية السطر |
|
||||
| `ctrl+w` | حذف الكلمة السابقة |
|
||||
| `alt+d` | حذف الكلمة التالية |
|
||||
| `ctrl+t` | تبديل موضعي حرفين |
|
||||
| `ctrl+g` | إلغاء النوافذ المنبثقة / إيقاف الرد الجاري |
|
||||
|
||||
---
|
||||
|
||||
## مفتاح Shift+Enter
|
||||
|
||||
بعض تطبيقات terminal لا ترسل مفاتيح التعديل مع Enter افتراضيا. قد تحتاج إلى ضبط terminal لإرسال `Shift+Enter` كسلسلة هروب.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
افتح ملف `settings.json` الموجود في:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
أضف هذا إلى مصفوفة `actions` على مستوى الجذر:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
أضف هذا إلى مصفوفة `keybindings` على مستوى الجذر:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
احفظ الملف ثم أعد تشغيل Windows Terminal أو افتح علامة تبويب جديدة.
|
||||
188
qimingcode/packages/web/src/content/docs/ar/lsp.mdx
Normal file
188
qimingcode/packages/web/src/content/docs/ar/lsp.mdx
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
title: خوادم LSP
|
||||
description: يتكامل OpenCode مع خوادم LSP لديك.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع بروتوكول خادم اللغة (LSP) لمساعدة LLM على التفاعل مع قاعدة الشيفرة لديك. ويستخدم التشخيصات لتزويد LLM بتغذية راجعة.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
يأتي OpenCode مع عدة خوادم LSP مدمجة للغات الشائعة:
|
||||
|
||||
| خادم LSP | الامتدادات | المتطلبات |
|
||||
| ------------------ | ------------------------------------------------------------------- | ---------------------------------------------------- |
|
||||
| astro | .astro | يثبت تلقائيا لمشاريع Astro |
|
||||
| bash | .sh, .bash, .zsh, .ksh | يثبت `bash-language-server` تلقائيا |
|
||||
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | يثبت تلقائيا لمشاريع C/C++ |
|
||||
| csharp | .cs | تثبيت `.NET SDK` |
|
||||
| clojure-lsp | .clj, .cljs, .cljc, .edn | توفر أمر `clojure-lsp` |
|
||||
| dart | .dart | توفر أمر `dart` |
|
||||
| deno | .ts, .tsx, .js, .jsx, .mjs | توفر أمر `deno` (يكتشف تلقائيا deno.json/deno.jsonc) |
|
||||
| elixir-ls | .ex, .exs | توفر أمر `elixir` |
|
||||
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | وجود تبعية `eslint` في المشروع |
|
||||
| fsharp | .fs, .fsi, .fsx, .fsscript | تثبيت `.NET SDK` |
|
||||
| gleam | .gleam | توفر أمر `gleam` |
|
||||
| gopls | .go | توفر أمر `go` |
|
||||
| hls | .hs, .lhs | توفر أمر `haskell-language-server-wrapper` |
|
||||
| jdtls | .java | تثبيت `Java SDK (version 21+)` |
|
||||
| kotlin-ls | .kt, .kts | يثبت تلقائيا لمشاريع Kotlin |
|
||||
| lua-ls | .lua | يثبت تلقائيا لمشاريع Lua |
|
||||
| nixd | .nix | توفر أمر `nixd` |
|
||||
| ocaml-lsp | .ml, .mli | توفر أمر `ocamllsp` |
|
||||
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | وجود تبعية `oxlint` في المشروع |
|
||||
| php intelephense | .php | يثبت تلقائيا لمشاريع PHP |
|
||||
| prisma | .prisma | توفر أمر `prisma` |
|
||||
| pyright | .py, .pyi | تثبيت تبعية `pyright` |
|
||||
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | توفر أمري `ruby` و `gem` |
|
||||
| rust | .rs | توفر أمر `rust-analyzer` |
|
||||
| sourcekit-lsp | .swift, .objc, .objcpp | تثبيت `swift` (على macOS عبر `xcode`) |
|
||||
| svelte | .svelte | يثبت تلقائيا لمشاريع Svelte |
|
||||
| terraform | .tf, .tfvars | يثبت تلقائيا من إصدارات GitHub |
|
||||
| tinymist | .typ, .typc | يثبت تلقائيا من إصدارات GitHub |
|
||||
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | وجود تبعية `typescript` في المشروع |
|
||||
| vue | .vue | يثبت تلقائيا لمشاريع Vue |
|
||||
| yaml-ls | .yaml, .yml | يثبت `yaml-language-server` من Red Hat تلقائيا |
|
||||
| zls | .zig, .zon | توفر أمر `zig` |
|
||||
|
||||
تُفعَّل خوادم LSP تلقائيا عند اكتشاف أحد امتدادات الملفات المذكورة أعلاه واستيفاء المتطلبات.
|
||||
|
||||
:::note
|
||||
يمكنك تعطيل تنزيلات خوادم LSP التلقائية عبر ضبط متغير البيئة `OPENCODE_DISABLE_LSP_DOWNLOAD` على `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
عندما يفتح opencode ملفا، فإنه:
|
||||
|
||||
1. يفحص امتداد الملف مقابل جميع خوادم LSP المفعّلة.
|
||||
2. يشغّل خادم LSP المناسب إذا لم يكن قيد التشغيل بالفعل.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص خوادم LSP عبر قسم `lsp` في إعدادات opencode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
يدعم كل خادم LSP ما يلي:
|
||||
|
||||
| الخاصية | النوع | الوصف |
|
||||
| ---------------- | -------- | ------------------------------------------------- |
|
||||
| `disabled` | boolean | اضبطها على `true` لتعطيل خادم LSP |
|
||||
| `command` | string[] | الأمر المستخدم لتشغيل خادم LSP |
|
||||
| `extensions` | string[] | امتدادات الملفات التي يجب أن يعالجها خادم LSP هذا |
|
||||
| `env` | object | متغيرات البيئة التي تُضبط عند تشغيل الخادم |
|
||||
| `initialization` | object | خيارات التهيئة التي تُرسل إلى خادم LSP |
|
||||
|
||||
لنلق نظرة على بعض الأمثلة.
|
||||
|
||||
---
|
||||
|
||||
### متغيرات البيئة
|
||||
|
||||
استخدم الخاصية `env` لضبط متغيرات البيئة عند تشغيل خادم LSP:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### خيارات التهيئة
|
||||
|
||||
استخدم الخاصية `initialization` لتمرير خيارات التهيئة إلى خادم LSP. هذه إعدادات خاصة بالخادم تُرسل أثناء طلب LSP `initialize`:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
تختلف خيارات التهيئة بحسب خادم LSP. راجع توثيق خادم LSP لديك لمعرفة الخيارات المتاحة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### تعطيل خوادم LSP
|
||||
|
||||
لتعطيل **جميع** خوادم LSP على مستوى التطبيق، اضبط `lsp` على `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
لتعطيل خادم LSP **بعينه**، اضبط `disabled` على `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### خوادم LSP مخصصة
|
||||
|
||||
يمكنك إضافة خوادم LSP مخصصة عبر تحديد الأمر وامتدادات الملفات:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## معلومات إضافية
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
يوفر PHP Intelephense ميزات مدفوعة عبر مفتاح ترخيص. يمكنك تزويده بمفتاح الترخيص عبر وضع (فقط) المفتاح داخل ملف نصي في:
|
||||
|
||||
- على macOS/Linux: `$HOME/intelephense/license.txt`
|
||||
- على Windows: `%USERPROFILE%/intelephense/license.txt`
|
||||
|
||||
يجب أن يحتوي الملف على مفتاح الترخيص فقط دون أي محتوى إضافي.
|
||||
511
qimingcode/packages/web/src/content/docs/ar/mcp-servers.mdx
Normal file
511
qimingcode/packages/web/src/content/docs/ar/mcp-servers.mdx
Normal file
@@ -0,0 +1,511 @@
|
||||
---
|
||||
title: خوادم MCP
|
||||
description: أضف أدوات MCP محلية وبعيدة.
|
||||
---
|
||||
|
||||
يمكنك إضافة أدوات خارجية إلى OpenCode باستخدام _Model Context Protocol_، أو MCP. يدعم OpenCode خوادم محلية وبعيدة.
|
||||
|
||||
بعد إضافتها، تصبح أدوات MCP متاحة تلقائيا للـ LLM إلى جانب الأدوات المضمنة.
|
||||
|
||||
---
|
||||
|
||||
#### تنبيهات
|
||||
|
||||
عند استخدام خادم MCP فإنه يضيف إلى السياق. وقد يتراكم ذلك بسرعة إذا كان لديك الكثير من الأدوات. لذلك نوصي بالتحلّي بالحذر عند اختيار خوادم MCP التي تستخدمها.
|
||||
|
||||
:::tip
|
||||
تضيف خوادم MCP إلى سياقك، لذا احرص على اختيار ما تفعّله منها بعناية.
|
||||
:::
|
||||
|
||||
تميل بعض خوادم MCP، مثل خادم GitHub MCP، إلى إضافة الكثير من الرموز (tokens) وقد تتجاوز حد السياق بسهولة.
|
||||
|
||||
---
|
||||
|
||||
## التمكين
|
||||
|
||||
يمكنك تعريف خوادم MCP في [إعدادات OpenCode](https://opencode.ai/docs/config/) ضمن `mcp`. أضف كل خادم MCP باسم فريد. ويمكنك الإشارة إلى ذلك الخادم بالاسم عند توجيه الطلب إلى الـ LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"name-of-mcp-server": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"name-of-other-mcp-server": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا تعطيل خادم عبر ضبط `enabled` على `false`. يفيد ذلك إذا أردت تعطيله مؤقتا دون إزالته من إعداداتك.
|
||||
|
||||
---
|
||||
|
||||
### تجاوز القيم الافتراضية البعيدة
|
||||
|
||||
يمكن للمنظمات توفير خوادم MCP الافتراضية عبر نقطة النهاية `.well-known/opencode` الخاصة بها. قد تكون هذه الخوادم معطّلة افتراضيا، مما يتيح للمستخدمين تفعيل ما يحتاجونه فقط.
|
||||
|
||||
لتفعيل خادم معيّن من الإعدادات البعيدة الخاصة بمؤسستك، أضفه إلى إعداداتك المحلية مع `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتغلب قيم إعداداتك المحلية على القيم الافتراضية البعيدة. راجع [أولوية الإعدادات](/docs/config#precedence-order) لمزيد من التفاصيل.
|
||||
|
||||
---
|
||||
|
||||
## محلي
|
||||
|
||||
أضف خوادم MCP المحلية عبر ضبط `type` على `"local"` ضمن كائن `mcp`.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-local-mcp-server": {
|
||||
"type": "local",
|
||||
// Or ["bun", "x", "my-mcp-command"]
|
||||
"command": ["npx", "-y", "my-mcp-command"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MY_ENV_VAR": "my_env_var_value",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
الأمر `command` هو الطريقة التي يتم بها تشغيل خادم MCP المحلي. ويمكنك أيضا تمرير قائمة بمتغيرات البيئة.
|
||||
|
||||
على سبيل المثال، إليك كيفية إضافة خادم MCP التجريبي [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_everything": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
ولاستخدامه يمكنني إضافة `use the mcp_everything tool` إلى طلباتي.
|
||||
|
||||
```txt "mcp_everything"
|
||||
use the mcp_everything tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### الخيارات
|
||||
|
||||
فيما يلي جميع الخيارات المتاحة لتهيئة خادم MCP محلي.
|
||||
|
||||
| الخيار | النوع | مطلوب | الوصف |
|
||||
| ------------- | ------- | ----- | -------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | نوع اتصال خادم MCP، ويجب أن يكون `"local"`. |
|
||||
| `command` | Array | Y | الأمر والوسائط اللازمة لتشغيل خادم MCP. |
|
||||
| `environment` | Object | | متغيرات البيئة التي يتم تعيينها عند تشغيل الخادم. |
|
||||
| `enabled` | Boolean | | تفعيل خادم MCP أو تعطيله عند بدء التشغيل. |
|
||||
| `timeout` | Number | | المهلة بالمللي ثانية لجلب الأدوات من خادم MCP. القيمة الافتراضية 5000 (5 ثوانٍ). |
|
||||
|
||||
---
|
||||
|
||||
## بعيد
|
||||
|
||||
أضف خوادم MCP البعيدة عبر ضبط `type` على `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-remote-mcp": {
|
||||
"type": "remote",
|
||||
"url": "https://my-mcp-server.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MY_API_KEY"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمثل `url` عنوان URL لخادم MCP البعيد، وباستخدام خيار `headers` يمكنك تمرير قائمة من الرؤوس (headers).
|
||||
|
||||
---
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | النوع | مطلوب | الوصف |
|
||||
| --------- | ------- | ----- | -------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | نوع اتصال خادم MCP، ويجب أن يكون `"remote"`. |
|
||||
| `url` | String | Y | عنوان URL لخادم MCP البعيد. |
|
||||
| `enabled` | Boolean | | تفعيل خادم MCP أو تعطيله عند بدء التشغيل. |
|
||||
| `headers` | Object | | الرؤوس التي يتم إرسالها مع الطلب. |
|
||||
| `oauth` | Object | | إعدادات مصادقة OAuth. راجع قسم [OAuth](#oauth) أدناه. |
|
||||
| `timeout` | Number | | المهلة بالمللي ثانية لجلب الأدوات من خادم MCP. القيمة الافتراضية 5000 (5 ثوانٍ). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
|
||||
يتولى OpenCode تلقائيا معالجة مصادقة OAuth لخوادم MCP البعيدة. عندما يتطلب خادم ما المصادقة، سيقوم OpenCode بما يلي:
|
||||
|
||||
1. اكتشاف استجابة 401 وبدء تدفق OAuth
|
||||
2. استخدام **Dynamic Client Registration (RFC 7591)** إذا كان الخادم يدعمه
|
||||
3. تخزين الرموز (tokens) بشكل آمن للطلبات المستقبلية
|
||||
|
||||
---
|
||||
|
||||
### تلقائي
|
||||
|
||||
بالنسبة لمعظم خوادم MCP التي تدعم OAuth، لا تحتاج إلى إعدادات خاصة. ما عليك سوى تهيئة الخادم البعيد:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا كان الخادم يتطلب المصادقة، فسيطلب منك OpenCode المصادقة عند أول محاولة لاستخدامه. وإذا لم يحدث ذلك، يمكنك [تشغيل التدفق يدويا](#authenticating) باستخدام `opencode mcp auth <server-name>`.
|
||||
|
||||
---
|
||||
|
||||
### مُسجَّل مسبقا
|
||||
|
||||
إذا كانت لديك بيانات اعتماد العميل من موفّر خادم MCP، يمكنك تهيئتها:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MY_MCP_CLIENT_ID}",
|
||||
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
يمكنك تشغيل المصادقة يدويا أو إدارة بيانات الاعتماد.
|
||||
|
||||
صادِق مع خادم MCP معيّن:
|
||||
|
||||
```bash
|
||||
opencode mcp auth my-oauth-server
|
||||
```
|
||||
|
||||
اعرض جميع خوادم MCP وحالة المصادقة الخاصة بها:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
احذف بيانات الاعتماد المخزنة:
|
||||
|
||||
```bash
|
||||
opencode mcp logout my-oauth-server
|
||||
```
|
||||
|
||||
سيفتح أمر `mcp auth` متصفحك للتفويض. بعد إكمال التفويض، سيخزّن OpenCode الرموز بشكل آمن في `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
---
|
||||
|
||||
#### تعطيل OAuth
|
||||
|
||||
إذا أردت تعطيل OAuth التلقائي لخادم ما (على سبيل المثال، للخوادم التي تستخدم مفاتيح API بدلا من ذلك)، فاضبط `oauth` على `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-api-key-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MY_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### خيارات OAuth
|
||||
|
||||
| الخيار | النوع | الوصف |
|
||||
| -------------- | --------------- | ------------------------------------------------------------------------ |
|
||||
| `oauth` | Object \| false | كائن إعدادات OAuth، أو `false` لتعطيل الاكتشاف التلقائي لـ OAuth. |
|
||||
| `clientId` | String | معرّف عميل OAuth. إذا لم يُحدَّد، ستتم محاولة التسجيل الديناميكي للعميل. |
|
||||
| `clientSecret` | String | سرّ عميل OAuth، إذا كان مطلوبا من خادم التفويض. |
|
||||
| `scope` | String | نطاقات OAuth المطلوبة أثناء التفويض. |
|
||||
|
||||
#### تصحيح الأخطاء
|
||||
|
||||
إذا فشل خادم MCP بعيد في المصادقة، يمكنك تشخيص المشكلة باستخدام:
|
||||
|
||||
```bash
|
||||
# عرض حالة المصادقة لجميع الخوادم القادرة على OAuth
|
||||
opencode mcp auth list
|
||||
|
||||
# تصحيح الاتصال وتدفق OAuth لخادم محدد
|
||||
opencode mcp debug my-oauth-server
|
||||
```
|
||||
|
||||
يعرض أمر `mcp debug` حالة المصادقة الحالية، ويختبر اتصال HTTP، ويحاول تنفيذ تدفق اكتشاف OAuth.
|
||||
|
||||
---
|
||||
|
||||
## الإدارة
|
||||
|
||||
تتوفر خوادم MCP لديك كأدوات داخل OpenCode إلى جانب الأدوات المضمنة. لذا يمكنك إدارتها عبر إعدادات OpenCode مثل أي أداة أخرى.
|
||||
|
||||
---
|
||||
|
||||
### عام
|
||||
|
||||
هذا يعني أنه يمكنك تفعيلها أو تعطيلها على مستوى عام.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكننا أيضا استخدام نمط glob لتعطيل جميع خوادم MCP المطابقة.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هنا نستخدم نمط glob `my-mcp*` لتعطيل جميع خوادم MCP.
|
||||
|
||||
---
|
||||
|
||||
### لكل وكيل
|
||||
|
||||
إذا كان لديك عدد كبير من خوادم MCP فقد ترغب في تفعيلها لكل وكيل على حدة وتعطيلها على المستوى العام. للقيام بذلك:
|
||||
|
||||
1. عطّلها كأداة على المستوى العام.
|
||||
2. في [إعدادات الوكيل](/docs/agents#tools)، فعّل خادم MCP كأداة.
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"my-agent": {
|
||||
"tools": {
|
||||
"my-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### أنماط Glob
|
||||
|
||||
يستخدم نمط glob أنماطا بسيطة من مطابقة glob:
|
||||
|
||||
- `*` يطابق صفرا أو أكثر من أي محرف (على سبيل المثال، `"my-mcp*"` يطابق `my-mcp_search` و`my-mcp_list` وغيرها.)
|
||||
- `?` يطابق محرفا واحدا بالضبط
|
||||
- جميع المحارف الأخرى تُطابق حرفيا
|
||||
|
||||
:::note
|
||||
تُسجَّل أدوات خادم MCP مع اسم الخادم كبادئة، لذا لتعطيل جميع أدوات خادم ما استخدم ببساطة:
|
||||
|
||||
```
|
||||
"mymcpservername_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
فيما يلي أمثلة لبعض خوادم MCP الشائعة. يمكنك إرسال PR إذا أردت توثيق خوادم أخرى.
|
||||
|
||||
---
|
||||
|
||||
### Sentry
|
||||
|
||||
أضف [خادم MCP الخاص بـ Sentry](https://mcp.sentry.dev) للتفاعل مع مشاريع Sentry والقضايا (issues) الخاصة بك.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
بعد إضافة الإعدادات، قم بالمصادقة مع Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى فتح نافذة متصفح لإكمال تدفق OAuth وربط OpenCode بحساب Sentry الخاص بك.
|
||||
|
||||
بعد المصادقة، يمكنك استخدام أدوات Sentry في طلباتك للاستعلام عن القضايا والمشاريع وبيانات الأخطاء.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
أضف [خادم MCP الخاص بـ Context7](https://github.com/upstash/context7) للبحث في المستندات.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا كنت قد سجلت للحصول على حساب مجاني، يمكنك استخدام مفتاح API للحصول على حدود أعلى لمعدل الطلبات.
|
||||
|
||||
```json title="opencode.json" {7-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هنا نفترض أنك عيّنت متغير البيئة `CONTEXT7_API_KEY`.
|
||||
|
||||
أضف `use context7` إلى طلباتك لاستخدام خادم MCP الخاص بـ Context7.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
بدلا من ذلك، يمكنك إضافة شيء مثل هذا إلى [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
أضف خادم MCP الخاص بـ [Grep by Vercel](https://grep.app) للبحث في مقتطفات الشيفرة على GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
وبما أننا سمّينا خادم MCP الخاص بنا `gh_grep`، يمكنك إضافة `use the gh_grep tool` إلى طلباتك لجعل الوكيل يستخدمه.
|
||||
|
||||
```txt "use the gh_grep tool"
|
||||
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
|
||||
```
|
||||
|
||||
بدلا من ذلك، يمكنك إضافة شيء مثل هذا إلى [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
|
||||
```
|
||||
222
qimingcode/packages/web/src/content/docs/ar/models.mdx
Normal file
222
qimingcode/packages/web/src/content/docs/ar/models.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: النماذج
|
||||
description: تهيئة مزوّد LLM والنموذج.
|
||||
---
|
||||
|
||||
يستخدم OpenCode كلاً من [AI SDK](https://ai-sdk.dev/) و[Models.dev](https://models.dev) لدعم **أكثر من 75 مزوّداً لنماذج LLM**، كما يدعم تشغيل النماذج محلياً.
|
||||
|
||||
---
|
||||
|
||||
## المزوّدون
|
||||
|
||||
أكثر المزوّدين شيوعاً مُحمَّلون مسبقاً افتراضياً. إذا أضفت بيانات اعتماد أحد المزوّدين عبر الأمر `/connect` فستكون متاحة عند تشغيل OpenCode.
|
||||
|
||||
تعرّف على المزيد حول [المزوّدين](/docs/providers).
|
||||
|
||||
---
|
||||
|
||||
## اختر نموذجاً
|
||||
|
||||
بعد تهيئة المزوّد يمكنك اختيار النموذج الذي تريده بكتابة:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## النماذج الموصى بها
|
||||
|
||||
هناك الكثير من النماذج المتاحة، وتظهر نماذج جديدة كل أسبوع.
|
||||
|
||||
:::tip
|
||||
ننصح باستخدام أحد النماذج التي نوصي بها.
|
||||
:::
|
||||
|
||||
لكن القليل منها فقط يكون جيداً في كلٍ من توليد الشيفرة واستدعاء الأدوات.
|
||||
|
||||
فيما يلي عدة نماذج تعمل جيداً مع OpenCode، دون ترتيب معيّن. (هذه ليست قائمة شاملة وقد لا تكون محدَّثة دائماً):
|
||||
|
||||
- GPT 5.2
|
||||
- GPT 5.1 Codex
|
||||
- Claude Opus 4.5
|
||||
- Claude Sonnet 4.5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## تعيين الافتراضي
|
||||
|
||||
لتعيين أحد هذه النماذج كنموذج افتراضي، يمكنك ضبط المفتاح `model` في ملف إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
المعرّف الكامل هنا يكون بالشكل `provider_id/model_id`. على سبيل المثال، إذا كنت تستخدم [OpenCode Zen](/docs/zen) فستستخدم `opencode/gpt-5.1-codex` لنموذج GPT 5.1 Codex.
|
||||
|
||||
إذا كنت قد هيّأت [مزوّداً مخصّصاً](/docs/providers#custom)، فإن `provider_id` هو المفتاح الموجود ضمن قسم `provider` في إعداداتك، و`model_id` هو المفتاح الموجود ضمن `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## إعداد النماذج
|
||||
|
||||
يمكنك ضبط خيارات النموذج على مستوى عام عبر ملف الإعدادات.
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-12,19-24}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"options": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
"include": ["reasoning.encrypted_content"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"anthropic": {
|
||||
"models": {
|
||||
"claude-sonnet-4-5-20250929": {
|
||||
"options": {
|
||||
"thinking": {
|
||||
"type": "enabled",
|
||||
"budgetTokens": 16000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
هنا نقوم بضبط إعدادات عامة لنموذجين مدمجين: `gpt-5` عند الوصول إليه عبر مزوّد `openai`، و`claude-sonnet-4-20250514` عند الوصول إليه عبر مزوّد `anthropic`.
|
||||
يمكن العثور على أسماء المزوّدين والنماذج المدمجة على [Models.dev](https://models.dev).
|
||||
|
||||
يمكنك أيضاً ضبط هذه الخيارات لأي وكلاء تستخدمهم. تتجاوز إعدادات الوكيل أي خيارات عامة هنا. [اعرف المزيد](/docs/agents/#additional).
|
||||
|
||||
كما يمكنك تعريف متغيّرات مخصّصة تُوسّع المتغيّرات المدمجة. تتيح لك المتغيّرات ضبط إعدادات مختلفة للنموذج نفسه دون إنشاء إدخالات مكرّرة:
|
||||
|
||||
```jsonc title="opencode.jsonc" {6-21}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"opencode": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"high": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
"low": {
|
||||
"reasoningEffort": "low",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المتغيّرات
|
||||
|
||||
تدعم العديد من النماذج عدة متغيّرات بإعدادات مختلفة. يأتي OpenCode مع متغيّرات افتراضية مدمجة للمزوّدين الشائعين.
|
||||
|
||||
### المتغيّرات المدمجة
|
||||
|
||||
يأتي OpenCode مع متغيّرات افتراضية لعدد كبير من المزوّدين:
|
||||
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - ميزانية تفكير مرتفعة (الافتراضي)
|
||||
- `max` - أقصى ميزانية تفكير
|
||||
|
||||
**OpenAI**:
|
||||
|
||||
تختلف حسب النموذج، لكن بشكل عام:
|
||||
|
||||
- `none` - بدون استدلال
|
||||
- `minimal` - أقل جهد للاستدلال
|
||||
- `low` - جهد استدلال منخفض
|
||||
- `medium` - جهد استدلال متوسط
|
||||
- `high` - جهد استدلال مرتفع
|
||||
- `xhigh` - جهد استدلال مرتفع جداً
|
||||
|
||||
**Google**:
|
||||
|
||||
- `low` - جهد/ميزانية رموز أقل
|
||||
- `high` - جهد/ميزانية رموز أعلى
|
||||
|
||||
:::tip
|
||||
هذه القائمة ليست شاملة. لدى العديد من المزوّدين الآخرين إعدادات افتراضية مدمجة أيضاً.
|
||||
:::
|
||||
|
||||
### متغيّرات مخصّصة
|
||||
|
||||
يمكنك تجاوز المتغيّرات الموجودة أو إضافة متغيّراتك الخاصة:
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"thinking": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
},
|
||||
"fast": {
|
||||
"disabled": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### التبديل بين المتغيّرات
|
||||
|
||||
استخدم اختصار لوحة المفاتيح `variant_cycle` للتبديل بسرعة بين المتغيّرات. [اعرف المزيد](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
## تحميل النماذج
|
||||
|
||||
عند بدء تشغيل OpenCode، يتحقق من النماذج وفق ترتيب الأولوية التالي:
|
||||
|
||||
1. خيار CLI `--model` أو `-m`. الصيغة هي نفسها الموجودة في ملف الإعدادات: `provider_id/model_id`.
|
||||
|
||||
2. قائمة النماذج في إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
الصيغة هنا هي `provider/model`.
|
||||
|
||||
3. آخر نموذج تم استخدامه.
|
||||
|
||||
4. أول نموذج وفق أولوية داخلية.
|
||||
329
qimingcode/packages/web/src/content/docs/ar/modes.mdx
Normal file
329
qimingcode/packages/web/src/content/docs/ar/modes.mdx
Normal file
@@ -0,0 +1,329 @@
|
||||
---
|
||||
title: الأوضاع
|
||||
description: أوضاع مختلفة لحالات استخدام مختلفة.
|
||||
---
|
||||
|
||||
:::caution
|
||||
يتم الآن ضبط الأوضاع عبر خيار `agent` في إعدادات opencode. أصبح خيار
|
||||
`mode` مُهمَلًا الآن. [اعرف المزيد](/docs/agents).
|
||||
:::
|
||||
|
||||
تتيح لك الأوضاع في opencode تخصيص السلوك والأدوات والمطالبات لحالات استخدام مختلفة.
|
||||
|
||||
يأتي مع وضعين مدمجين: **build** و **plan**. يمكنك تخصيصهما أو إعداد
|
||||
أوضاعك الخاصة عبر إعدادات opencode.
|
||||
|
||||
يمكنك التبديل بين الأوضاع أثناء الجلسة أو إعدادها في ملف الإعدادات لديك.
|
||||
|
||||
---
|
||||
|
||||
## الأوضاع المدمجة
|
||||
|
||||
يأتي opencode مع وضعين مدمجين.
|
||||
|
||||
---
|
||||
|
||||
### Build
|
||||
|
||||
وضع Build هو الوضع **الافتراضي** مع تفعيل جميع الأدوات. هذا هو الوضع القياسي لأعمال التطوير عندما تحتاج إلى وصول كامل لعمليات الملفات وأوامر النظام.
|
||||
|
||||
---
|
||||
|
||||
### Plan
|
||||
|
||||
وضع مقيَّد مُصمَّم للتخطيط والتحليل. في وضع plan، تكون الأدوات التالية مُعطَّلة افتراضيًا:
|
||||
|
||||
- `write` - لا يمكن إنشاء ملفات جديدة
|
||||
- `edit` - لا يمكن تعديل الملفات الموجودة، باستثناء الملفات الموجودة في `.opencode/plans/*.md` لتفصيل الخطة نفسها
|
||||
- `patch` - لا يمكن تطبيق التصحيحات
|
||||
- `bash` - لا يمكن تنفيذ أوامر shell
|
||||
|
||||
يكون هذا الوضع مفيدًا عندما تريد من الذكاء الاصطناعي تحليل الشيفرة، أو اقتراح تغييرات، أو إنشاء خطط دون إجراء أي تعديلات فعلية على قاعدة الشيفرة لديك.
|
||||
|
||||
---
|
||||
|
||||
## التبديل
|
||||
|
||||
يمكنك التبديل بين الأوضاع أثناء الجلسة باستخدام مفتاح _Tab_، أو اختصار `switch_mode` الذي قمت بإعداده.
|
||||
|
||||
انظر أيضًا: [Formatters](/docs/formatters) لمعلومات حول إعدادات تنسيق الشيفرة.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص الأوضاع المدمجة أو إنشاء أوضاعك الخاصة عبر الإعدادات. يمكن إعداد الأوضاع بطريقتين:
|
||||
|
||||
### إعدادات JSON
|
||||
|
||||
قم بإعداد الأوضاع في ملف الإعدادات `opencode.json` لديك:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"build": {
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### إعدادات Markdown
|
||||
|
||||
يمكنك أيضًا تعريف الأوضاع باستخدام ملفات markdown. ضعها في:
|
||||
|
||||
- عالمي: `~/.config/opencode/modes/`
|
||||
- للمشروع: `.opencode/modes/`
|
||||
|
||||
```markdown title="~/.config/opencode/modes/review.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
يصبح اسم ملف markdown هو اسم الوضع (على سبيل المثال، `review.md` ينشئ وضعًا باسم `review`).
|
||||
|
||||
لنلقِ نظرة على خيارات الإعداد هذه بمزيد من التفصيل.
|
||||
|
||||
---
|
||||
|
||||
### النموذج
|
||||
|
||||
استخدم إعداد `model` لتجاوز النموذج الافتراضي لهذا الوضع. يفيد ذلك عند استخدام نماذج مختلفة مُحسَّنة لمهام مختلفة؛ مثل نموذج أسرع للتخطيط ونموذج أكثر قدرة للتنفيذ.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### درجة الحرارة
|
||||
|
||||
تحكَّم في العشوائية والإبداع في ردود الذكاء الاصطناعي عبر إعداد `temperature`. القيم الأقل تجعل الردود أكثر تركيزًا وحتمية، بينما تزيد القيم الأعلى الإبداع والتنوّع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتراوح قيم درجة الحرارة عادةً بين 0.0 و 1.0:
|
||||
|
||||
- **0.0-0.2**: ردود شديدة التركيز وحتمية، مثالية لتحليل الشيفرة والتخطيط
|
||||
- **0.3-0.5**: ردود متوازنة مع قدر من الإبداع، مناسبة لمهام التطوير العامة
|
||||
- **0.6-1.0**: ردود أكثر إبداعًا وتنوّعًا، مفيدة للعصف الذهني والاستكشاف
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد درجة الحرارة، يستخدم opencode القيم الافتراضية الخاصة بكل نموذج (عادةً 0 لمعظم النماذج و 0.55 لنماذج Qwen).
|
||||
|
||||
---
|
||||
|
||||
### الموجّه
|
||||
|
||||
حدِّد ملف موجّه نظام (system prompt) مخصص لهذا الوضع عبر إعداد `prompt`. ينبغي أن يحتوي ملف الموجّه على تعليمات مرتبطة بهدف هذا الوضع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا المسار نسبي بالنسبة لموقع ملف الإعدادات. لذلك يعمل مع
|
||||
إعدادات opencode العالمية وكذلك إعدادات المشروع.
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
تحكَّم في الأدوات المتاحة في هذا الوضع عبر إعداد `tools`. يمكنك تفعيل أدوات محددة أو تعطيلها بضبطها على `true` أو `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد أدوات، فستكون جميع الأدوات مفعّلة افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
#### الأدوات المتاحة
|
||||
|
||||
فيما يلي جميع الأدوات التي يمكن التحكم بها عبر إعدادات الوضع.
|
||||
|
||||
| الأداة | الوصف |
|
||||
| ----------- | -------------------------- |
|
||||
| `bash` | تنفيذ أوامر shell |
|
||||
| `edit` | تعديل الملفات الموجودة |
|
||||
| `write` | إنشاء ملفات جديدة |
|
||||
| `read` | قراءة محتويات الملفات |
|
||||
| `grep` | البحث في محتويات الملفات |
|
||||
| `glob` | العثور على الملفات حسب نمط |
|
||||
| `patch` | تطبيق تصحيحات على الملفات |
|
||||
| `todowrite` | إدارة قوائم المهام |
|
||||
| `webfetch` | جلب محتوى الويب |
|
||||
|
||||
---
|
||||
|
||||
## أوضاع مخصصة
|
||||
|
||||
يمكنك إنشاء أوضاعك المخصصة بإضافتها إلى الإعدادات. فيما يلي أمثلة باستخدام كلا الأسلوبين:
|
||||
|
||||
### باستخدام إعدادات JSON
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"docs": {
|
||||
"prompt": "{file:./prompts/documentation.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### باستخدام ملفات markdown
|
||||
|
||||
أنشئ ملفات الأوضاع في `.opencode/modes/` لأوضاع خاصة بالمشروع أو في `~/.config/opencode/modes/` لأوضاع عالمية:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Understanding the problem through careful analysis
|
||||
- Using bash commands to inspect system state
|
||||
- Reading relevant files and logs
|
||||
- Searching for patterns and anomalies
|
||||
- Providing clear explanations of findings
|
||||
|
||||
Do not make any changes to files. Only investigate and report.
|
||||
```
|
||||
|
||||
```markdown title="~/.config/opencode/modes/refactor.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.2
|
||||
tools:
|
||||
edit: true
|
||||
read: true
|
||||
grep: true
|
||||
glob: true
|
||||
---
|
||||
|
||||
You are in refactoring mode. Focus on improving code quality without changing functionality.
|
||||
|
||||
Priorities:
|
||||
|
||||
- Improve code readability and maintainability
|
||||
- Apply consistent naming conventions
|
||||
- Reduce code duplication
|
||||
- Optimize performance where appropriate
|
||||
- Ensure all tests continue to pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### حالات الاستخدام
|
||||
|
||||
فيما يلي بعض حالات الاستخدام الشائعة لأوضاع مختلفة.
|
||||
|
||||
- **Build mode**: أعمال تطوير كاملة مع تفعيل جميع الأدوات
|
||||
- **Plan mode**: التحليل والتخطيط دون إجراء تغييرات
|
||||
- **Review mode**: مراجعة الشيفرة مع وصول للقراءة فقط بالإضافة إلى أدوات التوثيق
|
||||
- **Debug mode**: تركيز على الاستقصاء مع تفعيل أدوات `bash` و `read`
|
||||
- **Docs mode**: كتابة التوثيق مع عمليات الملفات لكن دون أوامر النظام
|
||||
|
||||
قد تجد أيضًا أن نماذج مختلفة تكون أنسب لحالات استخدام مختلفة.
|
||||
57
qimingcode/packages/web/src/content/docs/ar/network.mdx
Normal file
57
qimingcode/packages/web/src/content/docs/ar/network.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: الشبكة
|
||||
description: إعداد الوكلاء والشهادات المخصصة.
|
||||
---
|
||||
|
||||
يدعم OpenCode متغيرات بيئة الوكيل (proxy) القياسية والشهادات المخصصة لبيئات الشبكات المؤسسية.
|
||||
|
||||
---
|
||||
|
||||
## الوكيل
|
||||
|
||||
يتبع OpenCode متغيرات بيئة الوكيل القياسية.
|
||||
|
||||
```bash
|
||||
# وكيل HTTPS (موصى به)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# وكيل HTTP (إذا لم يتوفر HTTPS)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# تجاوز الوكيل للخادم المحلي (مطلوب)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
تتواصل واجهة TUI مع خادم HTTP محلي. يجب تجاوز الوكيل لهذا الاتصال لمنع حلقات التوجيه.
|
||||
:::
|
||||
|
||||
يمكنك إعداد منفذ الخادم واسم المضيف باستخدام [أعلام CLI](/docs/cli#run).
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
إذا كان الوكيل يتطلب مصادقة أساسية، فأدرج بيانات الاعتماد في عنوان URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
تجنّب تضمين كلمات المرور بشكل ثابت. استخدم متغيرات البيئة أو تخزين بيانات اعتماد آمن.
|
||||
:::
|
||||
|
||||
بالنسبة للوكلاء الذين يتطلبون مصادقة متقدمة مثل NTLM أو Kerberos، فكّر في استخدام بوابة LLM تدعم طريقة المصادقة لديك.
|
||||
|
||||
---
|
||||
|
||||
## الشهادات المخصصة
|
||||
|
||||
إذا كانت مؤسستك تستخدم سلطات تصديق (CA) مخصصة لاتصالات HTTPS، فقم بإعداد OpenCode ليثق بها.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
يعمل ذلك لكل من اتصالات الوكيل والوصول المباشر إلى APIs.
|
||||
235
qimingcode/packages/web/src/content/docs/ar/permissions.mdx
Normal file
235
qimingcode/packages/web/src/content/docs/ar/permissions.mdx
Normal file
@@ -0,0 +1,235 @@
|
||||
---
|
||||
title: الأذونات
|
||||
description: تحكّم في الإجراءات التي تتطلب موافقة قبل تنفيذها.
|
||||
---
|
||||
|
||||
يستخدم OpenCode إعداد `permission` لتحديد ما إذا كان إجراءٌ ما سيُنفّذ تلقائيًا، أو سيطلب موافقتك، أو سيتم حظره.
|
||||
|
||||
اعتبارًا من `v1.1.1`، تم إهمال إعداد `tools` القديم (المنطقي) ودمجه ضمن `permission`. ولا يزال إعداد `tools` القديم مدعومًا للتوافق مع الإصدارات السابقة.
|
||||
|
||||
---
|
||||
|
||||
## الإجراءات
|
||||
|
||||
يؤول كل حكم أذونات إلى إحدى القيم التالية:
|
||||
|
||||
- `"allow"` — تشغيل دون موافقة
|
||||
- `"ask"` — طلب الموافقة
|
||||
- `"deny"` — حظر الإجراء
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تعيين الأذونات بشكل عام (باستخدام `*`) ثم تجاوزها لأدوات محددة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعيين جميع الأذونات دفعة واحدة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## قواعد دقيقة (صيغة الكائن)
|
||||
|
||||
في معظم الأذونات، يمكنك استخدام كائن لتطبيق إجراءات مختلفة بناءً على مُدخلات الأداة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"npm *": "allow",
|
||||
"rm *": "deny",
|
||||
"grep *": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"*": "deny",
|
||||
"packages/web/src/content/docs/*.mdx": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تُقيَّم القواعد عبر مطابقة الأنماط، مع كون **آخر قاعدة مطابقة هي التي تُطبَّق**. من الشائع وضع قاعدة الشمول `"*"` أولًا ثم القواعد الأكثر تحديدًا بعدها.
|
||||
|
||||
### أحرف البدل
|
||||
|
||||
تستخدم أنماط الأذونات مطابقة بسيطة لأحرف البدل:
|
||||
|
||||
- `*` يطابق صفرًا أو أكثر من أي حرف
|
||||
- `?` يطابق حرفًا واحدًا بالضبط
|
||||
- جميع الأحرف الأخرى تُطابق حرفيًا
|
||||
|
||||
### توسيع مجلد المنزل
|
||||
|
||||
يمكنك استخدام `~` أو `$HOME` في بداية النمط للإشارة إلى مجلد المنزل. هذا مفيد خصوصًا لقواعد [`external_directory`](#external-directories).
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### الأدلة الخارجية
|
||||
|
||||
استخدم `external_directory` للسماح باستدعاءات الأدوات التي تلمس مسارات خارج دليل العمل الذي بدأ منه OpenCode. ينطبق ذلك على أي أداة تأخذ مسارًا كمدخل (مثل `read` و`edit` و`glob` و`grep` والعديد من أوامر `bash`).
|
||||
|
||||
توسيع المنزل (مثل `~/...`) يؤثر فقط على طريقة كتابة النمط. لا يجعل ذلك المسار الخارجي جزءًا من مساحة العمل الحالية، لذا يجب السماح بالمسارات خارج دليل العمل عبر `external_directory` أيضًا.
|
||||
|
||||
على سبيل المثال، يتيح هذا الوصول إلى كل ما يقع تحت `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
أي دليل مسموح به هنا يرث نفس القيم الافتراضية لمساحة العمل الحالية. وبما أن [`read` افتراضيًا هو `allow`](#defaults)، فإن عمليات القراءة تكون مسموحة أيضًا للعناصر ضمن `external_directory` ما لم يتم تجاوز ذلك. أضِف قواعد صريحة عندما يجب تقييد أداة ما في هذه المسارات، مثل حظر التعديلات مع الإبقاء على القراءة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
اجعل القائمة مقتصرة على المسارات الموثوقة، ثم أضِف طبقات إضافية من قواعد `allow` أو `deny` حسب الحاجة لأدوات أخرى (مثل `bash`).
|
||||
|
||||
---
|
||||
|
||||
## الأذونات المتاحة
|
||||
|
||||
تُعرَّف أذونات OpenCode بأسماء الأدوات، بالإضافة إلى بعض حواجز الأمان:
|
||||
|
||||
- `read` — قراءة ملف (يطابق مسار الملف)
|
||||
- `edit` — جميع تعديلات الملفات (يشمل `edit` و`write` و`patch`)
|
||||
- `glob` — مطابقة أسماء الملفات (يطابق نمط الـ glob)
|
||||
- `grep` — البحث في المحتوى (يطابق نمط regex)
|
||||
- `bash` — تشغيل أوامر shell (يطابق الأوامر المُحلَّلة مثل `git status --porcelain`)
|
||||
- `task` — تشغيل وكلاء فرعيين (يطابق نوع الوكيل الفرعي)
|
||||
- `skill` — تحميل مهارة (يطابق اسم المهارة)
|
||||
- `lsp` — تشغيل استعلامات LSP (حاليًا دون قواعد دقيقة)
|
||||
- `webfetch` — جلب عنوان URL (يطابق الـ URL)
|
||||
- `websearch`, `codesearch` — بحث الويب/الكود (يطابق الاستعلام)
|
||||
- `external_directory` — يُفعَّل عندما تلمس أداة مسارات خارج دليل عمل المشروع
|
||||
- `doom_loop` — يُفعَّل عندما يتكرر نفس استدعاء الأداة 3 مرات مع نفس المُدخلات
|
||||
|
||||
---
|
||||
|
||||
## القيم الافتراضية
|
||||
|
||||
إذا لم تحدد شيئًا، يبدأ OpenCode بقيم افتراضية متساهلة:
|
||||
|
||||
- معظم الأذونات افتراضيًا تكون `"allow"`.
|
||||
- `doom_loop` و`external_directory` افتراضيًا تكون `"ask"`.
|
||||
- `read` هو `"allow"`، لكن ملفات `.env` تكون مرفوضة افتراضيًا:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ماذا تفعل `"ask"`
|
||||
|
||||
عندما يطلب OpenCode الموافقة، تعرض الواجهة ثلاث نتائج ممكنة:
|
||||
|
||||
- `once` — الموافقة على هذا الطلب فقط
|
||||
- `always` — الموافقة على الطلبات المستقبلية المطابقة للأنماط المقترحة (لباقي جلسة OpenCode الحالية)
|
||||
- `reject` — رفض الطلب
|
||||
|
||||
مجموعة الأنماط التي ستوافق عليها `always` تُوفَّر من الأداة نفسها (على سبيل المثال، موافقات `bash` عادةً ما تُدرج بادئة أمر آمنة في القائمة البيضاء مثل `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## الوكلاء
|
||||
|
||||
يمكنك تجاوز الأذونات لكل وكيل. تُدمَج أذونات الوكلاء مع الإعداد العام، وتكون قواعد الوكيل هي ذات الأولوية. [تعرّف أكثر](/docs/agents#permissions) على أذونات الوكلاء.
|
||||
|
||||
:::note
|
||||
ارجع إلى قسم [قواعد دقيقة (صيغة الكائن)](#granular-rules-object-syntax) للحصول على أمثلة أكثر تفصيلًا حول مطابقة الأنماط.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "deny",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "ask",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا ضبط أذونات الوكيل في Markdown:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
:::tip
|
||||
استخدم مطابقة الأنماط للأوامر التي تحتوي على معاملات. يسمح `"grep *"` بتنفيذ `grep pattern file.txt`، بينما سيحظر `"grep"` وحده ذلك. تعمل أوامر مثل `git status` للسلوك الافتراضي، لكنها تتطلب إذنًا صريحًا (مثل `"git status *"`) عند تمرير معاملات.
|
||||
:::
|
||||
385
qimingcode/packages/web/src/content/docs/ar/plugins.mdx
Normal file
385
qimingcode/packages/web/src/content/docs/ar/plugins.mdx
Normal file
@@ -0,0 +1,385 @@
|
||||
---
|
||||
title: الإضافات
|
||||
description: اكتب إضافاتك الخاصة لتوسيع OpenCode.
|
||||
---
|
||||
|
||||
تتيح لك الإضافات توسيع OpenCode عبر ربطها بأحداث مختلفة وتخصيص السلوك. يمكنك إنشاء إضافات لإضافة ميزات جديدة، أو التكامل مع خدمات خارجية، أو تعديل السلوك الافتراضي لـ OpenCode.
|
||||
|
||||
للاطلاع على أمثلة، راجع [الإضافات](/docs/ecosystem#plugins) التي أنشأها المجتمع.
|
||||
|
||||
---
|
||||
|
||||
## استخدام إضافة
|
||||
|
||||
هناك طريقتان لتحميل الإضافات.
|
||||
|
||||
---
|
||||
|
||||
### من ملفات محلية
|
||||
|
||||
ضع ملفات JavaScript أو TypeScript في دليل الإضافات.
|
||||
|
||||
- `.opencode/plugins/` - إضافات على مستوى المشروع
|
||||
- `~/.config/opencode/plugins/` - إضافات عامة
|
||||
|
||||
تُحمَّل الملفات في هذه الأدلة تلقائيا عند بدء التشغيل.
|
||||
|
||||
---
|
||||
|
||||
### من npm
|
||||
|
||||
حدّد حزم npm في ملف الإعدادات.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
يتم دعم حزم npm العادية والحزم ذات النطاق (scoped).
|
||||
|
||||
تصفّح الإضافات المتاحة في [النظام البيئي](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### كيفية تثبيت الإضافات
|
||||
|
||||
**إضافات npm** تُثبَّت تلقائيا باستخدام Bun عند بدء التشغيل. تُخزَّن الحزم واعتمادياتها مؤقتا في `~/.cache/opencode/node_modules/`.
|
||||
|
||||
**الإضافات المحلية** تُحمَّل مباشرة من دليل الإضافات. لاستخدام حزم خارجية، يجب إنشاء `package.json` داخل دليل الإعدادات لديك (راجع [الاعتماديات](#dependencies))، أو نشر الإضافة على npm ثم [إضافتها إلى إعداداتك](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### ترتيب التحميل
|
||||
|
||||
تُحمَّل الإضافات من جميع المصادر وتعمل جميع الخطافات بالتتابع. ترتيب التحميل هو:
|
||||
|
||||
1. إعدادات عامة (`~/.config/opencode/opencode.json`)
|
||||
2. إعدادات المشروع (`opencode.json`)
|
||||
3. دليل الإضافات العام (`~/.config/opencode/plugins/`)
|
||||
4. دليل إضافات المشروع (`.opencode/plugins/`)
|
||||
|
||||
تُحمَّل حزم npm المكررة ذات الاسم والإصدار نفسيهما مرة واحدة. ومع ذلك، تُحمَّل الإضافة المحلية وإضافة npm ذات الاسم المشابه كلتاهما بشكل مستقل.
|
||||
|
||||
---
|
||||
|
||||
## إنشاء إضافة
|
||||
|
||||
الإضافة هي **وحدة JavaScript/TypeScript** تصدّر دالة إضافة واحدة أو أكثر.
|
||||
تستقبل كل دالة كائنا للسياق وتعيد كائنا للخطافات.
|
||||
|
||||
---
|
||||
|
||||
### الاعتماديات
|
||||
|
||||
يمكن للإضافات المحلية والأدوات المخصصة استخدام حزم npm خارجية. أضف `package.json` إلى دليل الإعدادات لديك متضمنا الاعتماديات التي تحتاجها.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يشغّل OpenCode الأمر `bun install` عند بدء التشغيل لتثبيتها. بعد ذلك يمكن لإضافاتك وأدواتك استيرادها.
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
import { escape } from "shescape"
|
||||
|
||||
export const MyPlugin = async (ctx) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "bash") {
|
||||
output.args.command = escape(output.args.command)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### البنية الأساسية
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin initialized!")
|
||||
|
||||
return {
|
||||
// Hook implementations go here
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تستقبل دالة الإضافة ما يلي:
|
||||
|
||||
- `project`: معلومات المشروع الحالي.
|
||||
- `directory`: دليل العمل الحالي.
|
||||
- `worktree`: مسار git worktree.
|
||||
- `client`: عميل SDK لـ opencode للتفاعل مع الذكاء الاصطناعي.
|
||||
- `$`: واجهة [shell API](https://bun.com/docs/runtime/shell) الخاصة بـ Bun لتنفيذ الأوامر.
|
||||
|
||||
---
|
||||
|
||||
### دعم TypeScript
|
||||
|
||||
بالنسبة لإضافات TypeScript، يمكنك استيراد الأنواع من حزمة الإضافة:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Type-safe hook implementations
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الأحداث
|
||||
|
||||
يمكن للإضافات الاشتراك في الأحداث كما هو موضح أدناه في قسم الأمثلة. فيما يلي قائمة بالأحداث المتاحة.
|
||||
|
||||
#### أحداث الأوامر
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### أحداث الملفات
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### أحداث التثبيت
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### أحداث LSP
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### أحداث الرسائل
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### أحداث الأذونات
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### أحداث الخادم
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### أحداث الجلسة
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### أحداث Todo
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### أحداث shell
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### أحداث الأدوات
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### أحداث واجهة TUI
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
فيما يلي بعض أمثلة الإضافات التي يمكنك استخدامها لتوسيع opencode.
|
||||
|
||||
---
|
||||
|
||||
### إرسال إشعارات
|
||||
|
||||
أرسل إشعارات عند وقوع أحداث معينة:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Send notification on session completion
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
نستخدم `osascript` لتشغيل AppleScript على macOS. هنا نستخدمه لإرسال إشعارات.
|
||||
|
||||
:::note
|
||||
إذا كنت تستخدم تطبيق OpenCode لسطح المكتب، فيمكنه إرسال إشعارات النظام تلقائيا عند جاهزية الرد أو عند حدوث خطأ في جلسة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### حماية .env
|
||||
|
||||
امنع opencode من قراءة ملفات `.env`:
|
||||
|
||||
```javascript title=".opencode/plugins/env-protection.js"
|
||||
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "read" && output.args.filePath.includes(".env")) {
|
||||
throw new Error("Do not read .env files")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### حقن متغيرات البيئة
|
||||
|
||||
احقن متغيرات البيئة في جميع عمليات تنفيذ shell (أدوات الذكاء الاصطناعي وterminal المستخدم):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secret"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### أدوات مخصصة
|
||||
|
||||
يمكن للإضافات أيضا إضافة أدوات مخصصة إلى opencode:
|
||||
|
||||
```ts title=".opencode/plugins/custom-tools.ts"
|
||||
import { type Plugin, tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomToolsPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
tool: {
|
||||
mytool: tool({
|
||||
description: "This is a custom tool",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تقوم الدالة المساعدة `tool` بإنشاء أداة مخصصة يمكن لـ opencode استدعاؤها. تأخذ دالة مخطط Zod وتعيد تعريف أداة يتضمن:
|
||||
|
||||
- `description`: ما الذي تفعله الأداة
|
||||
- `args`: مخطط Zod لوسائط الأداة
|
||||
- `execute`: الدالة التي تُشغَّل عند استدعاء الأداة
|
||||
|
||||
ستكون أدواتك المخصصة متاحة لـ opencode إلى جانب الأدوات المضمنة.
|
||||
|
||||
---
|
||||
|
||||
### التسجيل
|
||||
|
||||
استخدم `client.app.log()` بدلا من `console.log` للتسجيل البنيوي:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin initialized",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
المستويات: `debug`, `info`, `warn`, `error`. راجع [توثيق SDK](https://opencode.ai/docs/sdk) للتفاصيل.
|
||||
|
||||
---
|
||||
|
||||
### خطافات الضغط
|
||||
|
||||
خصّص السياق الذي يتم تضمينه عند ضغط جلسة:
|
||||
|
||||
```ts title=".opencode/plugins/compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Inject additional context into the compaction prompt
|
||||
output.context.push(`
|
||||
## Custom Context
|
||||
|
||||
Include any state that should persist across compaction:
|
||||
- Current task status
|
||||
- Important decisions made
|
||||
- Files being actively worked on
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يعمل الخطاف `experimental.session.compacting` قبل أن ينشئ نموذج اللغة الكبير (LLM) ملخص المتابعة. استخدمه لحقن سياق خاص بالمجال قد يفوته موجّه الضغط الافتراضي.
|
||||
|
||||
يمكنك أيضا استبدال موجّه الضغط بالكامل عبر ضبط `output.prompt`:
|
||||
|
||||
```ts title=".opencode/plugins/custom-compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomCompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Replace the entire compaction prompt
|
||||
output.prompt = `
|
||||
You are generating a continuation prompt for a multi-agent swarm session.
|
||||
|
||||
Summarize:
|
||||
1. The current task and its status
|
||||
2. Which files are being modified and by whom
|
||||
3. Any blockers or dependencies between agents
|
||||
4. The next steps to complete the work
|
||||
|
||||
Format as a structured prompt that a new agent can use to resume work.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند ضبط `output.prompt` فإنه يستبدل موجّه الضغط الافتراضي بالكامل. يتم تجاهل المصفوفة `output.context` في هذه الحالة.
|
||||
1945
qimingcode/packages/web/src/content/docs/ar/providers.mdx
Normal file
1945
qimingcode/packages/web/src/content/docs/ar/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
qimingcode/packages/web/src/content/docs/ar/rules.mdx
Normal file
180
qimingcode/packages/web/src/content/docs/ar/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: القواعد
|
||||
description: اضبط تعليمات مخصصة لـ opencode.
|
||||
---
|
||||
|
||||
يمكنك تزويد opencode بتعليمات مخصصة عبر إنشاء ملف `AGENTS.md`. هذا مشابه لقواعد Cursor. يحتوي هذا الملف على تعليمات تُضاف إلى سياق نموذج اللغة (LLM) لتخصيص سلوكه لمشروعك المحدد.
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
لإنشاء ملف `AGENTS.md` جديد، يمكنك تشغيل الأمر `/init` في opencode.
|
||||
|
||||
:::tip
|
||||
يُستحسن عمل commit لملف `AGENTS.md` الخاص بمشروعك إلى Git.
|
||||
:::
|
||||
|
||||
سيقوم ذلك بفحص مشروعك وكل محتوياته لفهم طبيعة المشروع وتوليد ملف `AGENTS.md` بناءً على ذلك. يساعد هذا opencode على التنقّل داخل المشروع بشكل أفضل.
|
||||
|
||||
إذا كان لديك ملف `AGENTS.md` موجود بالفعل، فسيحاول هذا إضافة محتوى إليه.
|
||||
|
||||
---
|
||||
|
||||
## مثال
|
||||
|
||||
يمكنك أيضًا إنشاء هذا الملف يدويًا. إليك مثالًا على بعض الأمور التي يمكنك وضعها في ملف `AGENTS.md`.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# SST v3 Monorepo Project
|
||||
|
||||
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
|
||||
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Main SST configuration with dynamic imports
|
||||
|
||||
## Code Standards
|
||||
|
||||
- Use TypeScript with strict mode enabled
|
||||
- Shared code goes in `packages/core/` with proper exports configuration
|
||||
- Functions go in `packages/functions/`
|
||||
- Infrastructure should be split into logical files in `infra/`
|
||||
|
||||
## Monorepo Conventions
|
||||
|
||||
- Import shared modules using workspace names: `@my-app/core/example`
|
||||
```
|
||||
|
||||
نضيف هنا تعليمات خاصة بالمشروع، وسيتم مشاركتها عبر فريقك.
|
||||
|
||||
---
|
||||
|
||||
## الأنواع
|
||||
|
||||
يدعم opencode أيضًا قراءة ملف `AGENTS.md` من مواقع متعددة، ولكل موقع غرض مختلف.
|
||||
|
||||
### المشروع
|
||||
|
||||
ضع ملف `AGENTS.md` في جذر مشروعك للقواعد الخاصة بالمشروع. لا تُطبَّق هذه القواعد إلا عند العمل داخل هذا المجلد أو مجلداته الفرعية.
|
||||
|
||||
### عام
|
||||
|
||||
يمكنك أيضًا وضع قواعد عامة في ملف `~/.config/opencode/AGENTS.md`. تُطبَّق هذه القواعد على جميع جلسات opencode.
|
||||
|
||||
وبما أن هذا الملف لا يتم عمل commit له إلى Git ولا تتم مشاركته مع فريقك، نوصي باستخدامه لتحديد أي قواعد شخصية يجب أن يلتزم بها نموذج اللغة.
|
||||
|
||||
### التوافق مع Claude Code
|
||||
|
||||
للمستخدمين الذين ينتقلون من Claude Code، يدعم OpenCode اصطلاحات ملفات Claude Code كبدائل احتياطية:
|
||||
|
||||
- **قواعد المشروع**: `CLAUDE.md` في دليل مشروعك (يُستخدم إذا لم يوجد `AGENTS.md`)
|
||||
- **قواعد عامة**: `~/.claude/CLAUDE.md` (يُستخدم إذا لم يوجد `~/.config/opencode/AGENTS.md`)
|
||||
- **المهارات**: `~/.claude/skills/` — راجع [مهارات الوكيل](/docs/skills/) للتفاصيل
|
||||
|
||||
لإيقاف التوافق مع Claude Code، عيّن أحد متغيرات البيئة التالية:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الأولوية
|
||||
|
||||
عند بدء opencode، يبحث عن ملفات القواعد بهذا الترتيب:
|
||||
|
||||
1. **ملفات محلية** عبر التنقّل صعودًا من الدليل الحالي (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **ملف عام** في `~/.config/opencode/AGENTS.md`
|
||||
3. **ملف Claude Code** في `~/.claude/CLAUDE.md` (ما لم يتم تعطيله)
|
||||
|
||||
يتم اعتماد أول ملف مطابق ضمن كل فئة. على سبيل المثال، إذا كان لديك كل من `AGENTS.md` و`CLAUDE.md` فسيتم استخدام `AGENTS.md` فقط. وبالمثل، تكون الأولوية لملف `~/.config/opencode/AGENTS.md` على `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## تعليمات مخصصة
|
||||
|
||||
يمكنك تحديد ملفات تعليمات مخصصة في `opencode.json` أو في الملف العام `~/.config/opencode/opencode.json`. يتيح ذلك لك ولفريقك إعادة استخدام القواعد الموجودة بدلًا من تكرارها داخل AGENTS.md.
|
||||
|
||||
مثال:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا استخدام عناوين URL بعيدة لتحميل التعليمات من الويب.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يتم جلب التعليمات البعيدة بمهلة قدرها 5 ثوانٍ.
|
||||
|
||||
تُدمَج جميع ملفات التعليمات مع ملفات `AGENTS.md` لديك.
|
||||
|
||||
---
|
||||
|
||||
## الإشارة إلى ملفات خارجية
|
||||
|
||||
على الرغم من أن opencode لا يقوم تلقائيًا بتحليل مراجع الملفات داخل `AGENTS.md`، يمكنك تحقيق وظيفة مشابهة بطريقتين:
|
||||
|
||||
### استخدام opencode.json
|
||||
|
||||
النهج الموصى به هو استخدام الحقل `instructions` في `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### تعليمات يدوية في AGENTS.md
|
||||
|
||||
يمكنك تعليم opencode قراءة ملفات خارجية عبر تقديم تعليمات صريحة داخل `AGENTS.md`. إليك مثالًا عمليًا:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# TypeScript Project Rules
|
||||
|
||||
## External File Loading
|
||||
|
||||
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
|
||||
|
||||
Instructions:
|
||||
|
||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
||||
- When loaded, treat content as mandatory instructions that override defaults
|
||||
- Follow references recursively when needed
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
For TypeScript code style and best practices: @docs/typescript-guidelines.md
|
||||
For React component architecture and hooks patterns: @docs/react-patterns.md
|
||||
For REST API design and error handling: @docs/api-standards.md
|
||||
For testing strategies and coverage requirements: @test/testing-guidelines.md
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
يتيح لك هذا النهج ما يلي:
|
||||
|
||||
- إنشاء ملفات قواعد معيارية قابلة لإعادة الاستخدام
|
||||
- مشاركة القواعد عبر المشاريع باستخدام symlinks أو git submodules
|
||||
- إبقاء AGENTS.md موجزًا مع الإشارة إلى إرشادات تفصيلية
|
||||
- ضمان أن opencode يحمّل الملفات فقط عند الحاجة للمهمة المحددة
|
||||
|
||||
:::tip
|
||||
بالنسبة للمستودعات متعددة الحزم (monorepos) أو المشاريع ذات المعايير المشتركة، فإن استخدام `opencode.json` مع أنماط glob (مثل `packages/*/AGENTS.md`) أسهل للصيانة من التعليمات اليدوية.
|
||||
:::
|
||||
463
qimingcode/packages/web/src/content/docs/ar/sdk.mdx
Normal file
463
qimingcode/packages/web/src/content/docs/ar/sdk.mdx
Normal file
@@ -0,0 +1,463 @@
|
||||
---
|
||||
title: مجموعة تطوير البرمجيات (SDK)
|
||||
description: عميل JavaScript آمن الأنواع لخادم opencode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
توفر SDK الخاصة بـ opencode لـ JS/TS عميلا آمنا للأنواع للتفاعل مع الخادم.
|
||||
استخدمها لبناء التكاملات والتحكم في opencode برمجيا.
|
||||
|
||||
[اعرف المزيد](/docs/server) حول كيفية عمل الخادم. للاطلاع على أمثلة، تفقد [المشاريع](/docs/ecosystem#projects) التي أنشأها المجتمع.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
ثبّت SDK من npm:
|
||||
|
||||
```bash
|
||||
npm install @opencode-ai/sdk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إنشاء عميل
|
||||
|
||||
أنشئ مثيلا من opencode:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const { client } = await createOpencode()
|
||||
```
|
||||
|
||||
هذا يشغّل خادما وعميلا معا.
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | النوع | الوصف | الافتراضي |
|
||||
| ---------- | ------------- | ----------------------------- | ----------- |
|
||||
| `hostname` | `string` | اسم مضيف الخادم | `127.0.0.1` |
|
||||
| `port` | `number` | منفذ الخادم | `4096` |
|
||||
| `signal` | `AbortSignal` | إشارة إلغاء للإيقاف | `undefined` |
|
||||
| `timeout` | `number` | مهلة بدء الخادم بالمللي ثانية | `5000` |
|
||||
| `config` | `Config` | كائن الإعدادات | `{}` |
|
||||
|
||||
---
|
||||
|
||||
## الإعدادات
|
||||
|
||||
يمكنك تمرير كائن إعدادات لتخصيص السلوك. سيستمر المثيل في التقاط `opencode.json` لديك، لكن يمكنك تجاوز الإعدادات أو إضافة إعدادات مباشرة:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const opencode = await createOpencode({
|
||||
hostname: "127.0.0.1",
|
||||
port: 4096,
|
||||
config: {
|
||||
model: "anthropic/claude-3-5-sonnet-20241022",
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`Server running at ${opencode.server.url}`)
|
||||
|
||||
opencode.server.close()
|
||||
```
|
||||
|
||||
## العميل فقط
|
||||
|
||||
إذا كان لديك مثيل opencode يعمل بالفعل، يمكنك إنشاء مثيل عميل للاتصال به:
|
||||
|
||||
```javascript
|
||||
import { createOpencodeClient } from "@opencode-ai/sdk"
|
||||
|
||||
const client = createOpencodeClient({
|
||||
baseUrl: "http://localhost:4096",
|
||||
})
|
||||
```
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | النوع | الوصف | الافتراضي |
|
||||
| --------------- | ---------- | --------------------------------- | ----------------------- |
|
||||
| `baseUrl` | `string` | عنوان URL للخادم | `http://localhost:4096` |
|
||||
| `fetch` | `function` | تنفيذ fetch مخصص | `globalThis.fetch` |
|
||||
| `parseAs` | `string` | طريقة تحليل الاستجابة | `auto` |
|
||||
| `responseStyle` | `string` | أسلوب الإرجاع: `data` أو `fields` | `fields` |
|
||||
| `throwOnError` | `boolean` | رمي الأخطاء بدلا من إرجاعها | `false` |
|
||||
|
||||
---
|
||||
|
||||
## الأنواع
|
||||
|
||||
تتضمن SDK تعريفات TypeScript لجميع أنواع API. استوردها مباشرة:
|
||||
|
||||
```typescript
|
||||
import type { Session, Message, Part } from "@opencode-ai/sdk"
|
||||
```
|
||||
|
||||
جميع الأنواع مولّدة من مواصفات OpenAPI الخاصة بالخادم ومتاحة في <a href={typesUrl}>ملف الأنواع</a>.
|
||||
|
||||
---
|
||||
|
||||
## الأخطاء
|
||||
|
||||
يمكن أن ترمي SDK أخطاء يمكنك التقاطها ومعالجتها:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await client.session.get({ path: { id: "invalid-id" } })
|
||||
} catch (error) {
|
||||
console.error("Failed to get session:", (error as Error).message)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المخرجات المنظمة
|
||||
|
||||
يمكنك طلب مخرجات JSON منظمة من النموذج عن طريق تحديد `format` مع مخطط JSON. سيستخدم النموذج أداة `StructuredOutput` لإرجاع JSON تم التحقق من صحته ومطابق للمخطط الخاص بك.
|
||||
|
||||
### الاستخدام الأساسي
|
||||
|
||||
```typescript
|
||||
const result = await client.session.prompt({
|
||||
path: { id: sessionId },
|
||||
body: {
|
||||
parts: [{ type: "text", text: "Research Anthropic and provide company info" }],
|
||||
format: {
|
||||
type: "json_schema",
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
company: { type: "string", description: "Company name" },
|
||||
founded: { type: "number", description: "Year founded" },
|
||||
products: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "Main products",
|
||||
},
|
||||
},
|
||||
required: ["company", "founded"],
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
// Access the structured output
|
||||
console.log(result.data.info.structured_output)
|
||||
// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }
|
||||
```
|
||||
|
||||
### أنواع صيغ الإخراج
|
||||
|
||||
| النوع | الوصف |
|
||||
| ------------- | -------------------------------------------------- |
|
||||
| `text` | الافتراضي. استجابة نصية قياسية (بدون مخرجات منظمة) |
|
||||
| `json_schema` | يرجع JSON تم التحقق من صحته ومطابق للمخطط المقدم |
|
||||
|
||||
### صيغة مخطط JSON
|
||||
|
||||
عند استخدام `type: 'json_schema'`، يجب تقديم:
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
| ------------ | --------------- | ------------------------------------------------ |
|
||||
| `type` | `'json_schema'` | مطلوب. يحدد وضع مخطط JSON |
|
||||
| `schema` | `object` | مطلوب. كائن مخطط JSON الذي يحدد بنية الإخراج |
|
||||
| `retryCount` | `number` | اختياري. عدد محاولات إعادة التحقق (الافتراضي: 2) |
|
||||
|
||||
### معالجة الأخطاء
|
||||
|
||||
إذا فشل النموذج في إنتاج مخرجات منظمة صالحة بعد جميع المحاولات، ستتضمن الاستجابة `StructuredOutputError`:
|
||||
|
||||
```typescript
|
||||
if (result.data.info.error?.name === "StructuredOutputError") {
|
||||
console.error("Failed to produce structured output:", result.data.info.error.message)
|
||||
console.error("Attempts:", result.data.info.error.retries)
|
||||
}
|
||||
```
|
||||
|
||||
### أفضل الممارسات
|
||||
|
||||
1. **قدّم أوصافا واضحة** في خصائص المخطط لمساعدة النموذج على فهم البيانات التي يجب استخراجها
|
||||
2. **استخدم `required`** لتحديد الحقول التي يجب أن تكون موجودة
|
||||
3. **حافظ على تركيز المخططات** - المخططات المتداخلة المعقدة قد تكون أصعب على النموذج لملئها بشكل صحيح
|
||||
4. **عيّن `retryCount` مناسبا** - قم بزيادته للمخططات المعقدة، وتقليله للمخططات البسيطة
|
||||
|
||||
---
|
||||
|
||||
## APIs
|
||||
|
||||
توفر SDK جميع واجهات الخادم عبر عميل آمن للأنواع.
|
||||
|
||||
---
|
||||
|
||||
### عام (`global`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ----------------- | ---------------------------- | ------------------------------------ |
|
||||
| `global.health()` | التحقق من صحة الخادم وإصداره | `{ healthy: true, version: string }` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
const health = await client.global.health()
|
||||
console.log(health.data.version)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### التطبيق (`app`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| -------------- | ------------------------- | ------------------------------------------- |
|
||||
| `app.log()` | كتابة إدخال في السجل | `boolean` |
|
||||
| `app.agents()` | سرد جميع الوكلاء المتاحين | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Write a log entry
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-app",
|
||||
level: "info",
|
||||
message: "Operation completed",
|
||||
},
|
||||
})
|
||||
|
||||
// List available agents
|
||||
const agents = await client.app.agents()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المشروع (`project`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------- | ------------------ | --------------------------------------------- |
|
||||
| `project.list()` | سرد جميع المشاريع | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `project.current()` | جلب المشروع الحالي | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// List all projects
|
||||
const projects = await client.project.list()
|
||||
|
||||
// Get current project
|
||||
const currentProject = await client.project.current()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المسار (`path`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------ | ----------------- | ---------------------------------------- |
|
||||
| `path.get()` | جلب المسار الحالي | <a href={typesUrl}><code>Path</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Get current path information
|
||||
const pathInfo = await client.path.get()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات (`config`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `config.get()` | جلب معلومات الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `config.providers()` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
const config = await client.config.get()
|
||||
|
||||
const { providers, default: defaults } = await client.config.providers()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الجلسات (`session`)
|
||||
|
||||
| الطريقة | الوصف | ملاحظات |
|
||||
| ---------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `session.list()` | سرد الجلسات | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.get({ path })` | جلب جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.children({ path })` | سرد الجلسات الفرعية | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.create({ body })` | إنشاء جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.delete({ path })` | حذف جلسة | يعيد `boolean` |
|
||||
| `session.update({ path, body })` | تحديث خصائص الجلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.init({ path, body })` | تحليل التطبيق وإنشاء `AGENTS.md` | يعيد `boolean` |
|
||||
| `session.abort({ path })` | إيقاف جلسة قيد التشغيل | يعيد `boolean` |
|
||||
| `session.share({ path })` | مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unshare({ path })` | إلغاء مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.summarize({ path, body })` | تلخيص جلسة | يعيد `boolean` |
|
||||
| `session.messages({ path })` | سرد الرسائل في جلسة | يعيد `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
|
||||
| `session.message({ path })` | جلب تفاصيل الرسالة | يعيد `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.prompt({ path, body })` | إرسال رسالة مطالبة | `body.noReply: true` يعيد UserMessage (للسياق فقط). الافتراضي يعيد <a href={typesUrl}><code>AssistantMessage</code></a> مع استجابة AI. يدعم `body.outputFormat` من أجل [المخرجات المنظمة](#المخرجات-المنظمة) |
|
||||
| `session.command({ path, body })` | إرسال أمر إلى الجلسة | يعيد `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.shell({ path, body })` | تشغيل أمر shell | يعيد <a href={typesUrl}><code>AssistantMessage</code></a> |
|
||||
| `session.revert({ path, body })` | التراجع عن رسالة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unrevert({ path })` | استعادة الرسائل المتراجع عنها | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `postSessionByIdPermissionsByPermissionId({ path, body })` | الاستجابة لطلب إذن | يعيد `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Create and manage sessions
|
||||
const session = await client.session.create({
|
||||
body: { title: "My session" },
|
||||
})
|
||||
|
||||
const sessions = await client.session.list()
|
||||
|
||||
// Send a prompt message
|
||||
const result = await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
|
||||
parts: [{ type: "text", text: "Hello!" }],
|
||||
},
|
||||
})
|
||||
|
||||
// Inject context without triggering AI response (useful for plugins)
|
||||
await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
noReply: true,
|
||||
parts: [{ type: "text", text: "You are a helpful assistant." }],
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الملفات
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------- |
|
||||
| `find.text({ query })` | البحث عن نص داخل الملفات | مصفوفة من كائنات المطابقة مع `path` و`lines` و`line_number` و`absolute_offset` و`submatches` |
|
||||
| `find.files({ query })` | العثور على الملفات والمجلدات بالاسم | `string[]` (مسارات) |
|
||||
| `find.symbols({ query })` | العثور على رموز مساحة العمل | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `file.read({ query })` | قراءة ملف | `{ type: "raw" \| "patch", content: string }` |
|
||||
| `file.status({ query? })` | جلب حالة الملفات المتتبَّعة | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
يدعم `find.files` بعض حقول الاستعلام الاختيارية:
|
||||
|
||||
- `type`: `"file"` أو `"directory"`
|
||||
- `directory`: تجاوز جذر المشروع لعملية البحث
|
||||
- `limit`: الحد الأقصى للنتائج (1–200)
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Search and read files
|
||||
const textResults = await client.find.text({
|
||||
query: { pattern: "function.*opencode" },
|
||||
})
|
||||
|
||||
const files = await client.find.files({
|
||||
query: { query: "*.ts", type: "file" },
|
||||
})
|
||||
|
||||
const directories = await client.find.files({
|
||||
query: { query: "packages", type: "directory", limit: 20 },
|
||||
})
|
||||
|
||||
const content = await client.file.read({
|
||||
query: { path: "src/index.ts" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### واجهة TUI (`tui`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------------------ | ---------------------- | --------- |
|
||||
| `tui.appendPrompt({ body })` | إلحاق نص بالمطالبة | `boolean` |
|
||||
| `tui.openHelp()` | فتح مربع حوار المساعدة | `boolean` |
|
||||
| `tui.openSessions()` | فتح محدد الجلسات | `boolean` |
|
||||
| `tui.openThemes()` | فتح محدد السمات | `boolean` |
|
||||
| `tui.openModels()` | فتح محدد النماذج | `boolean` |
|
||||
| `tui.submitPrompt()` | إرسال المطالبة الحالية | `boolean` |
|
||||
| `tui.clearPrompt()` | مسح المطالبة | `boolean` |
|
||||
| `tui.executeCommand({ body })` | تنفيذ أمر | `boolean` |
|
||||
| `tui.showToast({ body })` | عرض إشعار toast | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Control TUI interface
|
||||
await client.tui.appendPrompt({
|
||||
body: { text: "Add this to prompt" },
|
||||
})
|
||||
|
||||
await client.tui.showToast({
|
||||
body: { message: "Task completed", variant: "success" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المصادقة (`auth`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------- | ---------------------------- | --------- |
|
||||
| `auth.set({ ... })` | تعيين بيانات اعتماد المصادقة | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
await client.auth.set({
|
||||
path: { id: "anthropic" },
|
||||
body: { type: "api", key: "your-api-key" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الأحداث (`event`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------- | -------------------------- | -------------------------- |
|
||||
| `event.subscribe()` | تدفق أحداث مرسلة من الخادم | تدفق أحداث مرسلة من الخادم |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Listen to real-time events
|
||||
const events = await client.event.subscribe()
|
||||
for await (const event of events.stream) {
|
||||
console.log("Event:", event.type, event.properties)
|
||||
}
|
||||
```
|
||||
287
qimingcode/packages/web/src/content/docs/ar/server.mdx
Normal file
287
qimingcode/packages/web/src/content/docs/ar/server.mdx
Normal file
@@ -0,0 +1,287 @@
|
||||
---
|
||||
title: الخادم
|
||||
description: تفاعل مع خادم opencode عبر HTTP.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
يشغّل الأمر `opencode serve` خادما HTTP دون واجهة ويعرض نقطة نهاية OpenAPI يمكن لعميل opencode استخدامها.
|
||||
|
||||
---
|
||||
|
||||
### الاستخدام
|
||||
|
||||
```bash
|
||||
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
|
||||
```
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | الوصف | الافتراضي |
|
||||
| --------------- | ------------------------------------- | ---------------- |
|
||||
| `--port` | المنفذ الذي يستمع عليه | `4096` |
|
||||
| `--hostname` | اسم المضيف الذي يستمع عليه | `127.0.0.1` |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS | `false` |
|
||||
| `--mdns-domain` | اسم نطاق مخصص لخدمة mDNS | `opencode.local` |
|
||||
| `--cors` | أصول (Origins) متصفح إضافية مسموح بها | `[]` |
|
||||
|
||||
يمكن تمرير `--cors` عدة مرات:
|
||||
|
||||
```bash
|
||||
opencode serve --cors http://localhost:5173 --cors https://app.example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
عيّن `OPENCODE_SERVER_PASSWORD` لحماية الخادم باستخدام مصادقة HTTP الأساسية. اسم المستخدم افتراضيا هو `opencode`، أو عيّن `OPENCODE_SERVER_USERNAME` لتغييره. ينطبق ذلك على كل من `opencode serve` و `opencode web`.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### كيف يعمل
|
||||
|
||||
عند تشغيل `opencode` يبدأ تشغيل واجهة terminal تفاعلية (TUI) وخادما. تكون الـ TUI هي
|
||||
العميل الذي يتحدث إلى الخادم. يوفّر الخادم نقطة نهاية لمواصفة OpenAPI 3.1.
|
||||
وتُستخدم هذه النقطة أيضا لتوليد [SDK](/docs/sdk).
|
||||
|
||||
:::tip
|
||||
استخدم خادم opencode للتفاعل مع opencode برمجيا.
|
||||
:::
|
||||
|
||||
تتيح هذه البنية لـ opencode دعم عدة عملاء وتمكّنك من التفاعل مع opencode برمجيا.
|
||||
|
||||
يمكنك تشغيل `opencode serve` لبدء خادم مستقل. إذا كانت واجهة opencode في terminal (TUI)
|
||||
قيد التشغيل، فسيبدأ `opencode serve` خادما جديدا.
|
||||
|
||||
---
|
||||
|
||||
#### الاتصال بخادم موجود
|
||||
|
||||
عند بدء الـ TUI تقوم بتعيين منفذ واسم مضيف عشوائيا. يمكنك بدلا من ذلك تمرير [الخيارات](/docs/cli) `--hostname` و `--port`، ثم استخدامهما للاتصال بخادمها.
|
||||
|
||||
يمكن استخدام نقطة النهاية [`/tui`](#tui) للتحكم في الـ TUI عبر الخادم. على سبيل المثال، يمكنك تعبئة الموجّه مسبقا أو تشغيله. يُستخدم هذا الإعداد بواسطة ملحقات OpenCode لـ [IDE](/docs/ide).
|
||||
|
||||
---
|
||||
|
||||
## المواصفات
|
||||
|
||||
ينشر الخادم مواصفة OpenAPI 3.1 ويمكن عرضها على:
|
||||
|
||||
```
|
||||
http://<hostname>:<port>/doc
|
||||
```
|
||||
|
||||
على سبيل المثال: `http://localhost:4096/doc`. استخدم المواصفة لتوليد عملاء أو لفحص أنواع الطلبات والاستجابات. أو اعرضها في مستكشف Swagger.
|
||||
|
||||
---
|
||||
|
||||
## واجهات API
|
||||
|
||||
يعرض خادم opencode واجهات API التالية.
|
||||
|
||||
---
|
||||
|
||||
### عام
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ---------------- | ------------------------------------ | ------------------------------------ |
|
||||
| `GET` | `/global/health` | الحصول على صحة الخادم وإصداره | `{ healthy: true, version: string }` |
|
||||
| `GET` | `/global/event` | الحصول على الأحداث العامة (تدفق SSE) | تدفق أحداث |
|
||||
|
||||
---
|
||||
|
||||
### المشروع
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------ | ------------------------- | --------------------------------------------- |
|
||||
| `GET` | `/project` | سرد جميع المشاريع | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `GET` | `/project/current` | الحصول على المشروع الحالي | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### المسار و VCS
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------- | ------------------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/path` | الحصول على المسار الحالي | <a href={typesUrl}><code>Path</code></a> |
|
||||
| `GET` | `/vcs` | الحصول على معلومات VCS للمشروع الحالي | <a href={typesUrl}><code>VcsInfo</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### المثيل
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------- | ----------------------- | --------- |
|
||||
| `POST` | `/instance/dispose` | التخلص من المثيل الحالي | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/config` | الحصول على معلومات الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `PATCH` | `/config` | تحديث الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `GET` | `/config/providers` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
### المزوّد
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | -------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| `GET` | `/provider` | سرد جميع المزوّدين | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
|
||||
| `GET` | `/provider/auth` | الحصول على طرق مصادقة المزوّد | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
|
||||
| `POST` | `/provider/{id}/oauth/authorize` | تفويض مزوّد باستخدام OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
|
||||
| `POST` | `/provider/{id}/oauth/callback` | معالجة رد نداء OAuth لمزوّد | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الجلسات
|
||||
|
||||
| الطريقة | المسار | الوصف | الملاحظات |
|
||||
| -------- | ---------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session` | سرد جميع الجلسات | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `POST` | `/session` | إنشاء جلسة جديدة | المتن: `{ parentID?, title? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/status` | الحصول على حالة الجلسات جميعها | يعيد `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
|
||||
| `GET` | `/session/:id` | الحصول على تفاصيل الجلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id` | حذف جلسة وجميع بياناتها | يعيد `boolean` |
|
||||
| `PATCH` | `/session/:id` | تحديث خصائص الجلسة | المتن: `{ title? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/children` | الحصول على الجلسات الفرعية لجلسة | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `GET` | `/session/:id/todo` | الحصول على قائمة المهام (todo) للجلسة | يعيد <a href={typesUrl}><code>Todo[]</code></a> |
|
||||
| `POST` | `/session/:id/init` | تحليل التطبيق وإنشاء `AGENTS.md` | المتن: `{ messageID, providerID, modelID }`، يعيد `boolean` |
|
||||
| `POST` | `/session/:id/fork` | تفريع جلسة موجودة عند رسالة | المتن: `{ messageID? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `POST` | `/session/:id/abort` | إلغاء جلسة قيد التشغيل | يعيد `boolean` |
|
||||
| `POST` | `/session/:id/share` | مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id/share` | إلغاء مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/diff` | الحصول على diff لهذه الجلسة | الاستعلام: `messageID?`، يعيد <a href={typesUrl}><code>FileDiff[]</code></a> |
|
||||
| `POST` | `/session/:id/summarize` | تلخيص الجلسة | المتن: `{ providerID, modelID }`، يعيد `boolean` |
|
||||
| `POST` | `/session/:id/revert` | التراجع عن رسالة | المتن: `{ messageID, partID? }`، يعيد `boolean` |
|
||||
| `POST` | `/session/:id/unrevert` | استعادة جميع الرسائل المتراجع عنها | يعيد `boolean` |
|
||||
| `POST` | `/session/:id/permissions/:permissionID` | الرد على طلب إذن | المتن: `{ response, remember? }`، يعيد `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الرسائل
|
||||
|
||||
| الطريقة | المسار | الوصف | الملاحظات |
|
||||
| ------- | --------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session/:id/message` | سرد رسائل جلسة | الاستعلام: `limit?`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
|
||||
| `POST` | `/session/:id/message` | إرسال رسالة والانتظار للحصول على رد | المتن: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `GET` | `/session/:id/message/:messageID` | الحصول على تفاصيل الرسالة | يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/prompt_async` | إرسال رسالة بشكل غير متزامن (بدون انتظار) | المتن: مثل `/session/:id/message`، يعيد `204 No Content` |
|
||||
| `POST` | `/session/:id/command` | تنفيذ أمر شرطة مائلة (slash) | المتن: `{ messageID?, agent?, model?, command, arguments }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/shell` | تشغيل أمر في shell | المتن: `{ agent, model?, command }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
|
||||
---
|
||||
|
||||
### الأوامر
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ---------- | ---------------- | --------------------------------------------- |
|
||||
| `GET` | `/command` | سرد جميع الأوامر | <a href={typesUrl}><code>Command[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### الملفات
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/find?pattern=<pat>` | البحث عن نص داخل الملفات | مصفوفة من كائنات المطابقة تحتوي على `path` و`lines` و`line_number` و`absolute_offset` و`submatches` |
|
||||
| `GET` | `/find/file?query=<q>` | العثور على الملفات والمجلدات بالاسم | `string[]` (مسارات) |
|
||||
| `GET` | `/find/symbol?query=<q>` | العثور على رموز مساحة العمل | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `GET` | `/file?path=<path>` | سرد الملفات والمجلدات | <a href={typesUrl}><code>FileNode[]</code></a> |
|
||||
| `GET` | `/file/content?path=<p>` | قراءة ملف | <a href={typesUrl}><code>FileContent</code></a> |
|
||||
| `GET` | `/file/status` | الحصول على حالة الملفات المتعقّبة | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
#### معلمات الاستعلام لـ `/find/file`
|
||||
|
||||
- `query` (مطلوب) — سلسلة البحث (مطابقة ضبابية)
|
||||
- `type` (اختياري) — حصر النتائج في `"file"` أو `"directory"`
|
||||
- `directory` (اختياري) — تجاوز جذر المشروع لأجل البحث
|
||||
- `limit` (اختياري) — الحد الأقصى للنتائج (1–200)
|
||||
- `dirs` (اختياري) — خيار قديم (إرجاع `"false"` يعيد الملفات فقط)
|
||||
|
||||
---
|
||||
|
||||
### الأدوات (تجريبية)
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------------------------------- | --------------------------------- | -------------------------------------------- |
|
||||
| `GET` | `/experimental/tool/ids` | سرد جميع معرّفات الأدوات | <a href={typesUrl}><code>ToolIDs</code></a> |
|
||||
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | سرد الأدوات مع مخططات JSON لنموذج | <a href={typesUrl}><code>ToolList</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### LSP والمنسّقات و MCP
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------ | ------------------------- | -------------------------------------------------------- |
|
||||
| `GET` | `/lsp` | الحصول على حالة خادم LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
|
||||
| `GET` | `/formatter` | الحصول على حالة المنسّقات | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
|
||||
| `GET` | `/mcp` | الحصول على حالة خادم MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
|
||||
| `POST` | `/mcp` | إضافة خادم MCP ديناميكيا | المتن: `{ name, config }`، يعيد كائن حالة MCP |
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | -------- | ------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/agent` | سرد جميع الوكلاء المتاحين | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### التسجيل
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------ | ------------------------------------------------------------- | --------- |
|
||||
| `POST` | `/log` | كتابة إدخال سجل. المتن: `{ service, level, message, extra? }` | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ----------------------- | ------------------------------------------ | ------------- |
|
||||
| `POST` | `/tui/append-prompt` | إلحاق نص بالموجّه | `boolean` |
|
||||
| `POST` | `/tui/open-help` | فتح مربع حوار المساعدة | `boolean` |
|
||||
| `POST` | `/tui/open-sessions` | فتح محدد الجلسات | `boolean` |
|
||||
| `POST` | `/tui/open-themes` | فتح محدد السمات | `boolean` |
|
||||
| `POST` | `/tui/open-models` | فتح محدد النماذج | `boolean` |
|
||||
| `POST` | `/tui/submit-prompt` | إرسال الموجّه الحالي | `boolean` |
|
||||
| `POST` | `/tui/clear-prompt` | مسح الموجّه | `boolean` |
|
||||
| `POST` | `/tui/execute-command` | تنفيذ أمر (`{ command }`) | `boolean` |
|
||||
| `POST` | `/tui/show-toast` | عرض toast (`{ title?, message, variant }`) | `boolean` |
|
||||
| `GET` | `/tui/control/next` | الانتظار لطلب التحكم التالي | كائن طلب تحكم |
|
||||
| `POST` | `/tui/control/response` | الاستجابة لطلب تحكم (`{ body }`) | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ----------- | ------------------------------------------------------------- | --------- |
|
||||
| `PUT` | `/auth/:id` | تعيين بيانات اعتماد المصادقة. يجب أن يطابق المتن مخطط المزوّد | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الأحداث
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | -------- | -------------------------------------------------------------------------------- | -------------------------- |
|
||||
| `GET` | `/event` | تدفق أحداث مرسلة من الخادم (SSE). أول حدث هو `server.connected` ثم أحداث الحافلة | تدفق أحداث مرسلة من الخادم |
|
||||
|
||||
---
|
||||
|
||||
### التوثيق
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------ | ------------------ | ------------------------------ |
|
||||
| `GET` | `/doc` | مواصفة OpenAPI 3.1 | صفحة HTML تتضمن مواصفة OpenAPI |
|
||||
127
qimingcode/packages/web/src/content/docs/ar/share.mdx
Normal file
127
qimingcode/packages/web/src/content/docs/ar/share.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: المشاركة
|
||||
description: شارك محادثات OpenCode الخاصة بك.
|
||||
---
|
||||
|
||||
تتيح لك ميزة المشاركة في OpenCode إنشاء روابط عامة لمحادثات OpenCode الخاصة بك، بحيث يمكنك التعاون مع زملائك أو الحصول على المساعدة من الآخرين.
|
||||
|
||||
:::note
|
||||
المحادثات المشتركة متاحة للعامة لأي شخص لديه الرابط.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## كيف تعمل
|
||||
|
||||
عند مشاركة محادثة، يقوم OpenCode بما يلي:
|
||||
|
||||
1. ينشئ عنوان URL عاما فريدا لجلستك
|
||||
2. يزامن سجل محادثتك مع خوادمنا
|
||||
3. يجعل المحادثة متاحة عبر رابط قابل للمشاركة — `opncd.ai/s/<share-id>`
|
||||
|
||||
---
|
||||
|
||||
## المشاركة
|
||||
|
||||
يدعم OpenCode ثلاثة أوضاع للمشاركة تتحكم في كيفية مشاركة المحادثات:
|
||||
|
||||
---
|
||||
|
||||
### يدوي (افتراضي)
|
||||
|
||||
افتراضيا، يستخدم OpenCode وضع المشاركة اليدوي. لا تتم مشاركة الجلسات تلقائيا، لكن يمكنك مشاركتها يدويا باستخدام الأمر `/share`:
|
||||
|
||||
```
|
||||
/share
|
||||
```
|
||||
|
||||
سيُنشئ هذا عنوان URL فريدا وسيُنسخ إلى الحافظة.
|
||||
|
||||
لضبط الوضع اليدوي صراحة في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المشاركة التلقائية
|
||||
|
||||
يمكنك تفعيل المشاركة التلقائية لجميع المحادثات الجديدة عبر ضبط خيار `share` إلى `"auto"` في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
عند تفعيل المشاركة التلقائية، ستتم مشاركة كل محادثة جديدة تلقائيا وسيتم إنشاء رابط لها.
|
||||
|
||||
---
|
||||
|
||||
### معطلة
|
||||
|
||||
يمكنك تعطيل المشاركة بالكامل عبر ضبط خيار `share` إلى `"disabled"` في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
لفرض ذلك على مستوى فريقك لمشروع معين، أضفه إلى ملف `opencode.json` في مشروعك ثم قم بإدراجه في Git.
|
||||
|
||||
---
|
||||
|
||||
## إلغاء المشاركة
|
||||
|
||||
لإيقاف مشاركة محادثة وإزالتها من الوصول العام:
|
||||
|
||||
```
|
||||
/unshare
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى إزالة رابط المشاركة وحذف البيانات المتعلقة بالمحادثة.
|
||||
|
||||
---
|
||||
|
||||
## الخصوصية
|
||||
|
||||
هناك بعض الأمور التي ينبغي وضعها في الاعتبار عند مشاركة محادثة.
|
||||
|
||||
---
|
||||
|
||||
### الاحتفاظ بالبيانات
|
||||
|
||||
تظل المحادثات المشتركة متاحة حتى تقوم بإلغاء مشاركتها صراحة. يشمل ذلك:
|
||||
|
||||
- سجل المحادثة كاملا
|
||||
- جميع الرسائل والردود
|
||||
- بيانات تعريف الجلسة
|
||||
|
||||
---
|
||||
|
||||
### توصيات
|
||||
|
||||
- شارك فقط المحادثات التي لا تتضمن معلومات حساسة.
|
||||
- راجع محتوى المحادثة قبل مشاركتها.
|
||||
- ألغِ مشاركة المحادثات عند اكتمال التعاون.
|
||||
- تجنب مشاركة المحادثات التي تتضمن شيفرة مملوكة أو بيانات سرية.
|
||||
- للمشاريع الحساسة، عطّل المشاركة بالكامل.
|
||||
|
||||
---
|
||||
|
||||
## للمؤسسات
|
||||
|
||||
في عمليات النشر الخاصة بالمؤسسات، يمكن أن تكون ميزة المشاركة:
|
||||
|
||||
- **معطلة** بالكامل للامتثال الأمني
|
||||
- **مقيدة** على المستخدمين الموثقين عبر SSO فقط
|
||||
- **مستضافة ذاتيا** على بنيتك التحتية الخاصة
|
||||
|
||||
[تعرّف على المزيد](/docs/enterprise) حول استخدام OpenCode في مؤسستك.
|
||||
222
qimingcode/packages/web/src/content/docs/ar/skills.mdx
Normal file
222
qimingcode/packages/web/src/content/docs/ar/skills.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: "مهارات الوكيل"
|
||||
description: "عرّف سلوكاً قابلاً لإعادة الاستخدام عبر تعريفات SKILL.md"
|
||||
---
|
||||
|
||||
تتيح مهارات الوكيل لـ OpenCode اكتشاف تعليمات قابلة لإعادة الاستخدام من مستودعك أو من دليل المنزل.
|
||||
تُحمَّل المهارات عند الطلب عبر أداة `skill` المدمجة — يرى الوكلاء المهارات المتاحة ويمكنهم تحميل المحتوى الكامل عند الحاجة.
|
||||
|
||||
---
|
||||
|
||||
## وضع الملفات
|
||||
|
||||
أنشئ مجلداً واحداً لكل اسم مهارة وضع بداخله ملف `SKILL.md`.
|
||||
يبحث OpenCode في هذه المواقع:
|
||||
|
||||
- إعدادات المشروع: `.opencode/skills/<name>/SKILL.md`
|
||||
- إعدادات عامة: `~/.config/opencode/skills/<name>/SKILL.md`
|
||||
- مشروع متوافق مع Claude: `.claude/skills/<name>/SKILL.md`
|
||||
- عام متوافق مع Claude: `~/.claude/skills/<name>/SKILL.md`
|
||||
- مشروع متوافق مع الوكلاء: `.agents/skills/<name>/SKILL.md`
|
||||
- عام متوافق مع الوكلاء: `~/.agents/skills/<name>/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## فهم الاكتشاف
|
||||
|
||||
بالنسبة لمسارات المشروع المحلية، يتدرج OpenCode صعوداً من دليل العمل الحالي حتى يصل إلى `git worktree`.
|
||||
ويحمّل أي ملفات مطابقة لـ `skills/*/SKILL.md` داخل `.opencode/` وأي ملفات مطابقة لـ `.claude/skills/*/SKILL.md` أو `.agents/skills/*/SKILL.md` على طول الطريق.
|
||||
|
||||
كما تُحمَّل التعريفات العامة أيضاً من `~/.config/opencode/skills/*/SKILL.md` و `~/.claude/skills/*/SKILL.md` و `~/.agents/skills/*/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## كتابة بيانات `frontmatter`
|
||||
|
||||
يجب أن يبدأ كل ملف `SKILL.md` بـ `frontmatter` بتنسيق YAML.
|
||||
لا يتم التعرف إلا على الحقول التالية:
|
||||
|
||||
- `name` (مطلوب)
|
||||
- `description` (مطلوب)
|
||||
- `license` (اختياري)
|
||||
- `compatibility` (اختياري)
|
||||
- `metadata` (اختياري، خريطة من سلسلة إلى سلسلة)
|
||||
|
||||
يتم تجاهل أي حقول `frontmatter` غير معروفة.
|
||||
|
||||
---
|
||||
|
||||
## التحقق من الأسماء
|
||||
|
||||
يجب أن يكون `name`:
|
||||
|
||||
- بطول 1–64 حرفاً
|
||||
- أحرفاً وأرقاماً بحروف صغيرة مع فواصل شرطة مفردة
|
||||
- لا يبدأ ولا ينتهي بـ `-`
|
||||
- لا يحتوي على `--` متتالية
|
||||
- يطابق اسم الدليل الذي يحتوي على `SKILL.md`
|
||||
|
||||
التعبير النمطي المكافئ:
|
||||
|
||||
```text
|
||||
^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## اتباع قواعد الطول
|
||||
|
||||
يجب أن يكون `description` بطول 1-1024 حرفاً.
|
||||
اجعله محدداً بما يكفي كي يختار الوكيل بشكل صحيح.
|
||||
|
||||
---
|
||||
|
||||
## استخدم مثالاً
|
||||
|
||||
أنشئ `.opencode/skills/git-release/SKILL.md` بهذا الشكل:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: git-release
|
||||
description: Create consistent releases and changelogs
|
||||
license: MIT
|
||||
compatibility: opencode
|
||||
metadata:
|
||||
audience: maintainers
|
||||
workflow: github
|
||||
---
|
||||
|
||||
## What I do
|
||||
|
||||
- Draft release notes from merged PRs
|
||||
- Propose a version bump
|
||||
- Provide a copy-pasteable `gh release create` command
|
||||
|
||||
## When to use me
|
||||
|
||||
Use this when you are preparing a tagged release.
|
||||
Ask clarifying questions if the target versioning scheme is unclear.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## التعرّف على وصف الأداة
|
||||
|
||||
يعرض OpenCode المهارات المتاحة في وصف أداة `skill`.
|
||||
يتضمن كل إدخال اسم المهارة ووصفها:
|
||||
|
||||
```xml
|
||||
<available_skills>
|
||||
<skill>
|
||||
<name>git-release</name>
|
||||
<description>Create consistent releases and changelogs</description>
|
||||
</skill>
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
يقوم الوكيل بتحميل مهارة عبر استدعاء الأداة:
|
||||
|
||||
```
|
||||
skill({ name: "git-release" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تهيئة الصلاحيات
|
||||
|
||||
تحكم في المهارات التي يمكن للوكلاء الوصول إليها باستخدام صلاحيات مبنية على أنماط داخل `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"permission": {
|
||||
"skill": {
|
||||
"*": "allow",
|
||||
"pr-review": "allow",
|
||||
"internal-*": "deny",
|
||||
"experimental-*": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| الصلاحية | السلوك |
|
||||
| -------- | -------------------------------------- |
|
||||
| `allow` | تُحمَّل المهارة فوراً |
|
||||
| `deny` | تُخفى المهارة عن الوكيل ويُرفض الوصول |
|
||||
| `ask` | يُطلب من المستخدم الموافقة قبل التحميل |
|
||||
|
||||
تدعم الأنماط أحرف البدل: يطابق `internal-*` كلاً من `internal-docs` و `internal-tools` وغير ذلك.
|
||||
|
||||
---
|
||||
|
||||
## تجاوز الإعدادات لكل وكيل
|
||||
|
||||
امنح وكلاء محددين صلاحيات مختلفة عن الإعدادات الافتراضية العامة.
|
||||
|
||||
**للوكلاء المخصصين** (في `frontmatter` الخاص بالوكيل):
|
||||
|
||||
```yaml
|
||||
---
|
||||
permission:
|
||||
skill:
|
||||
"documents-*": "allow"
|
||||
---
|
||||
```
|
||||
|
||||
**للوكلاء المدمجين** (في `opencode.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"permission": {
|
||||
"skill": {
|
||||
"internal-*": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تعطيل أداة skill
|
||||
|
||||
عطّل المهارات بالكامل للوكلاء الذين لا ينبغي أن يستخدموها:
|
||||
|
||||
**للوكلاء المخصصين**:
|
||||
|
||||
```yaml
|
||||
---
|
||||
tools:
|
||||
skill: false
|
||||
---
|
||||
```
|
||||
|
||||
**للوكلاء المدمجين**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"skill": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند تعطيلها، يتم حذف قسم `<available_skills>` بالكامل.
|
||||
|
||||
---
|
||||
|
||||
## استكشاف أخطاء التحميل
|
||||
|
||||
إذا لم تظهر مهارة:
|
||||
|
||||
1. تحقّق من أن `SKILL.md` مكتوب بأحرف كبيرة بالكامل
|
||||
2. تحقّق من أن `frontmatter` تتضمن `name` و `description`
|
||||
3. تأكد من أن أسماء المهارات فريدة عبر جميع المواقع
|
||||
4. تحقّق من الصلاحيات — المهارات ذات `deny` تكون مخفية عن الوكلاء
|
||||
369
qimingcode/packages/web/src/content/docs/ar/themes.mdx
Normal file
369
qimingcode/packages/web/src/content/docs/ar/themes.mdx
Normal file
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: السمات
|
||||
description: اختر سمة مدمجة أو عرّف سمة خاصة بك.
|
||||
---
|
||||
|
||||
مع OpenCode يمكنك الاختيار من بين عدة سمات مدمجة، أو استخدام سمة تتكيّف مع سمة terminal لديك، أو تعريف سمة مخصصة خاصة بك.
|
||||
|
||||
افتراضيًا، يستخدم OpenCode سمتنا `opencode`.
|
||||
|
||||
---
|
||||
|
||||
## متطلبات terminal
|
||||
|
||||
لكي تُعرض السمات بشكل صحيح مع لوحة ألوانها الكاملة، يجب أن يدعم terminal لديك **truecolor** (ألوان 24-بت). تدعم معظم تطبيقات terminal الحديثة ذلك افتراضيًا، لكن قد تحتاج إلى تفعيله:
|
||||
|
||||
- **التحقق من الدعم**: شغّل `echo $COLORTERM` - يجب أن يطبع `truecolor` أو `24bit`
|
||||
- **تفعيل truecolor**: اضبط متغير البيئة `COLORTERM=truecolor` في ملف إعدادات shell
|
||||
- **توافق terminal**: تأكد من أن محاكي terminal يدعم ألوان 24-بت (معظم تطبيقات terminal الحديثة مثل iTerm2 وAlacritty وKitty وWindows Terminal والإصدارات الحديثة من GNOME Terminal تدعم ذلك)
|
||||
|
||||
بدون دعم truecolor، قد تظهر السمات بدقة ألوان أقل أو تعود إلى أقرب تقريب ضمن 256 لونًا.
|
||||
|
||||
---
|
||||
|
||||
## السمات المدمجة
|
||||
|
||||
يأتي OpenCode مع عدة سمات مدمجة.
|
||||
|
||||
| الاسم | الوصف |
|
||||
| ---------------------- | --------------------------------------------------------------------------- |
|
||||
| `system` | يتكيّف مع لون خلفية terminal لديك |
|
||||
| `tokyonight` | مبني على سمة [Tokyonight](https://github.com/folke/tokyonight.nvim) |
|
||||
| `everforest` | مبني على سمة [Everforest](https://github.com/sainnhe/everforest) |
|
||||
| `ayu` | مبني على السمة الداكنة [Ayu](https://github.com/ayu-theme) |
|
||||
| `catppuccin` | مبني على سمة [Catppuccin](https://github.com/catppuccin) |
|
||||
| `catppuccin-macchiato` | مبني على سمة [Catppuccin](https://github.com/catppuccin) |
|
||||
| `gruvbox` | مبني على سمة [Gruvbox](https://github.com/morhetz/gruvbox) |
|
||||
| `kanagawa` | مبني على سمة [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
|
||||
| `nord` | مبني على سمة [Nord](https://github.com/nordtheme/nord) |
|
||||
| `matrix` | سمة خضراء على أسود بأسلوب الهاكر |
|
||||
| `one-dark` | مبني على السمة الداكنة [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
|
||||
|
||||
وغير ذلك؛ نضيف سمات جديدة باستمرار.
|
||||
|
||||
---
|
||||
|
||||
## سمة النظام
|
||||
|
||||
صُممت سمة `system` لتتكيّف تلقائيًا مع مخطط ألوان terminal لديك. وعلى عكس السمات التقليدية التي تستخدم ألوانًا ثابتة، فإن سمة _system_:
|
||||
|
||||
- **توليد تدرج رمادي**: تنشئ تدرجًا رماديًا مخصصًا اعتمادًا على لون خلفية terminal لديك، بما يضمن أفضل تباين.
|
||||
- **استخدام ألوان ANSI**: تستفيد من ألوان ANSI القياسية (0-15) لإبراز الصياغة وعناصر الواجهة، والتي تحترم لوحة ألوان terminal لديك.
|
||||
- **الحفاظ على افتراضيات terminal**: تستخدم `none` لألوان النص والخلفية للحفاظ على مظهر terminal الأصلي.
|
||||
|
||||
سمة النظام مناسبة للمستخدمين الذين:
|
||||
|
||||
- يريدون أن يطابق OpenCode مظهر terminal لديهم
|
||||
- يستخدمون مخططات ألوان مخصصة لـ terminal
|
||||
- يفضلون مظهرًا متسقًا عبر جميع تطبيقات terminal
|
||||
|
||||
---
|
||||
|
||||
## استخدام سمة
|
||||
|
||||
يمكنك اختيار سمة بفتح منتقي السمات باستخدام الأمر `/theme`. أو يمكنك تحديدها في [الضبط](/docs/config).
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## سمات مخصصة
|
||||
|
||||
يدعم OpenCode نظام سمات مرنًا قائمًا على JSON يتيح للمستخدمين إنشاء السمات وتخصيصها بسهولة.
|
||||
|
||||
---
|
||||
|
||||
### التسلسل الهرمي
|
||||
|
||||
تُحمَّل السمات من عدة مجلدات بالترتيب التالي، حيث تتجاوز المجلدات اللاحقة المجلدات السابقة:
|
||||
|
||||
1. **السمات المدمجة** - تكون مضمنة داخل الملف التنفيذي
|
||||
2. **مجلد ضبط المستخدم** - معرّف في `~/.config/opencode/themes/*.json` أو `$XDG_CONFIG_HOME/opencode/themes/*.json`
|
||||
3. **مجلد جذر المشروع** - معرّف في `<project-root>/.opencode/themes/*.json`
|
||||
4. **مجلد العمل الحالي** - معرّف في `./.opencode/themes/*.json`
|
||||
|
||||
إذا احتوت عدة مجلدات على سمة بالاسم نفسه، فستُستخدم السمة من المجلد ذي الأولوية الأعلى.
|
||||
|
||||
---
|
||||
|
||||
### إنشاء سمة
|
||||
|
||||
لإنشاء سمة مخصصة، أنشئ ملف JSON في أحد مجلدات السمات.
|
||||
|
||||
للسمات على مستوى المستخدم:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p ~/.config/opencode/themes
|
||||
vim ~/.config/opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
وللسمات الخاصة بالمشروع:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p .opencode/themes
|
||||
vim .opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### تنسيق JSON
|
||||
|
||||
تستخدم السمات تنسيق JSON مرنًا مع دعم لـ:
|
||||
|
||||
- **ألوان سداسية عشرية**: `"#ffffff"`
|
||||
- **ألوان ANSI**: `3` (0-255)
|
||||
- **مراجع الألوان**: `"primary"` أو تعريفات مخصصة
|
||||
- **متغيرات داكن/فاتح**: `{"dark": "#000", "light": "#fff"}`
|
||||
- **بدون لون**: `"none"` - يستخدم اللون الافتراضي لـ terminal أو يكون شفافًا
|
||||
|
||||
---
|
||||
|
||||
### تعريفات الألوان
|
||||
|
||||
قسم `defs` اختياري، ويتيح لك تعريف ألوان قابلة لإعادة الاستخدام يمكن الإشارة إليها داخل السمة.
|
||||
|
||||
---
|
||||
|
||||
### افتراضيات terminal
|
||||
|
||||
يمكن استخدام القيمة الخاصة `"none"` لأي لون لوراثة اللون الافتراضي لـ terminal. هذا مفيد خصوصًا لإنشاء سمات تمتزج بسلاسة مع مخطط ألوان terminal لديك:
|
||||
|
||||
- `"text": "none"` - يستخدم لون المقدمة الافتراضي لـ terminal
|
||||
- `"background": "none"` - يستخدم لون الخلفية الافتراضي لـ terminal
|
||||
|
||||
---
|
||||
|
||||
### مثال
|
||||
|
||||
إليك مثالًا على سمة مخصصة:
|
||||
|
||||
```json title="my-theme.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"nord0": "#2E3440",
|
||||
"nord1": "#3B4252",
|
||||
"nord2": "#434C5E",
|
||||
"nord3": "#4C566A",
|
||||
"nord4": "#D8DEE9",
|
||||
"nord5": "#E5E9F0",
|
||||
"nord6": "#ECEFF4",
|
||||
"nord7": "#8FBCBB",
|
||||
"nord8": "#88C0D0",
|
||||
"nord9": "#81A1C1",
|
||||
"nord10": "#5E81AC",
|
||||
"nord11": "#BF616A",
|
||||
"nord12": "#D08770",
|
||||
"nord13": "#EBCB8B",
|
||||
"nord14": "#A3BE8C",
|
||||
"nord15": "#B48EAD"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"error": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"success": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"info": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"text": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "nord3",
|
||||
"light": "nord1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "nord0",
|
||||
"light": "nord6"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "nord1",
|
||||
"light": "nord4"
|
||||
},
|
||||
"border": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "nord3",
|
||||
"light": "nord2"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "nord13",
|
||||
"light": "nord13"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "nord8",
|
||||
"light": "nord8"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "nord15",
|
||||
"light": "nord15"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
341
qimingcode/packages/web/src/content/docs/ar/tools.mdx
Normal file
341
qimingcode/packages/web/src/content/docs/ar/tools.mdx
Normal file
@@ -0,0 +1,341 @@
|
||||
---
|
||||
title: الأدوات
|
||||
description: إدارة الأدوات التي يمكن لـ LLM استخدامها.
|
||||
---
|
||||
|
||||
تتيح الأدوات لـ LLM تنفيذ إجراءات داخل قاعدة الشفرة الخاصة بك. يأتي OpenCode مع مجموعة من الأدوات المدمجة، لكن يمكنك توسيعه عبر [أدوات مخصصة](/docs/custom-tools) أو [خوادم MCP](/docs/mcp-servers).
|
||||
|
||||
افتراضيا، تكون جميع الأدوات **مفعلة** ولا تحتاج إلى إذن للتشغيل. يمكنك التحكم في سلوك الأدوات عبر [الأذونات](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
استخدم الحقل `permission` للتحكم في سلوك الأدوات. يمكنك السماح أو الرفض أو طلب الموافقة لكل أداة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "ask",
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا استخدام أحرف البدل للتحكم في عدة أدوات دفعة واحدة. على سبيل المثال، لطلب الموافقة على جميع الأدوات القادمة من خادم MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"mymcp_*": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد](/docs/permissions) حول تهيئة الأذونات.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
فيما يلي جميع الأدوات المدمجة المتاحة في OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### bash
|
||||
|
||||
نفذ أوامر shell في بيئة مشروعك.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM تشغيل أوامر terminal مثل `npm install` و`git status` أو أي أمر shell آخر.
|
||||
|
||||
---
|
||||
|
||||
### edit
|
||||
|
||||
عدّل الملفات الموجودة باستخدام استبدال نصي مطابق تماما.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تجري هذه الأداة تعديلات دقيقة على الملفات عبر استبدال مقاطع نصية متطابقة. وهي الطريقة الأساسية التي يعدّل بها LLM الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### write
|
||||
|
||||
أنشئ ملفات جديدة أو اكتب فوق الملفات الموجودة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
استخدم هذا للسماح لـ LLM بإنشاء ملفات جديدة. سيكتب فوق الملفات الموجودة إذا كانت موجودة بالفعل.
|
||||
|
||||
:::note
|
||||
تُدار أداة `write` عبر إذن `edit`، والذي يشمل جميع تعديلات الملفات (`edit` و`write` و`patch`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### read
|
||||
|
||||
اقرأ محتويات الملفات من قاعدة الشفرة الخاصة بك.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"read": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تقرأ هذه الأداة الملفات وتعيد محتوياتها. وتدعم قراءة نطاقات محددة من الأسطر للملفات الكبيرة.
|
||||
|
||||
---
|
||||
|
||||
### grep
|
||||
|
||||
ابحث في محتوى الملفات باستخدام التعابير النمطية (Regex).
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"grep": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
بحث سريع في المحتوى عبر قاعدة الشفرة الخاصة بك. يدعم صياغة Regex الكاملة وتصفية الملفات عبر أنماط المسارات.
|
||||
|
||||
---
|
||||
|
||||
### glob
|
||||
|
||||
اعثر على الملفات عبر مطابقة الأنماط.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"glob": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ابحث عن الملفات باستخدام أنماط glob مثل `**/*.js` أو `src/**/*.ts`. يعيد مسارات الملفات المطابقة مرتبة حسب وقت التعديل.
|
||||
|
||||
---
|
||||
|
||||
### lsp (experimental)
|
||||
|
||||
تفاعل مع خوادم LSP التي قمت بتهيئتها للحصول على ميزات ذكاء الشفرة مثل التعاريف والمراجع ومعلومات التحويم وتسلسل الاستدعاءات.
|
||||
|
||||
:::note
|
||||
هذه الأداة متاحة فقط عند ضبط `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (أو `OPENCODE_EXPERIMENTAL=true`).
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"lsp": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتضمن العمليات المدعومة: `goToDefinition` و`findReferences` و`hover` و`documentSymbol` و`workspaceSymbol` و`goToImplementation` و`prepareCallHierarchy` و`incomingCalls` و`outgoingCalls`.
|
||||
|
||||
لتهيئة خوادم LSP المتاحة لمشروعك، راجع [خوادم LSP](/docs/lsp).
|
||||
|
||||
---
|
||||
|
||||
### patch
|
||||
|
||||
طبّق الرقع (Patches) على الملفات.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تطبق هذه الأداة ملفات الرقع على قاعدة الشفرة الخاصة بك. وهي مفيدة لتطبيق الفروقات (Diffs) والرقع من مصادر متعددة.
|
||||
|
||||
:::note
|
||||
تُدار أداة `patch` عبر إذن `edit`، والذي يشمل جميع تعديلات الملفات (`edit` و`write` و`patch`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### skill
|
||||
|
||||
حمّل [مهارة](/docs/skills) (ملف `SKILL.md`) وأعد محتواها ضمن المحادثة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"skill": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### todowrite
|
||||
|
||||
أدِر قوائم المهام أثناء جلسات البرمجة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todowrite": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تنشئ هذه الأداة قوائم المهام وتحدّثها لتتبع التقدم أثناء العمليات المعقدة. يستخدمها LLM لتنظيم المهام متعددة الخطوات.
|
||||
|
||||
:::note
|
||||
هذه الأداة معطلة للوكلاء الفرعيين افتراضيا، لكن يمكنك تفعيلها يدويا. [اعرف المزيد](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### webfetch
|
||||
|
||||
اجلب محتوى الويب.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM جلب صفحات الويب وقراءتها. وهي مفيدة للبحث عن التوثيق أو لاستكشاف موارد عبر الإنترنت.
|
||||
|
||||
---
|
||||
|
||||
### websearch
|
||||
|
||||
ابحث في الويب عن معلومات.
|
||||
|
||||
:::note
|
||||
هذه الأداة متاحة فقط عند استخدام مزود OpenCode أو عند ضبط متغير البيئة `OPENCODE_ENABLE_EXA` على أي قيمة منطقية صحيحة (مثل `true` أو `1`).
|
||||
|
||||
للتفعيل عند تشغيل OpenCode:
|
||||
|
||||
```bash
|
||||
OPENCODE_ENABLE_EXA=1 opencode
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"websearch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تجري عمليات بحث على الويب باستخدام Exa AI للعثور على معلومات ذات صلة عبر الإنترنت. وهي مفيدة للبحث في المواضيع، والعثور على أحداث جارية، أو جمع معلومات تتجاوز حد بيانات التدريب.
|
||||
|
||||
لا يلزم مفتاح API - إذ تتصل الأداة مباشرة بخدمة MCP المستضافة لدى Exa AI دون مصادقة.
|
||||
|
||||
:::tip
|
||||
استخدم `websearch` عندما تحتاج إلى العثور على معلومات (Discovery)، واستخدم `webfetch` عندما تحتاج إلى جلب محتوى من رابط محدد (Retrieval).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### question
|
||||
|
||||
اطرح على المستخدم أسئلة أثناء التنفيذ.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"question": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM طرح أسئلة على المستخدم أثناء المهمة. وهي مفيدة من أجل:
|
||||
|
||||
- جمع تفضيلات المستخدم أو متطلباته
|
||||
- توضيح التعليمات غير الواضحة
|
||||
- الحصول على قرارات حول خيارات التنفيذ
|
||||
- تقديم خيارات حول الاتجاه الذي يجب اتباعه
|
||||
|
||||
يتضمن كل سؤال عنوانا ونص السؤال وقائمة بالخيارات. يمكن للمستخدمين الاختيار من الخيارات المتاحة أو كتابة إجابة مخصصة. وعند وجود عدة أسئلة، يمكن للمستخدمين التنقل بينها قبل إرسال جميع الإجابات.
|
||||
|
||||
---
|
||||
|
||||
## أدوات مخصصة
|
||||
|
||||
تتيح لك الأدوات المخصصة تعريف دوالك الخاصة التي يمكن لـ LLM استدعاؤها. تُعرّف هذه الأدوات في ملف التهيئة ويمكنها تنفيذ شفرة عشوائية.
|
||||
|
||||
[اعرف المزيد](/docs/custom-tools) حول إنشاء أدوات مخصصة.
|
||||
|
||||
---
|
||||
|
||||
## خوادم MCP
|
||||
|
||||
تتيح لك خوادم MCP (Model Context Protocol) دمج أدوات وخدمات خارجية. يشمل ذلك الوصول إلى قواعد البيانات وتكاملات API وخدمات الجهات الخارجية.
|
||||
|
||||
[اعرف المزيد](/docs/mcp-servers) حول تهيئة خوادم MCP.
|
||||
|
||||
---
|
||||
|
||||
## التفاصيل الداخلية
|
||||
|
||||
داخليا، تستخدم أدوات مثل `grep` و`glob` [ripgrep](https://github.com/BurntSushi/ripgrep) في الخلفية. افتراضيا، يحترم ripgrep أنماط `.gitignore`، ما يعني أن الملفات والمجلدات المدرجة في `.gitignore` ستُستبعد من عمليات البحث وعرض القوائم.
|
||||
|
||||
---
|
||||
|
||||
### أنماط التجاهل
|
||||
|
||||
لتضمين ملفات يتم تجاهلها عادة، أنشئ ملف `.ignore` في جذر المشروع. يمكن لهذا الملف السماح صراحة بمسارات محددة.
|
||||
|
||||
```text title=".ignore"
|
||||
!node_modules/
|
||||
!dist/
|
||||
!build/
|
||||
```
|
||||
|
||||
على سبيل المثال، يسمح ملف `.ignore` هذا لـ ripgrep بالبحث داخل مجلدات `node_modules/` و`dist/` و`build/` حتى لو كانت مدرجة في `.gitignore`.
|
||||
299
qimingcode/packages/web/src/content/docs/ar/troubleshooting.mdx
Normal file
299
qimingcode/packages/web/src/content/docs/ar/troubleshooting.mdx
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
title: استكشاف الأخطاء وإصلاحها
|
||||
description: المشكلات الشائعة وكيفية حلها.
|
||||
---
|
||||
|
||||
لاستكشاف المشكلات في OpenCode وإصلاحها، ابدأ بالتحقق من السجلات والبيانات المحلية التي يخزنها على القرص.
|
||||
|
||||
---
|
||||
|
||||
## السجلات
|
||||
|
||||
يتم حفظ ملفات السجل في:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/log/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.local\share\opencode\log`
|
||||
|
||||
تتم تسمية ملفات السجل بطوابع زمنية (مثل `2025-01-09T123456.log`) ويتم الاحتفاظ بأحدث 10 ملفات سجل.
|
||||
|
||||
يمكنك ضبط مستوى السجل باستخدام خيار CLI `--log-level` للحصول على معلومات تصحيح أكثر تفصيلا. على سبيل المثال: `opencode --log-level DEBUG`.
|
||||
|
||||
---
|
||||
|
||||
## التخزين
|
||||
|
||||
يخزن opencode بيانات الجلسات وبيانات التطبيق الأخرى على القرص في:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
يحتوي هذا الدليل على:
|
||||
|
||||
- `auth.json` - بيانات المصادقة مثل مفاتيح API ورموز OAuth
|
||||
- `log/` - سجلات التطبيق
|
||||
- `project/` - بيانات خاصة بالمشروع مثل بيانات الجلسة والرسائل
|
||||
- إذا كان المشروع داخل مستودع Git، فسيتم تخزينه في `./<project-slug>/storage/`
|
||||
- إذا لم يكن داخل مستودع Git، فسيتم تخزينه في `./global/storage/`
|
||||
|
||||
---
|
||||
|
||||
## تطبيق سطح المكتب
|
||||
|
||||
يشغل OpenCode Desktop خادما محليا لـ OpenCode (العملية الجانبية `opencode-cli`) في الخلفية. معظم المشكلات سببها إضافة لا تعمل بشكل صحيح، أو ذاكرة تخزين مؤقت تالفة، أو إعداد خادم غير صحيح.
|
||||
|
||||
### فحوصات سريعة
|
||||
|
||||
- أغلق التطبيق تماما ثم أعد تشغيله.
|
||||
- إذا عرض التطبيق شاشة خطأ، انقر **Restart** وانسخ تفاصيل الخطأ.
|
||||
- على macOS فقط: قائمة `OpenCode` -> **Reload Webview** (يفيد إذا كانت الواجهة فارغة/متجمدة).
|
||||
|
||||
---
|
||||
|
||||
### تعطيل الإضافات
|
||||
|
||||
إذا كان تطبيق سطح المكتب يتعطل عند التشغيل، أو يتوقف عن الاستجابة، أو يتصرف بشكل غريب، فابدأ بتعطيل الإضافات.
|
||||
|
||||
#### تحقق من الإعدادات العامة
|
||||
|
||||
افتح ملف الإعدادات العام وابحث عن المفتاح `plugin`.
|
||||
|
||||
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (أو `~/.config/opencode/opencode.json`)
|
||||
- **macOS/Linux** (عمليات تثبيت أقدم): `~/.local/share/opencode/opencode.jsonc`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.config\opencode\opencode.jsonc`
|
||||
|
||||
إذا كانت لديك إضافات مضبوطة، فقم بتعطيلها مؤقتا بإزالة المفتاح أو ضبطه على مصفوفة فارغة:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": [],
|
||||
}
|
||||
```
|
||||
|
||||
#### تحقق من أدلة الإضافات
|
||||
|
||||
يمكن لـ OpenCode أيضا تحميل إضافات محلية من القرص. انقلها مؤقتا إلى مكان آخر (أو أعد تسمية المجلد) ثم أعد تشغيل تطبيق سطح المكتب:
|
||||
|
||||
- **إضافات عامة**
|
||||
- **macOS/Linux**: `~/.config/opencode/plugins/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.config\opencode\plugins`
|
||||
- **إضافات المشروع** (فقط إذا كنت تستخدم إعدادات لكل مشروع)
|
||||
- `<your-project>/.opencode/plugins/`
|
||||
|
||||
إذا عاد التطبيق للعمل، فأعد تفعيل الإضافات واحدة تلو الأخرى لمعرفة أيها يسبب المشكلة.
|
||||
|
||||
---
|
||||
|
||||
### مسح ذاكرة التخزين المؤقت
|
||||
|
||||
إذا لم يساعد تعطيل الإضافات (أو كانت عملية تثبيت إضافة عالقة)، فامسح ذاكرة التخزين المؤقت حتى يتمكن OpenCode من إعادة بنائها.
|
||||
|
||||
1. أغلق OpenCode Desktop تماما.
|
||||
2. احذف دليل ذاكرة التخزين المؤقت:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> الصق `~/.cache/opencode`
|
||||
- **Linux**: احذف `~/.cache/opencode` (أو شغّل `rm -rf ~/.cache/opencode`)
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
3. أعد تشغيل OpenCode Desktop.
|
||||
|
||||
---
|
||||
|
||||
### إصلاح مشكلات اتصال الخادم
|
||||
|
||||
يمكن لـ OpenCode Desktop إما تشغيل خادمه المحلي (افتراضيا) أو الاتصال بعنوان URL لخادم قمت بتهيئته.
|
||||
|
||||
إذا ظهرت نافذة **"Connection Failed"** (أو لم يتجاوز التطبيق شاشة البداية)، فتحقق مما إذا كان هناك عنوان URL مخصص للخادم.
|
||||
|
||||
#### مسح عنوان URL الافتراضي لخادم سطح المكتب
|
||||
|
||||
من شاشة Home، انقر اسم الخادم (مع نقطة الحالة) لفتح محدد الخوادم. في قسم **Default server**، انقر **Clear**.
|
||||
|
||||
#### إزالة `server.port` / `server.hostname` من الإعدادات
|
||||
|
||||
إذا كان `opencode.json(c)` يحتوي على قسم `server`، فأزله مؤقتا ثم أعد تشغيل تطبيق سطح المكتب.
|
||||
|
||||
#### تحقق من متغيرات البيئة
|
||||
|
||||
إذا كان `OPENCODE_PORT` مضبوطا في بيئتك، فسيحاول تطبيق سطح المكتب استخدام ذلك المنفذ للخادم المحلي.
|
||||
|
||||
- أزل ضبط `OPENCODE_PORT` (أو اختر منفذا متاحا) ثم أعد التشغيل.
|
||||
|
||||
---
|
||||
|
||||
### Linux: مشكلات Wayland / X11
|
||||
|
||||
على Linux، قد تتسبب بعض إعدادات Wayland في نوافذ فارغة أو أخطاء في مدير التركيب (compositor).
|
||||
|
||||
- إذا كنت تستخدم Wayland وكانت نافذة التطبيق فارغة/يتعطل، فجرّب التشغيل مع `OC_ALLOW_WAYLAND=1`.
|
||||
- إذا جعل ذلك الأمور أسوأ، فأزل هذا المتغير وجرّب التشغيل ضمن جلسة X11 بدلا من ذلك.
|
||||
|
||||
---
|
||||
|
||||
### Windows: بيئة تشغيل WebView2
|
||||
|
||||
على Windows، يتطلب OpenCode Desktop وجود **WebView2 Runtime** الخاصة بـ Microsoft Edge. إذا فتح التطبيق نافذة فارغة أو لم يبدأ، فقم بتثبيت/تحديث WebView2 ثم جرّب مجددا.
|
||||
|
||||
---
|
||||
|
||||
### Windows: مشكلات الأداء العامة
|
||||
|
||||
إذا كنت تواجه بطءا في الأداء، أو مشكلات في الوصول إلى الملفات، أو مشكلات في terminal على Windows، فجرّب استخدام [WSL (نظام Windows الفرعي لـ Linux)](/docs/windows-wsl). يوفر WSL بيئة Linux تعمل بسلاسة أكبر مع ميزات OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### الإشعارات لا تظهر
|
||||
|
||||
لا يعرض OpenCode Desktop إشعارات النظام إلا عندما:
|
||||
|
||||
- تكون الإشعارات مفعلة لـ OpenCode في إعدادات نظام التشغيل، و
|
||||
- تكون نافذة التطبيق غير نشطة.
|
||||
|
||||
---
|
||||
|
||||
### إعادة تعيين تخزين تطبيق سطح المكتب (كحل أخير)
|
||||
|
||||
إذا لم يبدأ التطبيق ولم تتمكن من مسح الإعدادات من داخل الواجهة، فأعد تعيين الحالة المحفوظة لتطبيق سطح المكتب.
|
||||
|
||||
1. أغلق OpenCode Desktop.
|
||||
2. اعثر على هذه الملفات واحذفها (توجد في دليل بيانات تطبيق OpenCode Desktop):
|
||||
|
||||
- `opencode.settings.dat` (عنوان URL الافتراضي لخادم سطح المكتب)
|
||||
- `opencode.global.dat` و `opencode.workspace.*.dat` (حالة الواجهة مثل الخوادم/المشاريع الأخيرة)
|
||||
|
||||
للعثور على الدليل بسرعة:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (ثم ابحث عن أسماء الملفات أعلاه)
|
||||
- **Linux**: ابحث ضمن `~/.local/share` عن أسماء الملفات أعلاه
|
||||
- **Windows**: اضغط `WIN+R` -> `%APPDATA%` (ثم ابحث عن أسماء الملفات أعلاه)
|
||||
|
||||
---
|
||||
|
||||
## الحصول على المساعدة
|
||||
|
||||
إذا كنت تواجه مشكلات مع OpenCode:
|
||||
|
||||
1. **الإبلاغ عن المشكلات على GitHub**
|
||||
|
||||
أفضل طريقة للإبلاغ عن الأخطاء أو طلب الميزات هي عبر مستودعنا على GitHub:
|
||||
|
||||
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
|
||||
|
||||
قبل إنشاء مشكلة جديدة، ابحث في المشكلات الموجودة لمعرفة ما إذا كانت مشكلتك قد تم الإبلاغ عنها بالفعل.
|
||||
|
||||
2. **انضم إلى Discord**
|
||||
|
||||
للحصول على مساعدة فورية ونقاشات المجتمع، انضم إلى خادم Discord الخاص بنا:
|
||||
|
||||
[**opencode.ai/discord**](https://opencode.ai/discord)
|
||||
|
||||
---
|
||||
|
||||
## مشكلات شائعة
|
||||
|
||||
فيما يلي بعض المشكلات الشائعة وكيفية حلها.
|
||||
|
||||
---
|
||||
|
||||
### OpenCode لا يبدأ
|
||||
|
||||
1. تحقق من السجلات بحثا عن رسائل الخطأ
|
||||
2. جرّب التشغيل مع `--print-logs` لرؤية المخرجات في terminal
|
||||
3. تأكد من أنك تستخدم أحدث إصدار عبر `opencode upgrade`
|
||||
|
||||
---
|
||||
|
||||
### مشكلات المصادقة
|
||||
|
||||
1. جرّب إعادة المصادقة باستخدام الأمر `/connect` في واجهة TUI
|
||||
2. تحقق من أن مفاتيح API الخاصة بك صالحة
|
||||
3. تأكد من أن شبكتك تسمح بالاتصال بواجهة API الخاصة بالمزوّد
|
||||
|
||||
---
|
||||
|
||||
### النموذج غير متاح
|
||||
|
||||
1. تحقق من أنك قمت بالمصادقة مع المزوّد
|
||||
2. تأكد من أن اسم النموذج في الإعدادات صحيح
|
||||
3. قد تتطلب بعض النماذج صلاحيات وصول محددة أو اشتراكات
|
||||
|
||||
إذا واجهت `ProviderModelNotFoundError` فمن المرجح أنك تشير إلى نموذج بشكل غير صحيح في مكان ما.
|
||||
يجب الإشارة إلى النماذج بهذه الصيغة: `<providerId>/<modelId>`
|
||||
|
||||
أمثلة:
|
||||
|
||||
- `openai/gpt-4.1`
|
||||
- `openrouter/google/gemini-2.5-flash`
|
||||
- `opencode/kimi-k2`
|
||||
|
||||
لمعرفة النماذج التي لديك صلاحية الوصول إليها، شغّل `opencode models`
|
||||
|
||||
---
|
||||
|
||||
### ProviderInitError
|
||||
|
||||
إذا واجهت ProviderInitError، فمن المحتمل أن إعداداتك غير صالحة أو تالفة.
|
||||
|
||||
لحل ذلك:
|
||||
|
||||
1. أولا، تحقق من أن المزوّد مضبوط بشكل صحيح باتباع [دليل المزوّدين](/docs/providers)
|
||||
2. إذا استمرت المشكلة، فجرّب مسح الإعدادات المخزنة لديك:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/share/opencode
|
||||
```
|
||||
|
||||
على Windows، اضغط `WIN+R` واحذف: `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
3. أعد المصادقة مع المزوّد باستخدام الأمر `/connect` في واجهة TUI.
|
||||
|
||||
---
|
||||
|
||||
### AI_APICallError ومشكلات حزم المزوّد
|
||||
|
||||
إذا واجهت أخطاء في استدعاءات API، فقد يكون السبب حزم مزوّد قديمة. يقوم opencode بتثبيت حزم المزوّد (OpenAI و Anthropic و Google وغير ذلك) ديناميكيا عند الحاجة ويقوم بتخزينها مؤقتا محليا.
|
||||
|
||||
لحل مشكلات حزم المزوّد:
|
||||
|
||||
1. امسح ذاكرة التخزين المؤقت لحزم المزوّد:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.cache/opencode
|
||||
```
|
||||
|
||||
على Windows، اضغط `WIN+R` واحذف: `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
2. أعد تشغيل opencode لإعادة تثبيت أحدث حزم المزوّد
|
||||
|
||||
سيجبر ذلك opencode على تنزيل أحدث إصدارات حزم المزوّد، وهو ما يحل غالبا مشكلات التوافق مع معاملات النماذج وتغييرات API.
|
||||
|
||||
---
|
||||
|
||||
### النسخ/اللصق لا يعمل على Linux
|
||||
|
||||
يحتاج مستخدمو Linux إلى تثبيت إحدى أدوات الحافظة التالية حتى تعمل ميزة النسخ/اللصق:
|
||||
|
||||
**لأنظمة X11:**
|
||||
|
||||
```bash
|
||||
apt install -y xclip
|
||||
# or
|
||||
apt install -y xsel
|
||||
```
|
||||
|
||||
**لأنظمة Wayland:**
|
||||
|
||||
```bash
|
||||
apt install -y wl-clipboard
|
||||
```
|
||||
|
||||
**للبيئات بدون واجهة رسومية (Headless):**
|
||||
|
||||
```bash
|
||||
apt install -y xvfb
|
||||
# and run:
|
||||
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99.0
|
||||
```
|
||||
|
||||
سيكتشف opencode ما إذا كنت تستخدم Wayland ويفضل `wl-clipboard`، وإلا فسيحاول العثور على أدوات الحافظة بالترتيب التالي: `xclip` ثم `xsel`.
|
||||
390
qimingcode/packages/web/src/content/docs/ar/tui.mdx
Normal file
390
qimingcode/packages/web/src/content/docs/ar/tui.mdx
Normal file
@@ -0,0 +1,390 @@
|
||||
---
|
||||
title: TUI
|
||||
description: استخدام واجهة المستخدم TUI في OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
يوفّر OpenCode واجهة terminal تفاعلية (TUI) للعمل على مشاريعك باستخدام LLM.
|
||||
|
||||
يؤدي تشغيل OpenCode إلى بدء واجهة TUI للدليل الحالي.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
أو يمكنك تشغيلها لدليل عمل محدد.
|
||||
|
||||
```bash
|
||||
opencode /path/to/project
|
||||
```
|
||||
|
||||
بعد الدخول إلى واجهة TUI، يمكنك إرسال رسالة كطلب.
|
||||
|
||||
```text
|
||||
Give me a quick summary of the codebase.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مراجع الملفات
|
||||
|
||||
يمكنك الإشارة إلى الملفات في رسائلك باستخدام `@`. يُجري ذلك بحثا ضبابيا عن الملفات ضمن دليل العمل الحالي.
|
||||
|
||||
:::tip
|
||||
يمكنك أيضا استخدام `@` للإشارة إلى الملفات في رسائلك.
|
||||
:::
|
||||
|
||||
```text "@packages/functions/src/api/index.ts"
|
||||
How is auth handled in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
تُضاف محتويات الملف إلى المحادثة تلقائيا.
|
||||
|
||||
---
|
||||
|
||||
## أوامر Bash
|
||||
|
||||
ابدأ الرسالة بـ `!` لتشغيل أمر في shell.
|
||||
|
||||
```bash frame="none"
|
||||
!ls -la
|
||||
```
|
||||
|
||||
يُضاف خرج الأمر إلى المحادثة كنتيجة أداة.
|
||||
|
||||
---
|
||||
|
||||
## الأوامر
|
||||
|
||||
عند استخدام واجهة OpenCode في terminal، يمكنك كتابة `/` متبوعة باسم أمر لتنفيذ الإجراءات بسرعة. مثلا:
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
تملك معظم الأوامر أيضا اختصارا باستخدام `ctrl+x` كمفتاح قائد، حيث إن `ctrl+x` هو المفتاح القائد الافتراضي. [اعرف المزيد](/docs/keybinds).
|
||||
|
||||
فيما يلي جميع أوامر الشرطة المائلة المتاحة:
|
||||
|
||||
---
|
||||
|
||||
### connect
|
||||
|
||||
أضف موفّرا إلى OpenCode. يتيح لك اختيار أحد الموفّرين المتاحين وإضافة مفاتيح API الخاصة بهم.
|
||||
|
||||
```bash frame="none"
|
||||
/connect
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### compact
|
||||
|
||||
قم بضغط الجلسة الحالية. _الاسم المستعار_: `/summarize`
|
||||
|
||||
```bash frame="none"
|
||||
/compact
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x c`
|
||||
|
||||
---
|
||||
|
||||
### details
|
||||
|
||||
بدّل عرض تفاصيل تنفيذ الأدوات.
|
||||
|
||||
```bash frame="none"
|
||||
/details
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x d`
|
||||
|
||||
---
|
||||
|
||||
### editor
|
||||
|
||||
افتح محررا خارجيا لكتابة الرسائل. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/editor
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x e`
|
||||
|
||||
---
|
||||
|
||||
### exit
|
||||
|
||||
اخرج من OpenCode. _الأسماء المستعارة_: `/quit`, `/q`
|
||||
|
||||
```bash frame="none"
|
||||
/exit
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x q`
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
صدّر المحادثة الحالية إلى Markdown وافتحها في المحرر الافتراضي لديك. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/export
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x x`
|
||||
|
||||
---
|
||||
|
||||
### help
|
||||
|
||||
اعرض مربع حوار المساعدة.
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x h`
|
||||
|
||||
---
|
||||
|
||||
### init
|
||||
|
||||
أنشئ ملف `AGENTS.md` أو حدّثه. [اعرف المزيد](/docs/rules).
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x i`
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
اعرض النماذج المتاحة.
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x m`
|
||||
|
||||
---
|
||||
|
||||
### new
|
||||
|
||||
ابدأ جلسة جديدة. _الاسم المستعار_: `/clear`
|
||||
|
||||
```bash frame="none"
|
||||
/new
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x n`
|
||||
|
||||
---
|
||||
|
||||
### redo
|
||||
|
||||
أعِد تنفيذ رسالة تم التراجع عنها سابقا. متاح فقط بعد استخدام `/undo`.
|
||||
|
||||
:::tip
|
||||
ستتم أيضا استعادة أي تغييرات على الملفات.
|
||||
:::
|
||||
|
||||
داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x r`
|
||||
|
||||
---
|
||||
|
||||
### sessions
|
||||
|
||||
اعرض الجلسات وبدّل بينها. _الأسماء المستعارة_: `/resume`, `/continue`
|
||||
|
||||
```bash frame="none"
|
||||
/sessions
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x l`
|
||||
|
||||
---
|
||||
|
||||
### share
|
||||
|
||||
شارك الجلسة الحالية. [اعرف المزيد](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x s`
|
||||
|
||||
---
|
||||
|
||||
### themes
|
||||
|
||||
اعرض السمات المتاحة.
|
||||
|
||||
```bash frame="none"
|
||||
/theme
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x t`
|
||||
|
||||
---
|
||||
|
||||
### thinking
|
||||
|
||||
بدّل إظهار كتل التفكير/الاستدلال في المحادثة. عند تفعيله، يمكنك رؤية عملية استدلال النموذج للنماذج التي تدعم التفكير الموسّع.
|
||||
|
||||
:::note
|
||||
يتحكم هذا الأمر فقط فيما إذا كانت كتل التفكير **تُعرض**؛ ولا يفعّل أو يعطّل قدرات الاستدلال في النموذج. لتبديل قدرات الاستدلال فعليا، استخدم `ctrl+t` للتنقّل بين إصدارات النموذج.
|
||||
:::
|
||||
|
||||
```bash frame="none"
|
||||
/thinking
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### undo
|
||||
|
||||
تراجع عن آخر رسالة في المحادثة. يزيل أحدث رسالة للمستخدم، وكل الردود اللاحقة، وأي تغييرات على الملفات.
|
||||
|
||||
:::tip
|
||||
سيتم أيضا التراجع عن أي تغييرات على الملفات.
|
||||
:::
|
||||
|
||||
داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x u`
|
||||
|
||||
---
|
||||
|
||||
### unshare
|
||||
|
||||
ألغِ مشاركة الجلسة الحالية. [اعرف المزيد](/docs/share#un-sharing).
|
||||
|
||||
```bash frame="none"
|
||||
/unshare
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إعداد المحرر
|
||||
|
||||
يستخدم الأمران `/editor` و`/export` المحرر المحدد في متغير البيئة `EDITOR`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Linux/macOS">
|
||||
```bash
|
||||
# مثال لـ nano أو vim
|
||||
export EDITOR=nano
|
||||
export EDITOR=vim
|
||||
|
||||
# للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
|
||||
# قم بتضمين --wait
|
||||
export EDITOR="code --wait"
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، أضف هذا إلى ملف تهيئة shell لديك؛
|
||||
`~/.bashrc`، `~/.zshrc`، إلخ.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (CMD)">
|
||||
```bash
|
||||
set EDITOR=notepad
|
||||
|
||||
# للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
|
||||
# قم بتضمين --wait
|
||||
set EDITOR=code --wait
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، استخدم **System Properties** > **Environment Variables**.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (PowerShell)">
|
||||
```powershell
|
||||
$env:EDITOR = "notepad"
|
||||
|
||||
# للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ.
|
||||
# قم بتضمين --wait
|
||||
$env:EDITOR = "code --wait"
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، أضف هذا إلى ملف تهيئة PowerShell لديك.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
تتضمن خيارات المحررات الشائعة ما يلي:
|
||||
|
||||
- `code` - Visual Studio Code
|
||||
- `cursor` - Cursor
|
||||
- `windsurf` - Windsurf
|
||||
- `nvim` - محرر Neovim
|
||||
- `vim` - محرر Vim
|
||||
- `nano` - محرر Nano
|
||||
- `notepad` - Windows Notepad
|
||||
- `subl` - Sublime Text
|
||||
|
||||
:::note
|
||||
تحتاج بعض المحررات مثل VS Code إلى التشغيل مع الخيار `--wait`.
|
||||
:::
|
||||
|
||||
تحتاج بعض المحررات إلى وسائط CLI لتعمل بوضع الحجب. يجعل الخيار `--wait` عملية المحرر تنتظر حتى يتم إغلاقها.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص سلوك واجهة TUI عبر ملف إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### الخيارات
|
||||
|
||||
- `scroll_acceleration` - فعّل تسارع التمرير على نمط macOS لتمرير سلس وطبيعي. عند تفعيله، تزداد سرعة التمرير مع إيماءات التمرير السريعة وتبقى دقيقة للحركات الأبطأ. **يتقدّم هذا الإعداد على `scroll_speed` ويستبدله عند تفعيله.**
|
||||
- `scroll_speed` - يتحكم في سرعة تمرير واجهة TUI عند استخدام أوامر التمرير (الحد الأدنى: `1`). القيمة الافتراضية هي `3`. **ملاحظة: يتم تجاهل هذا إذا تم ضبط `scroll_acceleration.enabled` على `true`.**
|
||||
- `diff_style` - يتحكم في عرض الفروقات (diff). القيمة `"auto"` تتكيف مع عرض terminal، و`"stacked"` تعرض عمودًا واحدًا دائمًا.
|
||||
|
||||
استخدم `OPENCODE_TUI_CONFIG` لتحميل مسار إعدادات TUI مخصص.
|
||||
|
||||
---
|
||||
|
||||
## التخصيص
|
||||
|
||||
يمكنك تخصيص جوانب مختلفة من عرض واجهة TUI باستخدام لوحة الأوامر (`ctrl+x h` أو `/help`). تبقى هذه الإعدادات محفوظة عبر عمليات إعادة التشغيل.
|
||||
|
||||
---
|
||||
|
||||
#### عرض اسم المستخدم
|
||||
|
||||
بدّل ما إذا كان اسم المستخدم يظهر في رسائل الدردشة. يمكنك الوصول إلى هذا عبر:
|
||||
|
||||
- لوحة الأوامر: ابحث عن "username" أو "hide username"
|
||||
- يُحفظ الإعداد تلقائيا وسيتم تذكره عبر جلسات واجهة TUI
|
||||
142
qimingcode/packages/web/src/content/docs/ar/web.mdx
Normal file
142
qimingcode/packages/web/src/content/docs/ar/web.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: الويب
|
||||
description: استخدام OpenCode في متصفحك.
|
||||
---
|
||||
|
||||
يمكن تشغيل OpenCode كتطبيق ويب داخل متصفحك، ليمنحك تجربة البرمجة القوية بالذكاء الاصطناعي نفسها دون الحاجة إلى terminal.
|
||||
|
||||

|
||||
|
||||
## البدء
|
||||
|
||||
ابدأ تشغيل واجهة الويب عبر تنفيذ:
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
يؤدي ذلك إلى تشغيل خادم محلي على `127.0.0.1` بمنفذ عشوائي متاح، ويفتح OpenCode تلقائيا في المتصفح الافتراضي لديك.
|
||||
|
||||
:::caution
|
||||
إذا لم يتم تعيين `OPENCODE_SERVER_PASSWORD` فسيكون الخادم دون حماية. هذا مناسب للاستخدام المحلي، لكنه يجب أن يكون مُعينا عند إتاحة الوصول عبر الشبكة.
|
||||
:::
|
||||
|
||||
:::tip[مستخدمو Windows]
|
||||
لأفضل تجربة، شغّل `opencode web` من [WSL](/docs/windows-wsl) بدلا من PowerShell. يضمن ذلك وصولا صحيحا إلى نظام الملفات وتكاملا أفضل مع terminal.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## الإعدادات
|
||||
|
||||
يمكنك ضبط خادم الويب باستخدام خيارات CLI أو عبر [ملف الإعدادات](/docs/config).
|
||||
|
||||
### المنفذ
|
||||
|
||||
افتراضيا، يختار OpenCode منفذا متاحا. يمكنك تحديد منفذ:
|
||||
|
||||
```bash
|
||||
opencode web --port 4096
|
||||
```
|
||||
|
||||
### اسم المضيف
|
||||
|
||||
افتراضيا، يرتبط الخادم بـ `127.0.0.1` (للاستخدام المحلي فقط). لجعل OpenCode متاحا على شبكتك:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
عند استخدام `0.0.0.0` سيعرض OpenCode كلا من عناوين الوصول المحلي وعناوين الشبكة:
|
||||
|
||||
```
|
||||
Local access: http://localhost:4096
|
||||
Network access: http://192.168.1.100:4096
|
||||
```
|
||||
|
||||
### اكتشاف mDNS
|
||||
|
||||
فعّل mDNS لجعل خادمك قابلا للاكتشاف على الشبكة المحلية:
|
||||
|
||||
```bash
|
||||
opencode web --mdns
|
||||
```
|
||||
|
||||
يضبط ذلك تلقائيا اسم المضيف إلى `0.0.0.0` ويعلن عن الخادم باسم `opencode.local`.
|
||||
|
||||
يمكنك تخصيص اسم نطاق mDNS لتشغيل عدة نسخ على الشبكة نفسها:
|
||||
|
||||
```bash
|
||||
opencode web --mdns --mdns-domain myproject.local
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
للسماح بنطاقات إضافية عبر CORS (مفيد للواجهات الأمامية المخصصة):
|
||||
|
||||
```bash
|
||||
opencode web --cors https://example.com
|
||||
```
|
||||
|
||||
### المصادقة
|
||||
|
||||
لحماية الوصول، عيّن كلمة مرور عبر متغير البيئة `OPENCODE_SERVER_PASSWORD`:
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=secret opencode web
|
||||
```
|
||||
|
||||
اسم المستخدم الافتراضي هو `opencode`، ويمكن تغييره عبر `OPENCODE_SERVER_USERNAME`.
|
||||
|
||||
---
|
||||
|
||||
## استخدام واجهة الويب
|
||||
|
||||
بعد التشغيل، تتيح لك واجهة الويب الوصول إلى جلسات OpenCode الخاصة بك.
|
||||
|
||||
### الجلسات
|
||||
|
||||
اعرض جلساتك وأدرها من الصفحة الرئيسية. يمكنك رؤية الجلسات النشطة وبدء جلسات جديدة.
|
||||
|
||||

|
||||
|
||||
### حالة الخادم
|
||||
|
||||
انقر على "See Servers" لعرض الخوادم المتصلة وحالتها.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## إرفاق terminal
|
||||
|
||||
يمكنك إرفاق واجهة terminal (TUI) بخادم ويب قيد التشغيل:
|
||||
|
||||
```bash
|
||||
# ابدأ خادم الويب
|
||||
opencode web --port 4096
|
||||
|
||||
# في محطة طرفية أخرى، اربط TUI
|
||||
opencode attach http://localhost:4096
|
||||
```
|
||||
|
||||
يتيح لك ذلك استخدام واجهة الويب وterminal في الوقت نفسه، مع مشاركة الجلسات والحالة نفسها.
|
||||
|
||||
---
|
||||
|
||||
## ملف الإعدادات
|
||||
|
||||
يمكنك أيضا ضبط إعدادات الخادم داخل ملف الإعدادات `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"cors": ["https://example.com"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تكون خيارات CLI ذات أولوية أعلى من إعدادات ملف الإعدادات.
|
||||
113
qimingcode/packages/web/src/content/docs/ar/windows-wsl.mdx
Normal file
113
qimingcode/packages/web/src/content/docs/ar/windows-wsl.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Windows (WSL)
|
||||
description: شغّل OpenCode على Windows باستخدام WSL لأفضل تجربة.
|
||||
---
|
||||
|
||||
import { Steps } from "@astrojs/starlight/components"
|
||||
|
||||
رغم أن OpenCode يمكن تشغيله مباشرة على Windows، نوصي باستخدام [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) للحصول على أفضل تجربة. يوفر WSL بيئة Linux تعمل بسلاسة مع ميزات OpenCode.
|
||||
|
||||
:::tip[لماذا WSL؟]
|
||||
يوفر WSL أداء أفضل لنظام الملفات، ودعمًا كاملًا لـ terminal، وتوافقًا مع أدوات التطوير التي يعتمد عليها OpenCode.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **ثبّت WSL**
|
||||
|
||||
إذا لم تقم بذلك بعد، [ثبّت WSL](https://learn.microsoft.com/en-us/windows/wsl/install) باستخدام دليل Microsoft الرسمي.
|
||||
|
||||
2. **ثبّت OpenCode داخل WSL**
|
||||
|
||||
بعد إعداد WSL، افتح terminal داخل WSL وثبّت OpenCode باستخدام إحدى [طرق التثبيت](/docs/).
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
3. **استخدم OpenCode من WSL**
|
||||
|
||||
انتقل إلى مجلد مشروعك (يمكنك الوصول لملفات Windows عبر `/mnt/c/` و`/mnt/d/` وغيرها) ثم شغّل OpenCode.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/project
|
||||
opencode
|
||||
```
|
||||
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## تطبيق سطح المكتب + خادم WSL
|
||||
|
||||
إذا كنت تفضّل تطبيق OpenCode لسطح المكتب لكن تريد تشغيل الخادم داخل WSL:
|
||||
|
||||
1. **ابدأ الخادم داخل WSL** مع `--hostname 0.0.0.0` للسماح بالاتصالات الخارجية:
|
||||
|
||||
```bash
|
||||
opencode serve --hostname 0.0.0.0 --port 4096
|
||||
```
|
||||
|
||||
2. **اربط تطبيق سطح المكتب** على `http://localhost:4096`
|
||||
|
||||
:::note
|
||||
إذا لم يعمل `localhost` في إعدادك، اتصل باستخدام عنوان IP الخاص بـ WSL بدلًا منه (من داخل WSL: `hostname -I`) واستخدم `http://<wsl-ip>:4096`.
|
||||
:::
|
||||
|
||||
:::caution
|
||||
عند استخدام `--hostname 0.0.0.0`، اضبط `OPENCODE_SERVER_PASSWORD` لحماية الخادم.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## عميل الويب + WSL
|
||||
|
||||
لأفضل تجربة ويب على Windows:
|
||||
|
||||
1. **شغّل `opencode web` من terminal داخل WSL** بدلًا من PowerShell:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
2. **افتحه من متصفح Windows** عبر `http://localhost:<port>` (يعرض OpenCode الرابط)
|
||||
|
||||
تشغيل `opencode web` من WSL يضمن وصولًا صحيحًا لنظام الملفات وتكاملًا أفضل مع terminal، مع بقائه متاحًا من متصفح Windows.
|
||||
|
||||
---
|
||||
|
||||
## الوصول إلى ملفات Windows
|
||||
|
||||
يمكن لـ WSL الوصول إلى جميع ملفات Windows عبر مجلد `/mnt/`:
|
||||
|
||||
- قرص `C:` → `/mnt/c/`
|
||||
- قرص `D:` → `/mnt/d/`
|
||||
- وهكذا...
|
||||
|
||||
مثال:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/Documents/project
|
||||
opencode
|
||||
```
|
||||
|
||||
:::tip
|
||||
لأفضل سلاسة، يمكنك استنساخ/نسخ المستودع إلى نظام ملفات WSL (مثل `~/code/`) وتشغيل OpenCode من هناك.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## نصائح
|
||||
|
||||
- شغّل OpenCode داخل WSL للمشاريع المخزنة على أقراص Windows حتى يكون الوصول للملفات سلسًا
|
||||
- استخدم [إضافة WSL في VS Code](https://code.visualstudio.com/docs/remote/wsl) مع OpenCode لسير عمل تطوير متكامل
|
||||
- إعدادات OpenCode وجلساته تُخزَّن داخل بيئة WSL في `~/.local/share/opencode/`
|
||||
289
qimingcode/packages/web/src/content/docs/ar/zen.mdx
Normal file
289
qimingcode/packages/web/src/content/docs/ar/zen.mdx
Normal file
@@ -0,0 +1,289 @@
|
||||
---
|
||||
title: Zen
|
||||
description: قائمة منتقاة من النماذج يوفّرها OpenCode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Zen هي قائمة بالنماذج التي اختبرها فريق OpenCode وتحقّق منها.
|
||||
|
||||
:::note
|
||||
OpenCode Zen متاح حاليا بنسخة تجريبية.
|
||||
:::
|
||||
|
||||
يعمل Zen مثل أي مزوّد آخر في OpenCode. تسجّل الدخول إلى OpenCode Zen وتحصل على
|
||||
مفتاح API. استخدامه **اختياري بالكامل** ولا تحتاج إليه لاستخدام OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## الخلفية
|
||||
|
||||
يوجد عدد كبير من النماذج، لكن عددا قليلا فقط منها يعمل جيدا كعوامل للبرمجة.
|
||||
إضافة إلى ذلك، يتم إعداد معظم المزوّدين بطرق مختلفة جدا؛ لذلك ستحصل على أداء
|
||||
وجودة مختلفين بشكل كبير.
|
||||
|
||||
:::tip
|
||||
اختبرنا مجموعة منتقاة من النماذج والمزوّدين الذين يعملون جيدا مع OpenCode.
|
||||
:::
|
||||
|
||||
لذلك إذا كنت تستخدم نموذجا عبر خدمة مثل OpenRouter، فلا يمكنك أبدا التأكد مما
|
||||
إذا كنت تحصل على أفضل نسخة من النموذج الذي تريده.
|
||||
|
||||
ولحل ذلك، قمنا بعدة أمور:
|
||||
|
||||
1. اختبرنا مجموعة منتقاة من النماذج وتحدثنا مع فرقها حول أفضل طريقة لتشغيلها.
|
||||
2. ثم عملنا مع عدد من المزوّدين للتأكد من تقديم هذه النماذج بالشكل الصحيح.
|
||||
3. وأخيرا، أجرينا قياسا معياريا لتوليفة النموذج/المزوّد ووضعنا قائمة نشعر بثقة في التوصية بها.
|
||||
|
||||
OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه النماذج.
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
يعمل OpenCode Zen مثل أي مزوّد آخر في OpenCode.
|
||||
|
||||
1. تسجّل الدخول إلى **<a href={console}>OpenCode Zen</a>**، وتضيف تفاصيل الفوترة، ثم تنسخ مفتاح API.
|
||||
2. تشغّل الأمر `/connect` في واجهة TUI، وتختار OpenCode Zen، ثم تلصق مفتاح API.
|
||||
3. تشغّل `/models` في واجهة TUI لرؤية قائمة النماذج التي نوصي بها.
|
||||
|
||||
تتم محاسبتك على كل طلب ويمكنك إضافة رصيد إلى حسابك.
|
||||
|
||||
---
|
||||
|
||||
## نقاط النهاية
|
||||
|
||||
يمكنك أيضا الوصول إلى نماذجنا عبر نقاط نهاية API التالية.
|
||||
|
||||
| النموذج | معرّف النموذج | نقطة النهاية | حزمة AI SDK |
|
||||
| --------------------- | --------------------- | -------------------------------------------------- | --------------------------- |
|
||||
| GPT 5.5 | gpt-5.5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.5 Pro | gpt-5.5-pro | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Pro | gpt-5.4-pro | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Mini | gpt-5.4-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Nano | gpt-5.4-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.3 Codex Spark | gpt-5.3-codex-spark | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex | gpt-5.1-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Max | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| Claude Opus 4.7 | claude-opus-4-7 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4 | claude-sonnet-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Gemini 3.1 Pro | gemini-3.1-pro | `https://opencode.ai/zen/v1/models/gemini-3.1-pro` | `@ai-sdk/google` |
|
||||
| Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
|
||||
| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.5 Free | minimax-m2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 5.1 | glm-5.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 5 | glm-5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Ling 2.6 Flash | ling-2.6-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Hy3 Preview Free | hy3-preview-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Nemotron 3 Super Free | nemotron-3-super-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
|
||||
يستخدم [معرّف النموذج](/docs/config/#models) في إعدادات OpenCode الصيغة `opencode/<model-id>`. على سبيل المثال، بالنسبة إلى GPT 5.5، ستستخدم `opencode/gpt-5.5` في إعداداتك.
|
||||
|
||||
---
|
||||
|
||||
### النماذج
|
||||
|
||||
يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## التسعير
|
||||
|
||||
ندعم نموذج الدفع حسب الاستخدام. فيما يلي الأسعار **لكل 1M tokens**.
|
||||
|
||||
| النموذج | الإدخال | الإخراج | القراءة المخزنة | الكتابة المخزنة |
|
||||
| --------------------------------- | ------- | ------- | --------------- | --------------- |
|
||||
| Big Pickle | Free | Free | Free | - |
|
||||
| MiniMax M2.5 Free | Free | Free | Free | - |
|
||||
| Ling 2.6 Flash Free | Free | Free | Free | - |
|
||||
| Hy3 Preview Free | Free | Free | Free | - |
|
||||
| Nemotron 3 Super Free | Free | Free | Free | - |
|
||||
| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||
| GLM 5.1 | $1.40 | $4.40 | $0.26 | - |
|
||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||
| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - |
|
||||
| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 |
|
||||
| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 |
|
||||
| Claude Opus 4.7 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.6 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.5 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.1 | $15.00 | $75.00 | $1.50 | $18.75 |
|
||||
| Claude Sonnet 4.6 | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Sonnet 4 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 |
|
||||
| Gemini 3.1 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||
| Gemini 3.1 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||
| GPT 5.5 (≤ 272K tokens) | $5.00 | $30.00 | $0.50 | - |
|
||||
| GPT 5.5 (> 272K tokens) | $10.00 | $45.00 | $1.00 | - |
|
||||
| GPT 5.5 Pro | $30.00 | $180.00 | $30.00 | - |
|
||||
| GPT 5.4 (≤ 272K tokens) | $2.50 | $15.00 | $0.25 | - |
|
||||
| GPT 5.4 (> 272K tokens) | $5.00 | $22.50 | $0.50 | - |
|
||||
| GPT 5.4 Pro | $30.00 | $180.00 | $30.00 | - |
|
||||
| GPT 5.4 Mini | $0.75 | $4.50 | $0.075 | - |
|
||||
| GPT 5.4 Nano | $0.20 | $1.25 | $0.02 | - |
|
||||
| GPT 5.3 Codex Spark | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.1 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex Max | $1.25 | $10.00 | $0.125 | - |
|
||||
| GPT 5.1 Codex Mini | $0.25 | $2.00 | $0.025 | - |
|
||||
| GPT 5 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Nano | Free | Free | Free | - |
|
||||
|
||||
قد تلاحظ _Claude Haiku 3.5_ في سجل الاستخدام. هذا [نموذج منخفض التكلفة](/docs/config/#models) يُستخدم لتوليد عناوين جلساتك.
|
||||
|
||||
:::note
|
||||
يتم تمرير رسوم بطاقات الائتمان بالتكلفة الفعلية (4.4% + $0.30 لكل معاملة)؛ ولا نفرض أي رسوم إضافية فوق ذلك.
|
||||
:::
|
||||
|
||||
النماذج المجانية:
|
||||
|
||||
- MiniMax M2.5 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Ling 2.6 Flash Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Hy3 Preview Flash Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Nemotron 3 Super Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
|
||||
<a href={email}>تواصل معنا</a> إذا كانت لديك أي أسئلة.
|
||||
|
||||
---
|
||||
|
||||
### إعادة الشحن التلقائي
|
||||
|
||||
إذا انخفض رصيدك عن $5، فسيقوم Zen تلقائيا بإعادة شحن $20.
|
||||
|
||||
يمكنك تغيير مبلغ إعادة الشحن التلقائي. ويمكنك أيضا تعطيل إعادة الشحن التلقائي بالكامل.
|
||||
|
||||
---
|
||||
|
||||
### الحدود الشهرية
|
||||
|
||||
يمكنك أيضا تعيين حد شهري للاستخدام لمساحة العمل بالكامل ولكل عضو في فريقك.
|
||||
|
||||
على سبيل المثال، لنفترض أنك ضبطت حد الاستخدام الشهري على $20، فلن يستخدم Zen أكثر من $20 خلال شهر. لكن إذا كانت إعادة الشحن التلقائي مفعّلة، فقد ينتهي الأمر بخصم أكثر من $20 إذا انخفض رصيدك عن $5.
|
||||
|
||||
---
|
||||
|
||||
### النماذج المهملة
|
||||
|
||||
| النموذج | تاريخ الإيقاف |
|
||||
| ------------------ | -------------- |
|
||||
| GPT 5.2 Codex | 23 يوليو 2026 |
|
||||
| GPT 5.1 Codex | 23 يوليو 2026 |
|
||||
| GPT 5.1 Codex Max | 23 يوليو 2026 |
|
||||
| GPT 5.1 Codex Mini | 23 يوليو 2026 |
|
||||
| GPT 5 Codex | 23 يوليو 2026 |
|
||||
| Claude Sonnet 4 | 15 يونيو 2026 |
|
||||
| GLM 5 | 14 مايو 2026 |
|
||||
| MiniMax M2.1 | 15 مارس 2026 |
|
||||
| GLM 4.7 | 15 مارس 2026 |
|
||||
| GLM 4.6 | 15 مارس 2026 |
|
||||
| Gemini 3 Pro | 9 مارس 2026 |
|
||||
| Kimi K2 Thinking | 6 مارس 2026 |
|
||||
| Kimi K2 | 6 مارس 2026 |
|
||||
| Claude Haiku 3.5 | 16 فبراير 2026 |
|
||||
| Qwen3 Coder 480B | 6 فبراير 2026 |
|
||||
|
||||
---
|
||||
|
||||
## الخصوصية
|
||||
|
||||
تتم استضافة جميع نماذجنا في الولايات المتحدة. يلتزم مزوّدونا بسياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع الاستثناءات التالية:
|
||||
|
||||
- Big Pickle: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- MiniMax M2.5 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- Ling 2.6 Flash Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- Hy3 Preview Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- Nemotron 3 Super Free (نقاط نهاية NVIDIA المجانية): يُقدَّم بموجب [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). للاستخدام التجريبي فقط، وليس للإنتاج أو البيانات الحساسة. تقوم NVIDIA بتسجيل المطالبات والمخرجات لتحسين نماذجها وخدماتها. لا ترسل بيانات شخصية أو سرية.
|
||||
- OpenAI APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data).
|
||||
- Anthropic APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||
|
||||
---
|
||||
|
||||
## للفرق
|
||||
|
||||
يعمل Zen بشكل ممتاز للفرق أيضا. يمكنك دعوة زملاء الفريق، وتعيين الأدوار، وتنظيم
|
||||
النماذج التي يستخدمها فريقك، والمزيد.
|
||||
|
||||
:::note
|
||||
مساحات العمل مجانية حاليا للفرق كجزء من النسخة التجريبية.
|
||||
:::
|
||||
|
||||
إدارة مساحة العمل مجانية حاليا للفرق كجزء من النسخة التجريبية. سنشارك المزيد من التفاصيل حول التسعير قريبا.
|
||||
|
||||
---
|
||||
|
||||
### الأدوار
|
||||
|
||||
يمكنك دعوة زملاء الفريق إلى مساحة عملك وتعيين الأدوار:
|
||||
|
||||
- **Admin**: إدارة النماذج والأعضاء ومفاتيح API والفوترة
|
||||
- **Member**: إدارة مفاتيح API الخاصة به فقط
|
||||
|
||||
يمكن للمسؤولين أيضا تعيين حدود إنفاق شهرية لكل عضو لإبقاء التكاليف تحت السيطرة.
|
||||
|
||||
---
|
||||
|
||||
### الوصول إلى النماذج
|
||||
|
||||
يمكن للمسؤولين تفعيل نماذج محددة لمساحة العمل أو تعطيلها. ستعيد الطلبات المرسلة إلى نموذج معطّل خطأ.
|
||||
|
||||
يفيد ذلك في الحالات التي تريد فيها تعطيل استخدام نموذج يجمع البيانات.
|
||||
|
||||
---
|
||||
|
||||
### استخدم مفتاحك الخاص
|
||||
|
||||
يمكنك استخدام مفاتيح API الخاصة بك لدى OpenAI أو Anthropic مع الاستمرار في الوصول إلى نماذج أخرى في Zen.
|
||||
|
||||
عند استخدام مفاتيحك الخاصة، تتم فوترة tokens مباشرة من المزوّد وليس من Zen.
|
||||
|
||||
على سبيل المثال، قد تكون لدى مؤسستك بالفعل مفاتيح لـ OpenAI أو Anthropic وتريد استخدامها بدلا من المفتاح الذي يوفّره Zen.
|
||||
|
||||
---
|
||||
|
||||
## الأهداف
|
||||
|
||||
أنشأنا OpenCode Zen من أجل:
|
||||
|
||||
1. **قياس الأداء** لأفضل النماذج/المزوّدين لعوامل البرمجة.
|
||||
2. إتاحة الخيارات **الأعلى جودة** دون خفض الأداء أو توجيه الطلبات إلى مزوّدين أرخص.
|
||||
3. تمرير أي **انخفاضات في الأسعار** عبر البيع بالتكلفة؛ بحيث تكون الزيادة الوحيدة لتغطية رسوم المعالجة.
|
||||
4. **عدم فرض أي ارتباط حصري** عبر تمكينك من استخدامه مع أي عامل برمجة آخر. ومع إبقاء إمكانية استخدام أي مزوّد آخر مع OpenCode أيضا دائما.
|
||||
156
qimingcode/packages/web/src/content/docs/bs/acp.mdx
Normal file
156
qimingcode/packages/web/src/content/docs/bs/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: ACP podrška
|
||||
description: Koristite OpenCode u bilo kojem uređivaču kompatibilnom sa ACP.
|
||||
---
|
||||
|
||||
OpenCode podržava [Agent Client Protocol](https://agentclientprotocol.com) (ACP), što vam omogućava da ga koristite direktno u kompatibilnim uređivačima i IDE-ovima.
|
||||
|
||||
:::tip
|
||||
Za listu uređivača i alata koji podržavaju ACP, pogledajte [ACP izvještaj o napretku](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP je otvoreni protokol koji standardizira komunikaciju između uređivača koda i AI coding agenata.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Da biste koristili OpenCode putem ACP-a, konfigurirajte svoj uređivač da pokrene naredbu `opencode acp`.
|
||||
|
||||
Naredba pokreće OpenCode kao ACP-kompatibilan podproces koji komunicira sa vašim uređivačem preko JSON-RPC-a kroz stdio.
|
||||
|
||||
Ispod su primjeri za popularne uređivače koji podržavaju ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
Dodajte u svoju [Zed](https://zed.dev) konfiguraciju (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Da biste ga otvorili, koristite akciju `agent: new thread` u **Command Palette**.
|
||||
|
||||
Također možete vezati prečicu na tastaturi uređivanjem vašeg `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDE-ovi
|
||||
|
||||
Dodajte u svoj [JetBrains IDE](https://www.jetbrains.com/) `acp.json` prema [dokumentaciji](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Da biste ga otvorili, koristite novog "OpenCode" agenta u AI Chat agent selektoru.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
Dodajte u svoju [Avante.nvim](https://github.com/yetone/avante.nvim) konfiguraciju:
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako trebate proslijediti varijable okruženja:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
Da koristite OpenCode kao ACP agenta u [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), dodajte sljedeće u svoju Neovim konfiguraciju:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Ova konfiguracija postavlja CodeCompanion da koristi OpenCode kao ACP chat agenta.
|
||||
|
||||
Ako trebate proslijediti varijable okruženja (kao što je `OPENCODE_API_KEY`), pogledajte [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) u dokumentaciji CodeCompanion.nvim.
|
||||
|
||||
## Podržane funkcije
|
||||
|
||||
OpenCode radi isto kroz ACP kao i u terminalu. Podržane su sve funkcije:
|
||||
|
||||
:::note
|
||||
Neke ugrađene komande kao što su `/undo` i `/redo` trenutno nisu podržane.
|
||||
:::
|
||||
|
||||
- Ugrađeni alati (operacije sa datotekama, naredbe terminala, itd.)
|
||||
- Prilagođeni alati i slash komande
|
||||
- MCP serveri konfigurisani u vašoj OpenCode konfiguraciji
|
||||
- Pravila specifična za projekat `AGENTS.md`
|
||||
- Prilagođeni formateri i linteri
|
||||
- Agenti i sistem dozvola
|
||||
746
qimingcode/packages/web/src/content/docs/bs/agents.mdx
Normal file
746
qimingcode/packages/web/src/content/docs/bs/agents.mdx
Normal file
@@ -0,0 +1,746 @@
|
||||
---
|
||||
title: Agenti
|
||||
description: Konfigurirajte i koristite specijalizirane agente.
|
||||
---
|
||||
|
||||
Agenti su specijalizirani AI asistenti koji se mogu konfigurirati za specifične zadatke i tokove posla. Oni vam omogućavaju da kreirate fokusirane alate sa prilagođenim upitima, modelima i pristupom alatima.
|
||||
|
||||
:::tip
|
||||
Koristite agenta plana za analizu koda i pregled prijedloga bez ikakvih promjena koda.
|
||||
:::
|
||||
|
||||
Možete se prebacivati između agenata tokom sesije ili ih pozvati spominjanjem `@`.
|
||||
|
||||
---
|
||||
|
||||
## Vrste
|
||||
|
||||
Postoje dvije vrste agenata u OpenCode: primarni agenti i podagenti.
|
||||
|
||||
---
|
||||
|
||||
### Primarni agenti
|
||||
|
||||
Primarni agenti su glavni pomoćnici s kojima direktno komunicirate. Možete se kretati kroz njih pomoću tipke **Tab** ili vašeg konfigurisanog povezivanja tipki `switch_agent`. Ovi agenti vode vaš glavni razgovor. Pristup alatima se konfiguriše putem dozvola — na primjer, Build ima omogućene sve alate dok je Plan ograničen.
|
||||
|
||||
:::tip
|
||||
Možete koristiti tipku **Tab** za prebacivanje između primarnih agenata tokom sesije.
|
||||
:::
|
||||
|
||||
OpenCode dolazi sa dva ugrađena primarna agenta, **Build** i **Plan**. Pogledat ćemo ih u nastavku.
|
||||
|
||||
---
|
||||
|
||||
### Subagenti
|
||||
|
||||
Subagenti su specijalizovani pomoćnici koje primarni agenti mogu pozvati za određene zadatke. Možete ih i ručno pozvati **@ spominjanjem** u svojim porukama.
|
||||
|
||||
OpenCode dolazi sa dva ugrađena subagenta, **General** i **Explore**. Ovo ćemo pogledati u nastavku.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađeni
|
||||
|
||||
OpenCode dolazi sa dva ugrađena primarna agenta i dva ugrađena subagenta.
|
||||
|
||||
---
|
||||
|
||||
### Build agent
|
||||
|
||||
_Režim_: `primary`
|
||||
|
||||
Build je **podrazumevani** primarni agent sa svim omogućenim alatima. Ovo je standardni agent za razvojni rad gdje vam je potreban pun pristup operacijama datoteka i sistemskim komandama.
|
||||
|
||||
---
|
||||
|
||||
### Plan agent
|
||||
|
||||
_Režim_: `primary`
|
||||
|
||||
Ograničeni agent dizajniran za planiranje i analizu. Koristimo sistem dozvola kako bismo vam pružili veću kontrolu i spriječili neželjene promjene.
|
||||
Prema zadanim postavkama, sve sljedeće je postavljeno na `ask`:
|
||||
|
||||
- `file edits`: Sva upisivanja, zakrpe i uređivanja
|
||||
- `bash`: Sve bash komande
|
||||
|
||||
Ovaj agent je koristan kada želite da LLM analizira kod, predloži promjene ili kreira planove bez stvarnih modifikacija vaše baze koda.
|
||||
|
||||
---
|
||||
|
||||
### General agent
|
||||
|
||||
_Režim_: `subagent`
|
||||
|
||||
Agent opće namjene za istraživanje složenih pitanja i izvršavanje zadataka u više koraka. Ima potpuni pristup alatima (osim todo), tako da može mijenjati fajlove kada je to potrebno. Koristite ovo za paralelno pokretanje više jedinica rada.
|
||||
|
||||
---
|
||||
|
||||
### Explore agent
|
||||
|
||||
_Režim_: `subagent`
|
||||
|
||||
Brzi agent samo za čitanje za istraživanje kodnih baza. Nije moguće mijenjati fajlove. Koristite ovo kada trebate brzo pronaći datoteke po uzorku, pretražiti kod za ključne riječi ili odgovoriti na pitanja o bazi kodova.
|
||||
|
||||
---
|
||||
|
||||
### Compaction agent
|
||||
|
||||
_Režim_: `primary`
|
||||
|
||||
Skriveni sistemski agent koji sažima dugi kontekst u manji sažetak. Pokreće se automatski kada je potrebno i ne može se odabrati u korisničkom interfejsu.
|
||||
|
||||
---
|
||||
|
||||
### Title agent
|
||||
|
||||
_Režim_: `primary`
|
||||
|
||||
Skriveni sistemski agent koji generiše kratke naslove sesija. Pokreće se automatski i ne može se odabrati u korisničkom interfejsu.
|
||||
|
||||
---
|
||||
|
||||
### Summary agent
|
||||
|
||||
_Režim_: `primary`
|
||||
|
||||
Skriveni sistemski agent koji kreira sažetke sesije. Pokreće se automatski i ne može se odabrati u korisničkom interfejsu.
|
||||
|
||||
---
|
||||
|
||||
## Korištenje
|
||||
|
||||
1. Za primarne agente, koristite taster **Tab** za kretanje kroz njih tokom sesije. Također možete koristiti svoju konfiguriranu vezu tipke `switch_agent`.
|
||||
|
||||
2. Subagenti se mogu pozvati:
|
||||
- **Automatski** od strane primarnih agenata za specijalizovane zadatke na osnovu njihovih opisa.
|
||||
- Ručno **@ spominjanjem** subagenta u vašoj poruci. Na primjer.
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **Navigacija između sesija**: Kada subagenti kreiraju vlastite podređene sesije, možete se kretati između roditeljske sesije i svih podređenih sesija koristeći:
|
||||
- **\<Leader>+Right** (ili vaša konfigurirana `session_child_cycle` veza) za kretanje naprijed kroz roditelj → dijete1 → dijete2 → ... → roditelj
|
||||
- **\<Leader>+Left** (ili vaše konfigurirano povezivanje tipki `session_child_cycle_reverse`) za kretanje unazad kroz roditelj ← dijete1 ← dijete2 ← ... ← roditelj
|
||||
|
||||
Ovo vam omogućava neprimetno prebacivanje između glavnog razgovora i rada specijalizovanog podagenta.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete prilagoditi ugrađene agente ili kreirati vlastite kroz konfiguraciju. Agenti se mogu konfigurisati na dva načina:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Konfigurirajte agente u svom konfiguracijskom fajlu `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Također možete definirati agente koristeći markdown datoteke. Stavite ih u:
|
||||
|
||||
- Globalno: `~/.config/opencode/agents/`
|
||||
- Po projektu: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Ime markdown datoteke postaje ime agenta. Na primjer, `review.md` kreira `review` agenta.
|
||||
|
||||
---
|
||||
|
||||
## Opcije
|
||||
|
||||
Pogledajmo ove opcije konfiguracije detaljno.
|
||||
|
||||
---
|
||||
|
||||
### Opis
|
||||
|
||||
Koristite opciju `description` da pružite kratak opis onoga što agent radi i kada ga koristiti.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je **obavezna** opcija konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Kontrolišite slučajnost i kreativnost odgovora LLM-a pomoću `temperature` konfiguracije.
|
||||
|
||||
Niže vrijednosti čine odgovore fokusiranijim i determinističkim, dok više vrijednosti povećavaju kreativnost i varijabilnost.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vrijednosti temperature se obično kreću od 0.0 do 1.0:
|
||||
|
||||
- **0.0-0.2**: Vrlo fokusirani i deterministički odgovori, idealni za analizu i planiranje koda
|
||||
- **0.3-0.5**: Uravnoteženi odgovori sa malo kreativnosti, dobro za opšte razvojne zadatke
|
||||
- **0.6-1.0**: Kreativniji i raznovrsniji odgovori, korisni za razmišljanje i istraživanje
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako temperatura nije navedena, OpenCode koristi standardne postavke specifične za model; obično 0 za većinu modela, 0.55 za Qwen modele.
|
||||
|
||||
---
|
||||
|
||||
### Maksimalan broj koraka
|
||||
|
||||
Kontrolirajte maksimalni broj iteracija agenta koje agent može izvesti prije nego što bude prisiljen da odgovori samo tekstom. Ovo omogućava korisnicima koji žele kontrolirati troškove da postave ograničenje na akcije agenta.
|
||||
|
||||
Ako ovo nije postavljeno, agent će nastaviti iterirati sve dok model ne odluči da se zaustavi ili korisnik ne prekine sesiju.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Kada se dostigne ograničenje, agent prima poseban sistemski prompt koji ga upućuje da odgovori sa rezimeom svog rada i preporučenim preostalim zadacima.
|
||||
|
||||
:::caution
|
||||
Naslijeđeno polje `maxSteps` je zastarjelo. Umjesto toga koristite `steps`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Onemogućavanje
|
||||
|
||||
Postavite na `true` da onemogućite agenta.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Upit
|
||||
|
||||
Navedite prilagođenu sistemsku prompt datoteku za ovog agenta sa `prompt` konfiguracijom. Datoteka s promptom treba da sadrži upute specifične za svrhu agenta.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ova putanja je relativna u odnosu na mjesto gdje se nalazi konfiguracijski fajl. Dakle, ovo radi i za globalnu OpenCode konfiguraciju i za konfiguraciju specifične za projekat.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Koristite `model` konfiguraciju da nadjačate model za ovog agenta. Korisno za korištenje različitih modela optimiziranih za različite zadatke. Na primjer, brži model za planiranje, sposobniji model za implementaciju.
|
||||
|
||||
:::tip
|
||||
Ako ne navedete model, primarni agenti koriste [model globalno konfiguriran](/docs/config#models) dok će podagenti koristiti model primarnog agenta koji je pozvao subagenta.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ID modela u vašoj OpenCode konfiguraciji koristi format `provider/model-id`. Na primjer, ako koristite [OpenCode Zen](/docs/zen), koristili biste `opencode/gpt-5.1-codex` za GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### Alati
|
||||
|
||||
Kontrolirajte koji su alati dostupni u ovom agentu koristeći konfiguraciju `tools`. Možete omogućiti ili onemogućiti određene alate tako što ćete ih postaviti na `true` ili `false`.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
Konfiguracija specifična za agenta poništava globalnu konfiguraciju.
|
||||
:::
|
||||
|
||||
Također možete koristiti zamjenske znakove za kontrolu više alata odjednom. Na primjer, da onemogućite sve alate sa MCP servera:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o alatima](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Dozvole
|
||||
|
||||
Možete konfigurirati dozvole za upravljanje radnjama koje agent može poduzeti. Trenutno se dozvole za alate `edit`, `bash` i `webfetch` mogu konfigurirati na:
|
||||
|
||||
- `"ask"` — Zatražite odobrenje prije pokretanja alata
|
||||
- `"allow"` — Dozvoli sve operacije bez odobrenja
|
||||
- `"deny"` — Onemogućite alat
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Možete nadjačati ove dozvole po agentu.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Također možete postaviti dozvole u Markdown agentima.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
Možete postaviti dozvole za određene bash komande.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo može koristiti glob uzorak.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Također možete koristiti zamjenski znak `*` za kontrolu dozvola za sve komande.
|
||||
Budući da posljednje podudarno pravilo ima prednost, prvo postavite zamjenski znak `*`, a zatim navedena pravila.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o dozvolama](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Način rada
|
||||
|
||||
Kontrolirajte način rada agenta koristeći konfiguraciju `mode`. Opcija `mode` se koristi da specificira kako se agent može koristiti.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Opcija `mode` se može postaviti na `primary`, `subagent` ili `all`. Ako `mode` nije specificirano, podrazumevano je `all`.
|
||||
|
||||
---
|
||||
|
||||
### Skriveno
|
||||
|
||||
Sakrij podagenta iz `@` menija za automatsko dovršavanje sa `hidden: true`. Korisno za interne podagente koje bi drugi agenti trebali programski pozvati samo preko Task alata.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo utiče samo na vidljivost korisnika u meniju za automatsko dovršavanje. Skriveni agenti se i dalje mogu pozvati od strane modela putem alata Task ako dozvole to dozvoljavaju.
|
||||
|
||||
:::note
|
||||
Odnosi se samo na `mode: subagent` agente.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Dozvole zadataka
|
||||
|
||||
Kontrolirajte koje podagente agent može pozvati preko Task alata sa `permission.task`. Koristi glob uzorke za fleksibilno uparivanje.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Kada se postavi na `deny`, subagent se u potpunosti uklanja iz opisa alata za zadatak, tako da ga model neće pokušati pozvati.
|
||||
|
||||
:::tip
|
||||
Pravila se procjenjuju po redoslijedu i **posljednje odgovarajuće pravilo pobjeđuje**. U gornjem primjeru, `orchestrator-planner` odgovara i `*` (deny) i `orchestrator-*` (allow), ali pošto `orchestrator-*` dolazi nakon `*`, rezultat je `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Korisnici uvijek mogu pozvati bilo kojeg subagenta direktno preko `@` menija za autodovršavanje, čak i ako bi dozvole za zadatak agenta to uskratile.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Boja
|
||||
|
||||
Prilagodite vizualni izgled agenta u korisničkom sučelju s opcijom `color`. Ovo utiče na to kako se agent pojavljuje u interfejsu.
|
||||
|
||||
Koristite važeću heksadecimalnu boju (npr. `#FF5733`) ili boju teme: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
Kontrolirajte raznolikost odgovora s opcijom `top_p`. Alternativa temperaturi za kontrolu nasumice.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vrijednosti se kreću od 0.0 do 1.0. Niže vrijednosti su više fokusirane, više vrijednosti raznovrsnije.
|
||||
|
||||
---
|
||||
|
||||
### Dodatno
|
||||
|
||||
Sve druge opcije koje navedete u konfiguraciji agenta će biti **direktno proslijeđene** dobavljaču kao opcije modela. Ovo vam omogućava da koristite karakteristike i parametre specifične za provajdera.
|
||||
|
||||
Na primjer, sa OpenAI-jevim modelima rezonovanja, možete kontrolisati napor rasuđivanja:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ove dodatne opcije su specifične za model i dobavljača. U dokumentaciji vašeg provajdera provjerite dostupne parametre.
|
||||
|
||||
:::tip
|
||||
Pokrenite `opencode models` da vidite listu dostupnih modela.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Kreiranje agenata
|
||||
|
||||
Možete kreirati nove agente koristeći sljedeću naredbu:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Ova interaktivna komanda će:
|
||||
|
||||
1. Pitajte gdje da sačuvate agenta; globalno ili specifično za projekat.
|
||||
2. Opis onoga što agent treba da uradi.
|
||||
3. Generirajte odgovarajući sistemski prompt i identifikator.
|
||||
4. Omogućite vam da odaberete kojim alatima agent može pristupiti.
|
||||
5. Konačno, kreirajte markdown datoteku s konfiguracijom agenta.
|
||||
|
||||
---
|
||||
|
||||
## Primjeri upotrebe
|
||||
|
||||
Evo nekoliko uobičajenih slučajeva upotrebe različitih agenata.
|
||||
|
||||
- **Build agent**: Potpuni razvojni rad sa svim omogućenim alatima
|
||||
- **Plan agent**: Analiza i planiranje bez unošenja promjena
|
||||
- **Review agent**: Code review sa pristupom samo za čitanje plus alati za dokumentaciju
|
||||
- **Debug agent**: Fokusiran na istragu sa omogućenim bash i alatima za čitanje
|
||||
- **Docs agent**: Pisanje dokumentacije sa operacijama datoteka, ali bez sistemskih naredbi
|
||||
|
||||
---
|
||||
|
||||
## Primjeri
|
||||
|
||||
Evo nekoliko primjera agenata koji bi vam mogli biti korisni.
|
||||
|
||||
:::tip
|
||||
Imate li agenta kojeg biste željeli podijeliti? [Pošalji PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Agent za dokumentaciju
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sigurnosni revizor
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
600
qimingcode/packages/web/src/content/docs/bs/cli.mdx
Normal file
600
qimingcode/packages/web/src/content/docs/bs/cli.mdx
Normal file
@@ -0,0 +1,600 @@
|
||||
---
|
||||
title: CLI
|
||||
description: OpenCode CLI opcije i naredbe.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
OpenCode CLI po defaultu pokreće [TUI](/docs/tui) kada se pokrene bez ikakvih argumenata.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Ali takođe prihvata naredbe kao što je dokumentovano na ovoj stranici. Ovo vam omogućava programsku interakciju sa OpenCode.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
Pokrenite OpenCode terminalski korisnički interfejs.
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------ | ------ | ------------------------------------------------------------------------ |
|
||||
| `--continue` | `-c` | Nastavite posljednju sesiju |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
| `--fork` | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| `--prompt` | | Prompt za upotrebu |
|
||||
| `--model` | `-m` | Model za korištenje u obliku provider/model |
|
||||
| `--agent` | | Agent za korištenje |
|
||||
| `--port` | | Port na kojem treba slušati |
|
||||
| `--hostname` | | Hostname na kojem treba slušati |
|
||||
|
||||
---
|
||||
|
||||
## Naredbe
|
||||
|
||||
OpenCode CLI takođe ima sljedeće naredbe.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
Upravljajte OpenCode agentima.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
Priključite terminal na već pokrenut OpenCode backend server pokrenut putem `serve` ili `web` naredbi.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
Ovo omogućava korištenje TUI-ja sa udaljenim OpenCode backend-om. Na primjer:
|
||||
|
||||
```bash
|
||||
# Start the backend server for web/mobile access
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# In another terminal, attach the TUI to the running backend
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ----------- | ------ | ------------------------------------ |
|
||||
| `--dir` | | Radni direktorij za pokretanje TUI-a |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
Kreirajte novog agenta s prilagođenom konfiguracijom.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Ova naredba će vas voditi kroz kreiranje novog agenta sa prilagođenim sistemskim promptom i konfiguracijom alata.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Navedite sve dostupne agente.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
Naredba za upravljanje vjerodajnicama i prijavom za provajdere.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
OpenCode pokreće lista provajdera na [Models.dev](https://models.dev), tako da možete koristiti `opencode auth login` da konfigurirate API ključeve za bilo kojeg provajdera kojeg želite koristiti. Ovo je pohranjeno u `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
Kada se OpenCode pokrene, učitava dobavljače iz datoteke vjerodajnica. I ako postoje neki ključevi definirani u vašim okruženjima ili `.env` fajl u vašem projektu.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Navodi sve autentifikovane dobavljače pohranjene u datoteci vjerodajnica.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
Ili kratka verzija.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Odjavljuje vas s provajdera tako što ga briše iz datoteke vjerodajnica.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
Upravljajte GitHub agentom za automatizaciju repozitorija.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
Instalirajte GitHub agenta u svoj repozitorij.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Ovo postavlja neophodni tok rada GitHub Actions i vodi vas kroz proces konfiguracije. [Saznajte više](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
Pokrenite GitHub agent. Ovo se obično koristi u GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| --------- | -------------------------------------- |
|
||||
| `--event` | GitHub mock event za pokretanje agenta |
|
||||
| `--token` | GitHub Personal Access Token |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
Upravljajte Model Context Protocol (MCP) serverima.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
Dodajte MCP server svojoj konfiguraciji.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
Ova naredba će vas voditi kroz dodavanje lokalnog ili udaljenog MCP servera.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Navedite sve konfigurirane MCP servere i njihov status veze.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Ili koristite kratku verziju.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
Autentifikujte se sa MCP serverom koji je omogućen za OAuth.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
Ako ne navedete ime servera, od vas će biti zatraženo da izaberete neki od dostupnih servera koji podržavaju OAuth.
|
||||
Također možete navesti servere koji podržavaju OAuth i njihov status autentifikacije.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
Ili koristite kratku verziju.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Uklonite OAuth vjerodajnice za MCP server.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
Otklanjanje grešaka (debug) OAuth veze sa MCP serverom.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Navedite sve dostupne modele konfiguriranih provajdera.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
Ova naredba prikazuje sve modele dostupne kod vaših konfiguriranih provajdera u formatu `provider/model`.
|
||||
Ovo je korisno za pronalaženje tačnog naziva modela za korištenje u [vašoj konfiguraciji](/docs/config/).
|
||||
Opciono možete proslijediti ID provajdera za filtriranje modela po tom dobavljaču.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ----------- | ------------------------------------------------------------------------ |
|
||||
| `--refresh` | Osvježite keš modela sa models.dev |
|
||||
| `--verbose` | Koristite detaljniji izlaz modela (uključuje metapodatke poput troškova) |
|
||||
|
||||
Koristite `--refresh` zastavicu da ažurirate keširanu listu modela. Ovo je korisno kada su novi modeli dodani provajderu i želite da ih vidite u OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
Pokrenite OpenCode u neinteraktivnom modu tako što ćete direktno proslijediti prompt.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
Ovo je korisno za skriptiranje, automatizaciju ili kada želite brz odgovor bez pokretanja punog TUI-ja. Na primjer:
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
Također možete priključiti pokrenutu `opencode serve` instancu kako biste izbjegli vrijeme hladnog pokretanja MCP servera pri svakom pokretanju:
|
||||
|
||||
```bash
|
||||
# Start a headless server in one terminal
|
||||
opencode serve
|
||||
|
||||
# In another terminal, run commands that attach to it
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------ | ------ | ------------------------------------------------------------------------ |
|
||||
| `--command` | | Naredba za pokretanje, koristite poruku za argumente |
|
||||
| `--continue` | `-c` | Nastavite posljednju sesiju |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
| `--fork` | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| `--share` | | Podijelite sesiju |
|
||||
| `--model` | `-m` | Model za korištenje u obliku provider/model |
|
||||
| `--agent` | | Agent za korištenje |
|
||||
| `--file` | `-f` | Fajlovi koje treba priložiti poruci |
|
||||
| `--format` | | Format: default (formatiran) ili json (sirovi JSON događaji) |
|
||||
| `--title` | | Naslov sesije (koristi skraćeni prompt ako nije navedena vrijednost) |
|
||||
| `--attach` | | Priključite na pokrenuti OpenCode server (npr. http://localhost:4096) |
|
||||
| `--port` | | Port za lokalni server (zadano na nasumični port) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
Pokrenite OpenCode headless server za API pristup. Pogledajte [server docs](/docs/server) za kompletan HTTP interfejs.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
Ovo pokreće HTTP server koji pruža API pristup funkcionalnosti OpenCode-a bez TUI interfejsa. Postavite `OPENCODE_SERVER_PASSWORD` da omogućite HTTP osnovnu auth (korisničko ime je zadano na `opencode`).
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem treba slušati |
|
||||
| `--mdns` | Omogući mDNS otkrivanje |
|
||||
| `--cors` | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
Upravljajte OpenCode sesijama.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Navedite sve OpenCode sesije.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------- | ------ | -------------------------------------- |
|
||||
| `--max-count` | `-n` | Ograničenje na N najnovijih sesija |
|
||||
| `--format` | | Izlazni format: table ili json (table) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
Prikaži statistiku upotrebe tokena i troškova za vaše OpenCode sesije.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ----------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Prikaži statistiku za zadnjih N dana (sva vremena) |
|
||||
| `--tools` | Broj alata za prikaz (svi) |
|
||||
| `--models` | Prikaži raščlambu korištenja modela (skriveno prema zadanim postavkama). Proslijedite broj za prikaz top N |
|
||||
| `--project` | Filtriraj po projektu (svi projekti, prazan niz: trenutni projekt) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Izvezite podatke sesije kao JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
Ako ne unesete ID sesije, od vas će biti zatraženo da odaberete neku od dostupnih sesija.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
Uvezite podatke sesije iz JSON datoteke ili OpenCode dijeljenog URL-a.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
Možete uvesti iz lokalne datoteke ili OpenCode dijeljenog URL-a.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
Pokrenite OpenCode headless server sa web interfejsom.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Ovo pokreće HTTP server i otvara web pretraživač za pristup OpenCode-u preko web interfejsa. Postavite `OPENCODE_SERVER_PASSWORD` da omogućite HTTP osnovnu auth (korisničko ime je zadano na `opencode`).
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem treba slušati |
|
||||
| `--mdns` | Omogući mDNS otkrivanje |
|
||||
| `--cors` | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
Pokrenite ACP (Agent Client Protocol) server.
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
Ova naredba pokreće ACP server koji komunicira preko stdin/stdout koristeći nd-JSON.
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | --------------------------- |
|
||||
| `--cwd` | Radni direktorij |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem slušati |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
Deinstalirajte OpenCode i uklonite sve povezane datoteke.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| --------------- | ------ | --------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Sačuvajte konfiguracijske datoteke |
|
||||
| `--keep-data` | `-d` | Sačuvajte podatke i snimke sesije |
|
||||
| `--dry-run` | | Pokažite šta bi bilo uklonjeno bez uklanjanja |
|
||||
| `--force` | `-f` | Preskoči upite za potvrdu |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
Ažurira OpenCode na najnoviju verziju ili određenu verziju.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
Za nadogradnju na najnoviju verziju.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
Za nadogradnju na određenu verziju.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ---------- | ------ | ------------------------------------------------------- |
|
||||
| `--method` | `-m` | Korišteni način instalacije; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
## Globalne opcije
|
||||
|
||||
OpenCode CLI prihvata sljedeće globalne zastavice.
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| -------------- | ------ | ----------------------------------------- |
|
||||
| `--help` | `-h` | Prikaži pomoć |
|
||||
| `--version` | `-v` | Ispiši broj verzije |
|
||||
| `--print-logs` | | Ispis logova u stderr |
|
||||
| `--log-level` | | Nivo logovanja (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## Varijable okruženja
|
||||
|
||||
OpenCode se može konfigurirati pomoću varijabli okruženja.
|
||||
|
||||
| Varijabla | Tip | Opis |
|
||||
| ------------------------------------- | ------- | ------------------------------------------------------------------ |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | Automatski dijeli sesije |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | Putanja do Git Bash izvršne datoteke na Windows-u |
|
||||
| `OPENCODE_CONFIG` | string | Putanja do konfiguracijskog fajla |
|
||||
| `OPENCODE_TUI_CONFIG` | string | Putanja do TUI konfiguracijskog fajla |
|
||||
| `OPENCODE_CONFIG_DIR` | string | Putanja do konfiguracijskog direktorija |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | Inline json konfiguracijski sadržaj |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Onemogući automatske provjere ažuriranja |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | Onemogući brisanje (pruning) starih podataka |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Onemogući automatsko ažuriranje naslova terminala |
|
||||
| `OPENCODE_PERMISSION` | string | Inline json konfiguracija dozvola |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Onemogući podrazumijevane dodatke (plugins) |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Onemogući automatsko preuzimanje LSP servera |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Omogući eksperimentalne modele |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Onemogući automatsko sažimanje konteksta |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Onemogući čitanje iz `.claude` (prompt + vještine) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Onemogući čitanje `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Onemogući učitavanje `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Onemogući dohvaćanje modela iz udaljenih izvora |
|
||||
| `OPENCODE_FAKE_VCS` | string | Lažni VCS provajder za potrebe testiranja |
|
||||
| `OPENCODE_CLIENT` | string | Identifikator klijenta (zadano na `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | Omogući Exa alate za web pretraživanje |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | Omogući osnovnu autentifikaciju za `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | Poništi osnovno korisničko ime autentifikacije (zadano `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | Prilagođeni URL za dohvaćanje konfiguracije modela |
|
||||
|
||||
---
|
||||
|
||||
### Eksperimentalno
|
||||
|
||||
Ove varijable okruženja omogućavaju eksperimentalne karakteristike koje se mogu promijeniti ili ukloniti.
|
||||
|
||||
| Varijabla | Tip | Opis |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | Omogući sve eksperimentalne funkcije |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Omogući otkrivanje ikona |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Onemogući kopiranje pri odabiru u TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Zadano vremensko ograničenje za bash naredbe u ms |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Maksimalni izlazni tokeni za LLM odgovore |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Omogući praćenje datoteka za cijeli direktorij |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Omogući oxfmt formatter |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Omogući eksperimentalni LSP alat |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Onemogući praćenje datoteka |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Omogući eksperimentalne Exa funkcije |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Omogući TY LSP za python datoteke |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Omogući eksperimentalne Markdown funkcije |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Omogući Plan mod |
|
||||
316
qimingcode/packages/web/src/content/docs/bs/commands.mdx
Normal file
316
qimingcode/packages/web/src/content/docs/bs/commands.mdx
Normal file
@@ -0,0 +1,316 @@
|
||||
---
|
||||
title: Komande
|
||||
description: Kreirajte prilagođene komande za zadatke koji se ponavljaju.
|
||||
---
|
||||
|
||||
Prilagođene komande vam omogućavaju da odredite prompt koji želite da pokrenete kada se ta naredba izvrši u TUI-ju.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
Prilagođene komande su dodatak ugrađenim komandama kao što su `/init`, `/undo`, `/redo`, `/share`, `/help`. [Saznajte više](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## Kreiranje datoteka naredbi
|
||||
|
||||
Kreirajte markdown fajlove u direktorijumu `commands/` da definišete prilagođene komande.
|
||||
Kreiraj `.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 definira svojstva komande. Sadržaj postaje predložak.
|
||||
Koristite komandu tako što ćete upisati `/` nakon čega slijedi naziv komande.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete dodati prilagođene komande kroz OpenCode konfiguraciju ili kreiranjem markdown datoteka u direktoriju `commands/`.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Koristite opciju `command` u svom OpenCode [config](/docs/config):
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Sada možete pokrenuti ovu naredbu u TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Također možete definirati komande koristeći markdown datoteke. Stavite ih u:
|
||||
|
||||
- Globalno: `~/.config/opencode/commands/`
|
||||
- Po projektu: `.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.
|
||||
```
|
||||
|
||||
Ime markdown datoteke postaje ime naredbe. Na primjer, `test.md` vam omogućava da pokrenete:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija upita
|
||||
|
||||
Promptovi za prilagođene komande podržavaju nekoliko posebnih čuvara mjesta i sintakse.
|
||||
|
||||
---
|
||||
|
||||
### Argumenti
|
||||
|
||||
Proslijedite argumente naredbama koristeći čuvar mjesta `$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.
|
||||
```
|
||||
|
||||
Pokrenite naredbu s argumentima:
|
||||
|
||||
```bash frame="none"
|
||||
/component Button
|
||||
```
|
||||
|
||||
I `$ARGUMENTS` će biti zamijenjen sa `Button`.
|
||||
Također možete pristupiti pojedinačnim argumentima koristeći pozicione parametre:
|
||||
|
||||
- `$1` - Prvi argument
|
||||
- `$2` - Drugi argument
|
||||
- `$3` - Treći argument
|
||||
- I tako dalje...
|
||||
|
||||
Na primjer:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Pokrenite naredbu:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
Ovo zamjenjuje:
|
||||
|
||||
- `$1` do `config.json`
|
||||
- `$2` do `src`
|
||||
- `$3` do `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### Shell izlaz
|
||||
|
||||
Koristite _!`command`_ da ubacite izlaz [bash command](/docs/tui#bash-commands) u svoj prompt.
|
||||
Na primjer, da kreirate prilagođenu naredbu koja analizira pokrivenost testom:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Ili da vidite nedavne promjene:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Naredbe se pokreću u korijenskom direktoriju vašeg projekta i njihov izlaz postaje dio prompta.
|
||||
|
||||
---
|
||||
|
||||
### Reference datoteka
|
||||
|
||||
Uključite datoteke u svoju naredbu koristeći `@` nakon čega slijedi naziv datoteke.
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Sadržaj datoteke se automatski uključuje u prompt.
|
||||
|
||||
---
|
||||
|
||||
## Opcije
|
||||
|
||||
Pogledajmo detaljno opcije konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
### Šablon
|
||||
|
||||
Opcija `template` definira prompt koji će biti poslan LLM-u kada se naredba izvrši.
|
||||
|
||||
```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."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je **obavezna** opcija konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
### Opis
|
||||
|
||||
Koristite opciju `description` da pružite kratak opis onoga što naredba radi.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Run tests with coverage"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo se prikazuje kao opis u TUI-u kada unesete naredbu.
|
||||
|
||||
---
|
||||
|
||||
### Agent
|
||||
|
||||
Koristite `agent` konfiguraciju da opciono odredite koji [agent](/docs/agents) treba da izvrši ovu naredbu.
|
||||
Ako je ovo [subagent](/docs/agents/#subagents) naredba će po defaultu pokrenuti pozivanje subagenta.
|
||||
Da onemogućite ovo ponašanje, postavite `subtask` na `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je **opciona** opcija konfiguracije. Ako nije navedeno, podrazumevano je vaš trenutni agent.
|
||||
|
||||
---
|
||||
|
||||
### Podzadatak
|
||||
|
||||
Koristite `subtask` boolean da prisilite naredbu da pokrene [subagent](/docs/agents/#subagents) pozivanje.
|
||||
Ovo je korisno ako želite da naredba ne zagađuje vaš primarni kontekst i da će **primorati** agenta da djeluje kao subagent,
|
||||
čak i ako je `mode` postavljeno na `primary` u konfiguraciji [agent](/docs/agents).
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je **opciona** opcija konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Koristite `model` konfiguraciju da nadjačate zadani model za ovu naredbu.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je **opciona** opcija konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađene naredbe
|
||||
|
||||
OpenCode uključuje nekoliko ugrađenih naredbi kao što su `/init`, `/undo`, `/redo`, `/share`, `/help`; [saznaj više](/docs/tui#commands).
|
||||
:::note
|
||||
Prilagođene komande mogu nadjačati ugrađene komande.
|
||||
:::
|
||||
Ako definirate prilagođenu naredbu s istim imenom, ona će nadjačati ugrađenu naredbu.
|
||||
685
qimingcode/packages/web/src/content/docs/bs/config.mdx
Normal file
685
qimingcode/packages/web/src/content/docs/bs/config.mdx
Normal file
@@ -0,0 +1,685 @@
|
||||
---
|
||||
title: Konfiguracija
|
||||
description: Korištenje OpenCode JSON konfiguracije.
|
||||
---
|
||||
|
||||
Možete konfigurirati OpenCode koristeći JSON konfiguracijski fajl.
|
||||
|
||||
---
|
||||
|
||||
## Format
|
||||
|
||||
OpenCode podržava i **JSON** i **JSONC** (JSON sa komentarima) formate.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
"server": {
|
||||
"port": 4096,
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Lokacije
|
||||
|
||||
Možete postaviti svoju konfiguraciju na nekoliko različitih lokacija i one imaju drugačiji redoslijed prioriteta.
|
||||
|
||||
:::note
|
||||
Konfiguracijski fajlovi se **spajaju**, ne zamjenjuju.
|
||||
:::
|
||||
|
||||
Konfiguracijski fajlovi se spajaju, ne zamjenjuju. Kombiniraju se postavke sa sljedećih konfiguracijskih lokacija. Kasnije konfiguracije poništavaju prethodne samo za konfliktne ključeve. Nekonfliktne postavke iz svih konfiguracija su sačuvane.
|
||||
|
||||
Na primjer, ako vaša globalna konfiguracija postavlja `autoupdate: true`, a vaša projektna konfiguracija postavlja `model: "anthropic/claude-sonnet-4-5"`, konačna konfiguracija će uključivati obje postavke.
|
||||
|
||||
---
|
||||
|
||||
### Redoslijed prioriteta
|
||||
|
||||
Izvori konfiguracije se učitavaju ovim redoslijedom (kasniji izvori poništavaju ranije):
|
||||
|
||||
1. **Udaljena konfiguracija** (od `.well-known/opencode`) - organizacijske postavke
|
||||
2. **Globalna konfiguracija** (`~/.config/opencode/opencode.json`) - korisničke preferencije
|
||||
3. **Prilagođena konfiguracija** (`OPENCODE_CONFIG` env var) - prilagođena preinačenja
|
||||
4. **Konfiguracija projekta** (`opencode.json` u projektu) - postavke specifične za projekat
|
||||
5. **`.opencode` direktoriji** - agenti, komande, dodaci
|
||||
6. **Inline konfiguracija** (`OPENCODE_CONFIG_CONTENT` env var) - runtime preinačenja
|
||||
|
||||
To znači da konfiguracije projekta mogu nadjačati globalne zadane postavke, a globalne konfiguracije mogu nadjačati postavke udaljene organizacije.
|
||||
|
||||
:::note
|
||||
Direktoriji `.opencode` i `~/.config/opencode` koriste **imena u množini** za poddirektorije: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` i `themes/`. Pojedinačna imena (npr. `agent/`) su također podržana za kompatibilnost unatrag.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Udaljeno (Remote)
|
||||
|
||||
Organizacije mogu pružiti zadanu konfiguraciju preko `.well-known/opencode` krajnje tačke. Ovo se automatski preuzima kada se autentifikujete kod provajdera koji to podržava.
|
||||
|
||||
Prvo se učitava udaljena konfiguracija koja služi kao osnovni sloj. Svi ostali izvori konfiguracije (globalni, projektni) mogu nadjačati ove zadane postavke.
|
||||
|
||||
Na primjer, ako vaša organizacija nudi MCP servere koji su po defaultu onemogućeni:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Možete omogućiti određene servere u vašoj lokalnoj konfiguraciji:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Globalno
|
||||
|
||||
Postavite svoju globalnu OpenCode konfiguraciju u `~/.config/opencode/opencode.json`. Koristite globalnu konfiguraciju za korisničke preferencije kao što su provajderi, modeli i dozvole.
|
||||
|
||||
Za postavke specifične za TUI, koristite `~/.config/opencode/tui.json`.
|
||||
|
||||
Globalna konfiguracija poništava zadane postavke udaljene organizacije.
|
||||
|
||||
---
|
||||
|
||||
### Projekt
|
||||
|
||||
Dodajte `opencode.json` u korijen projekta. Konfiguracija projekta ima najveći prioritet među standardnim konfiguracijskim datotekama - ona nadjačava globalne i udaljene konfiguracije.
|
||||
|
||||
Za TUI postavke specifične za projekat, dodajte `tui.json` pored njega.
|
||||
|
||||
:::tip
|
||||
Postavite specifičnu konfiguraciju projekta u korijen vašeg projekta.
|
||||
:::
|
||||
|
||||
Kada se OpenCode pokrene, traži konfiguracijsku datoteku u trenutnom direktoriju ili prelazi do najbližeg Git direktorija.
|
||||
|
||||
Ovo je također sigurno provjeriti u Git i koristi istu shemu kao globalna.
|
||||
|
||||
---
|
||||
|
||||
### Prilagođena konfiguracija
|
||||
|
||||
Navedite prilagođenu putanju konfiguracijske datoteke koristeći varijablu okruženja `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
Prilagođena konfiguracija se učitava između globalne i projektne konfiguracije po redoslijedu prioriteta.
|
||||
|
||||
---
|
||||
|
||||
### Prilagođeni direktorij
|
||||
|
||||
Navedite prilagođeni konfiguracijski direktorij koristeći `OPENCODE_CONFIG_DIR` varijablu okruženja. U ovom direktoriju će se tražiti agenti, komande, modovi i dodaci baš kao standardni `.opencode` direktorij, i trebali bi pratiti istu strukturu.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
Prilagođeni direktorij se učitava nakon direktorija globalne konfiguracije i `.opencode`, tako da **može nadjačati** njihove postavke.
|
||||
|
||||
---
|
||||
|
||||
## Šema
|
||||
|
||||
Konfiguracijski fajl ima šemu koja je definirana u [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
TUI konfiguracija koristi [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json).
|
||||
|
||||
Vaš editor bi trebao biti u mogućnosti da validira i autodovršava na osnovu šeme.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
Koristite namjenski `tui.json` (ili `tui.jsonc`) fajl za postavke specifične za TUI.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
Koristite `OPENCODE_TUI_CONFIG` da pokažete na prilagođeni TUI konfiguracijski fajl.
|
||||
|
||||
Stari `theme`, `keybinds`, i `tui` ključevi u `opencode.json` su zastarjeli i automatski će se migrirati kada je to moguće.
|
||||
|
||||
[Saznajte više o korištenju TUI ovdje](/docs/tui#configure).
|
||||
|
||||
---
|
||||
|
||||
### Server
|
||||
|
||||
Možete konfigurirati postavke servera za naredbe `opencode serve` i `opencode web` putem opcije `server`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dostupne opcije:
|
||||
|
||||
- `port` - Port za slušanje.
|
||||
- `hostname` - Hostname za slušanje. Kada je `mdns` omogućen i nije postavljeno ime hosta, podrazumevano je `0.0.0.0`.
|
||||
- `mdns` - Omogući mDNS otkrivanje servisa. Ovo omogućava drugim uređajima na mreži da otkriju vaš OpenCode server.
|
||||
- `mdnsDomain` - Prilagođeno ime domene za mDNS servis. Zadano je `opencode.local`. Korisno za pokretanje više instanci na istoj mreži.
|
||||
- `cors` - Dodatni origini koji omogućavaju CORS kada koristite HTTP server iz klijenta baziranog na pretraživaču. Vrijednosti moraju biti puni origin (shema + host + opcijski port), npr. `https://app.example.com`.
|
||||
|
||||
[Saznajte više o serveru ovdje](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### Alati
|
||||
|
||||
Možete upravljati alatima koje LLM može koristiti putem opcije `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o alatima ovdje](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Možete konfigurirati dobavljače i modele koje želite koristiti u svojoj OpenCode konfiguraciji kroz opcije `provider`, `model` i `small_model`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
Opcija `small_model` konfigurira poseban model za lagane zadatke poput generiranja naslova. Podrazumevano, OpenCode pokušava da koristi jeftiniji model ako je dostupan od vašeg provajdera, inače se vraća na vaš glavni model.
|
||||
|
||||
Opcije provajdera mogu uključivati `timeout` i `setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - Vrijeme čekanja zahtjeva u milisekundama (podrazumevano: 300000). Postavite na `false` da onemogućite.
|
||||
- `setCacheKey` - Osigurajte da je ključ keš memorije uvijek postavljen za određenog provajdera.
|
||||
|
||||
Također možete konfigurirati [lokalne modele](/docs/models#local). [Saznajte više](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### Opcije specifične za provajdere
|
||||
|
||||
Neki provajderi podržavaju dodatne opcije konfiguracije osim generičkih postavki `timeout` i `apiKey`.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
Amazon Bedrock podržava konfiguraciju specifičnu za AWS:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - AWS regija za Bedrock (zadano na `AWS_REGION` env var ili `us-east-1`)
|
||||
- `profile` - AWS imenovani profil iz `~/.aws/credentials` (zadano na `AWS_PROFILE` env var)
|
||||
- `endpoint` - URL prilagođene krajnje tačke za VPC krajnje tačke. Ovo je alias za generičku opciju `baseURL` koristeći terminologiju specifičnu za AWS. Ako su oba navedena, `endpoint` ima prednost.
|
||||
|
||||
:::note
|
||||
Tokeni nosioca (`AWS_BEARER_TOKEN_BEDROCK` ili `/connect`) imaju prednost nad autentifikacijom zasnovanom na profilu. Pogledajte [prednost autentifikacije](/docs/providers#authentication-precedence) za detalje.
|
||||
:::
|
||||
|
||||
[Saznajte više o konfiguraciji Amazon Bedrock](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### Teme
|
||||
|
||||
Postavite vašu UI temu u `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više ovdje](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### Agenti
|
||||
|
||||
Možete konfigurirati specijalizirane agente za određene zadatke putem opcije `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// Disable file modification tools for review-only agent
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Također možete definirati agente koristeći markdown datoteke u `~/.config/opencode/agents/` ili `.opencode/agents/`. [Saznajte više ovdje](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### Zadani agent
|
||||
|
||||
Možete postaviti zadanog agenta koristeći opciju `default_agent`. Ovo određuje koji se agent koristi kada nijedan nije eksplicitno specificiran.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
Zadani agent mora biti primarni agent (ne podagent). Ovo može biti ugrađeni agent kao što je `"build"` ili `"plan"`, ili [prilagođeni agent](/docs/agents) koji ste definirali. Ako navedeni agent ne postoji ili je podagent, OpenCode će se vratiti na `"build"` s upozorenjem.
|
||||
|
||||
Ova postavka se primjenjuje na sva sučelja: TUI, CLI (`opencode run`), desktop aplikaciju i GitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### Dijeljenje
|
||||
|
||||
Možete konfigurirati funkciju [share](/docs/share) putem opcije `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
Ovo prihvata:
|
||||
|
||||
- `"manual"` - Dozvoli ručno dijeljenje putem naredbi (podrazumevano)
|
||||
- `"auto"` - Automatski dijelite nove razgovore
|
||||
- `"disabled"` - Onemogući dijeljenje u potpunosti
|
||||
|
||||
Podrazumevano, dijeljenje je postavljeno na ručni način rada gdje trebate eksplicitno dijeliti razgovore pomoću naredbe `/share`.
|
||||
|
||||
---
|
||||
|
||||
### Naredbe
|
||||
|
||||
Možete konfigurirati prilagođene naredbe za ponavljanje zadataka putem opcije `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.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": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Također možete definirati naredbe koristeći markdown fajlove u `~/.config/opencode/commands/` ili `.opencode/commands/`. [Saznajte više ovdje](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### Prečice tipki
|
||||
|
||||
Prilagodite prečice tipki u `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više ovdje](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### Automatsko ažuriranje
|
||||
|
||||
OpenCode će automatski preuzeti sva nova ažuriranja kada se pokrene. Ovo možete onemogućiti opcijom `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
Ako ne želite ažuriranja, ali želite biti obaviješteni kada nova verzija bude dostupna, postavite `autoupdate` na `"notify"`.
|
||||
Imajte na umu da ovo funkcionira samo ako nije instalirano pomoću upravitelja paketa kao što je Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### Formateri
|
||||
|
||||
Možete konfigurirati formatere koda putem opcije `formatter`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o formaterima](/docs/formatters) ovdje.
|
||||
|
||||
---
|
||||
|
||||
### Dozvole
|
||||
|
||||
Prema zadanim postavkama, OpenCode **dopušta sve operacije** bez potrebe za eksplicitnim dopuštenjem. Ovo možete promijeniti koristeći opciju `permission`.
|
||||
|
||||
Na primjer, da osigurate da alati `edit` i `bash` zahtijevaju odobrenje korisnika:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o dozvolama](/docs/permissions) ovdje.
|
||||
|
||||
---
|
||||
|
||||
### Sažimanje
|
||||
|
||||
Možete kontrolirati ponašanje sažimanja konteksta putem opcije `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true,
|
||||
"reserved": 10000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - Automatski sažimanje sesije kada je kontekst pun (podrazumevano: `true`).
|
||||
- `prune` - Uklonite stare izlaze alata da sačuvate tokene (podrazumevano: `true`).
|
||||
- `reserved` - Token buffer za sažimanje. Ostavlja dovoljno prostora da se izbjegne prelijevanje tokom sažimanja
|
||||
|
||||
---
|
||||
|
||||
### Promatrač (Watcher)
|
||||
|
||||
Možete konfigurirati obrasce ignoriranja promatrača datoteka putem opcije `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Obrasci prate glob sintaksu. Koristite ovo da isključite bučne direktorije iz pregleda datoteka.
|
||||
|
||||
---
|
||||
|
||||
### MCP serveri
|
||||
|
||||
Možete konfigurirati MCP servere koje želite koristiti putem opcije `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više ovdje](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### Dodaci
|
||||
|
||||
[Plugins](/docs/plugins) proširuju OpenCode sa prilagođenim alatima, kukicama i integracijama.
|
||||
|
||||
Postavite datoteke dodataka u `.opencode/plugins/` ili `~/.config/opencode/plugins/`. Također možete učitati dodatke iz npm-a preko opcije `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više ovdje](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### Uputstva
|
||||
|
||||
Možete konfigurirati upute za model koji koristite putem opcije `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Ovo uzima niz putanja i glob uzoraka do datoteka instrukcija. [Saznajte više o pravilima ovdje](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### Onemogućeni provajderi
|
||||
|
||||
Možete onemogućiti dobavljače koji se automatski učitavaju preko opcije `disabled_providers`. Ovo je korisno kada želite spriječiti učitavanje određenih provajdera čak i ako su njihovi vjerodajnici dostupni.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
`disabled_providers` ima prioritet nad `enabled_providers`.
|
||||
:::
|
||||
|
||||
Opcija `disabled_providers` prihvata niz ID-ova provajdera. Kada je provajder onemogućen:
|
||||
|
||||
- Neće se učitati čak i ako su varijable okruženja postavljene.
|
||||
- Neće se učitati čak i ako su API ključevi konfigurirani putem `/connect` naredbe.
|
||||
- Modeli dobavljača se neće pojaviti na listi za odabir modela.
|
||||
|
||||
---
|
||||
|
||||
### Omogućeni provajderi
|
||||
|
||||
Možete odrediti listu dozvoljenih dobavljača putem opcije `enabled_providers`. Kada se podesi, samo navedeni provajderi će biti omogućeni, a svi ostali će biti zanemareni.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je korisno kada želite da ograničite OpenCode da koristi samo određene provajdere umjesto da ih onemogućavate jednog po jednog.
|
||||
|
||||
:::note
|
||||
`disabled_providers` ima prioritet nad `enabled_providers`.
|
||||
:::
|
||||
|
||||
Ako se provajder pojavljuje i u `enabled_providers` i `disabled_providers`, `disabled_providers` ima prioritet za kompatibilnost unatrag.
|
||||
|
||||
---
|
||||
|
||||
### Eksperimentalno
|
||||
|
||||
Ključ `experimental` sadrži opcije koje su u aktivnom razvoju.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
Eksperimentalne opcije nisu stabilne. Mogu se promijeniti ili ukloniti bez prethodne najave.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Varijable
|
||||
|
||||
Možete koristiti zamjenu varijabli u vašim konfiguracijskim datotekama da biste referencirali varijable okruženja i sadržaj datoteke.
|
||||
|
||||
---
|
||||
|
||||
### Varijable okruženja
|
||||
|
||||
Koristite `{env:VARIABLE_NAME}` za zamjenu varijabli okruženja:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako varijabla okruženja nije postavljena, bit će zamijenjena praznim nizom.
|
||||
|
||||
---
|
||||
|
||||
### Datoteke
|
||||
|
||||
Koristite `{file:path/to/file}` da zamijenite sadržaj fajla:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Putanja fajla mogu biti:
|
||||
|
||||
- U odnosu na direktorij konfiguracijskih datoteka
|
||||
- Ili apsolutne staze koje počinju sa `/` ili `~`
|
||||
|
||||
Ovo je korisno za:
|
||||
|
||||
- Pohranjivanje osjetljivih podataka poput API ključeva u odvojenim datotekama.
|
||||
- Uključujući velike datoteke instrukcija bez zatrpavanja vaše konfiguracije.
|
||||
- Dijeljenje zajedničkih isječaka konfiguracije u više konfiguracijskih datoteka.
|
||||
195
qimingcode/packages/web/src/content/docs/bs/custom-tools.mdx
Normal file
195
qimingcode/packages/web/src/content/docs/bs/custom-tools.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: Prilagođeni alati
|
||||
description: Kreirajte alate koje LLM može pozvati u otvorenom kodu.
|
||||
---
|
||||
|
||||
Prilagođeni alati su funkcije koje kreirate i koje LLM može pozvati tokom razgovora. Oni rade zajedno sa [ugrađenim opencode](/docs/tools) alatima kao što su `read`, `write` i `bash`.
|
||||
|
||||
---
|
||||
|
||||
## Kreiranje alata
|
||||
|
||||
Alati su definisani kao **TypeScript** ili **JavaScript** datoteke. Međutim, definicija alata može pozvati skripte napisane na **bilo kom jeziku** — TypeScript ili JavaScript se koriste samo za samu definiciju alata.
|
||||
|
||||
---
|
||||
|
||||
### Lokacija
|
||||
|
||||
Mogu se definisati:
|
||||
|
||||
- Lokalno postavljanjem u `.opencode/tools/` direktorij vašeg projekta.
|
||||
- Ili globalno, postavljanjem u `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### Struktura
|
||||
|
||||
Najlakši način za kreiranje alata je korištenje pomoćnika `tool()` koji pruža sigurnost tipa i validaciju.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
**ime datoteke** postaje **naziv alata**. Gore navedeno je kreirano pomoću `database` alata.
|
||||
|
||||
---
|
||||
|
||||
#### Više alata po datoteci
|
||||
|
||||
Također možete izvesti više alata iz jedne datoteke. Svaki izvoz postaje **poseban alat** pod nazivom **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Ovo stvara dva alata: `math_add` i `math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
#### Sukob imena s ugrađenim alatima
|
||||
|
||||
Prilagođeni alati su prepoznati po imenu. Ako prilagođeni alat koristi isto ime kao ugrađeni alat, prilagođeni alat ima prednost.
|
||||
|
||||
Na primjer, ova datoteka zamjenjuje ugrađeni `bash` alat:
|
||||
|
||||
```ts title=".opencode/tools/bash.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Restricted bash wrapper",
|
||||
args: {
|
||||
command: tool.schema.string(),
|
||||
},
|
||||
async execute(args) {
|
||||
return `blocked: ${args.command}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
:::note
|
||||
Preferirajte jedinstvena imena osim ako namjerno ne želite zamijeniti ugrađeni alat. Ako želite onemogućiti ugrađeni alat, ali ne i nadjačati ga, koristite [dozvole](/docs/permissions).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Argumenti
|
||||
|
||||
Možete koristiti `tool.schema`, što je samo [Zod](https://zod.dev), da definirate tipove argumenata.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
Također možete direktno uvesti [Zod](https://zod.dev) i vratiti običan objekt:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Kontekst
|
||||
|
||||
Alati primaju kontekst o trenutnoj sesiji:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Koristite `context.directory` za radni direktorij sesije.
|
||||
Koristite `context.worktree` za korijen git radnog stabla.
|
||||
|
||||
---
|
||||
|
||||
## Primjeri
|
||||
|
||||
### Pisanje alata u Python-u
|
||||
|
||||
Možete pisati svoje alate na bilo kom jeziku koji želite. Evo primjera koji zbraja dva broja koristeći Python.
|
||||
Prvo kreirajte alat kao Python skriptu:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
Zatim kreirajte definiciju alata koja ga poziva:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Ovdje koristimo [`Bun.$`](https://bun.com/docs/runtime/shell) uslužni program za pokretanje Python skripte.
|
||||
78
qimingcode/packages/web/src/content/docs/bs/ecosystem.mdx
Normal file
78
qimingcode/packages/web/src/content/docs/bs/ecosystem.mdx
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
title: Ekosistem
|
||||
description: Projekti i integracije izgrađeni uz OpenCode.
|
||||
---
|
||||
|
||||
Kolekcija projekata zajednice izgrađenih na OpenCode.
|
||||
|
||||
:::note
|
||||
Želite li na ovu listu dodati svoj OpenCode projekat? Pošaljite PR.
|
||||
:::
|
||||
|
||||
Također možete pogledati [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) i [opencode.cafe](https://opencode.cafe), zajednicu koja spaja ekosistem i zajednicu.
|
||||
|
||||
---
|
||||
|
||||
## Dodaci
|
||||
|
||||
| Ime | Opis |
|
||||
| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Automatski pokrenite OpenCode sesije u izoliranim Daytona sandboxovima uz git sinhronizaciju i preglede uživo |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Automatski ubacite Helicone zaglavlja sesije za grupisanje zahtjeva |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Automatski ubaci TypeScript/Svelte tipove u čitanje datoteka pomoću alata za pretraživanje |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Koristite svoju ChatGPT Plus/Pro pretplatu umjesto API kredita |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Koristite svoj postojeći Gemini plan umjesto API naplate |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Koristite besplatne modele Antigravity umjesto API naplate |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Izolacija devcontainer-a s više grana s plitkim klonovima i automatski dodijeljenim portovima |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth dodatak, s podrškom za Google pretraživanje i robusnijim API rukovanjem |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimizirajte korištenje tokena smanjenjem izlaza zastarjelih alata |
|
||||
| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Redigujte tajne/PII u rezervirana mjesta u stilu VibeGuarda prije LLM poziva; vratite lokalno |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Dodajte podršku za izvorno web pretraživanje za podržane provajdere sa stilom utemeljenim na Googleu |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Omogućuje AI agentima da pokreću pozadinske procese u PTY-u, šalju im interaktivni ulaz. |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Upute za neinteraktivne naredbe ljuske - sprječava visi od TTY ovisnih operacija |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Pratite upotrebu OpenCode sa Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Očistite tabele umanjenja vrijednosti koje su izradili LLM |
|
||||
| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply uređivanje, WarpGrep pretraga koda i kompresija konteksta putem Morph-a |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Pozadinski agenti, unapred izgrađeni LSP/AST/MCP alati, kurirani agenti, kompatibilni sa Claude Code |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Obavještenja na radnoj površini i zvučna upozorenja za OpenCode sesije |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Obavještenja na radnoj površini i zvučna upozorenja za dozvole, završetak i događaje greške |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Automatsko imenovanje Zellij sesije na bazi OpenCode konteksta |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Dozvolite OpenCode agentima da lijeno učitavaju upite na zahtjev uz otkrivanje vještina i ubrizgavanje |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Trajna memorija kroz sesije koristeći Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktivni pregled plana s vizualnim napomenama i privatnim/offline dijeljenjem |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Proširite opencode /komande u moćan sistem orkestracije sa granularnom kontrolom toka |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planirajte ponavljajuće poslove koristeći launchd (Mac) ili systemd (Linux) sa cron sintaksom |
|
||||
| [micode](https://github.com/vtemian/micode) | Strukturirana Brainstorm → Plan → Implementacija toka rada uz kontinuitet sesije |
|
||||
| [octto](https://github.com/vtemian/octto) | Interaktivno korisničko sučelje pretraživača za AI brainstorming sa obrascima za više pitanja |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Pozadinski agenti u stilu Claudea s asinhroniziranim delegiranjem i postojanošću konteksta |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notifikacije izvornog OS-a za OpenCode – znajte kada se zadaci dovrše |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Uvezeni višeagentni orkestracijski pojas – 16 komponenti, jedna instalacija |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Git radna stabla bez trenja za OpenCode |
|
||||
| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Pratite i otklanjajte greške svojih AI agenata uz Sentry AI Monitoring |
|
||||
|
||||
---
|
||||
|
||||
## Projekti
|
||||
|
||||
| Ime | Opis |
|
||||
| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | Discord bot za kontrolu OpenCode sesija, izgrađen na SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim dodatak za upite svjestan uređivača, izgrađen na API |
|
||||
| [portal](https://github.com/hosenur/portal) | Mobilni korisnički interfejs za OpenCode preko Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Predložak za izgradnju OpenCode dodataka |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim frontend za opencode - terminal baziran AI agent za kodiranje |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK dobavljač za korištenje OpenCode putem @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web / Desktop App i VS Code Extension za OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian dodatak koji ugrađuje OpenCode u Obsidian-ov UI |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | Alternativa otvorenog koda Claudeu Coworku, pokretana pomoću OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | OpenCode menadžer ekstenzija sa prenosivim, izolovanim profilima. |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop, Web, Mobile i Remote Client aplikacija za OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Agenti
|
||||
|
||||
| Ime | Opis |
|
||||
| ----------------------------------------------------------------- | --------------------------------------------------------------- |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | Modularni AI agenti i komande za strukturirani razvoj |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfiguracije, upiti, agenti i dodaci za poboljšane tokove rada |
|
||||
165
qimingcode/packages/web/src/content/docs/bs/enterprise.mdx
Normal file
165
qimingcode/packages/web/src/content/docs/bs/enterprise.mdx
Normal file
@@ -0,0 +1,165 @@
|
||||
---
|
||||
title: Za preduzeća
|
||||
description: Sigurno korištenje OpenCode u vašoj organizaciji.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise je za organizacije koje žele osigurati da njihov kod i podaci nikada ne napuštaju njihovu infrastrukturu. To omogućava centralizovana konfiguracija koja se integriše s vašim SSO-om i internim AI gateway-om.
|
||||
|
||||
:::note
|
||||
OpenCode ne pohranjuje nijedan vaš kod ili kontekstualne podatke.
|
||||
:::
|
||||
|
||||
Da započnete s OpenCode Enterprise:
|
||||
|
||||
1. Uradite interni probni period sa svojim timom.
|
||||
2. **<a href={email}>Kontaktirajte nas</a>** da razgovaramo o cijenama i opcijama implementacije.
|
||||
|
||||
---
|
||||
|
||||
## Proba
|
||||
|
||||
OpenCode je otvorenog koda i ne pohranjuje vaš kod niti kontekstualne podatke, tako da vaši developeri mogu jednostavno [započeti](/docs/) i provesti probu.
|
||||
|
||||
---
|
||||
|
||||
### Rukovanje podacima
|
||||
|
||||
**OpenCode ne pohranjuje vaš kod ni kontekstualne podatke.** Sva obrada se odvija lokalno ili putem direktnih API poziva vašem AI provajderu.
|
||||
|
||||
To znači da, sve dok koristite provajdera kojem vjerujete ili interni AI gateway, OpenCode možete koristiti sigurno.
|
||||
|
||||
Jedina iznimka je opcionalna funkcija `/share`.
|
||||
|
||||
---
|
||||
|
||||
#### Dijeljenje razgovora
|
||||
|
||||
Ako korisnik uključi funkciju `/share`, razgovor i povezani podaci šalju se servisu koji koristimo za hosting ovih share stranica na opencode.ai.
|
||||
|
||||
Podaci se trenutno serviraju kroz edge mrežu našeg CDN-a i keširaju se blizu korisnika.
|
||||
|
||||
Preporučujemo da ovo onemogućite tokom probe.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte više o dijeljenju](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### Vlasništvo koda
|
||||
|
||||
**Vi posjedujete sav kod koji OpenCode proizvede.** Nema ograničenja licenciranja niti zahtjeva za vlasništvo.
|
||||
|
||||
---
|
||||
|
||||
## Cijene
|
||||
|
||||
Koristimo model naplate po sjedištu za OpenCode Enterprise. Ako imate vlastiti LLM gateway, ne naplaćujemo korištene tokene. Za više detalja o cijenama i opcijama implementacije, **<a href={email}>kontaktirajte nas</a>**.
|
||||
|
||||
---
|
||||
|
||||
## Postavljanje
|
||||
|
||||
Nakon što završite probni period i spremni ste koristiti OpenCode u svojoj organizaciji, možete **<a href={email}>kontaktirati nas</a>** da razgovaramo o cijenama i opcijama implementacije.
|
||||
|
||||
---
|
||||
|
||||
### Centralna konfiguracija
|
||||
|
||||
Možemo postaviti OpenCode da koristi jednu centralnu konfiguraciju za cijelu organizaciju.
|
||||
|
||||
Ta centralizovana konfiguracija može se integrisati s vašim SSO provajderom i osigurava da svi korisnici pristupaju samo vašem internom AI gateway-u.
|
||||
|
||||
---
|
||||
|
||||
### SSO integracija
|
||||
|
||||
Kroz centralnu konfiguraciju, OpenCode se može integrisati sa SSO provajderom vaše organizacije za autentifikaciju.
|
||||
|
||||
To omogućava OpenCode da dobije vjerodajnice za interni AI gateway kroz vaš postojeći sistem upravljanja identitetom.
|
||||
|
||||
---
|
||||
|
||||
### Interni AI gateway
|
||||
|
||||
Uz centralnu konfiguraciju, OpenCode se može podesiti da koristi samo vaš interni AI gateway.
|
||||
|
||||
Također možete onemogućiti sve druge AI provajdere, čime osiguravate da svi zahtjevi prolaze kroz odobrenu infrastrukturu vaše organizacije.
|
||||
|
||||
---
|
||||
|
||||
### Samostalno hostovanje
|
||||
|
||||
Iako preporučujemo onemogućavanje share stranica kako biste osigurali da podaci nikada ne napuštaju vašu organizaciju, možemo vam pomoći i da ih samostalno hostujete na vlastitoj infrastrukturi.
|
||||
|
||||
Ovo je trenutno na našoj mapi puta. Ako ste zainteresovani, **<a href={email}>javite nam</a>**.
|
||||
|
||||
---
|
||||
|
||||
## Često postavljana pitanja
|
||||
|
||||
<details>
|
||||
<summary>Šta je OpenCode Enterprise?</summary>
|
||||
|
||||
OpenCode Enterprise je za organizacije koje žele osigurati da njihov kod i podaci nikada ne napuštaju njihovu infrastrukturu. To omogućava centralizovana konfiguracija koja se integriše s vašim SSO-om i internim AI gateway-om.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Kako započeti s OpenCode Enterprise?</summary>
|
||||
|
||||
Jednostavno započnite internu probu sa svojim timom. OpenCode po defaultu ne pohranjuje vaš kod ni kontekstualne podatke, što olakšava početak.
|
||||
|
||||
Zatim **<a href={email}>kontaktirajte nas</a>** da razgovaramo o cijenama i opcijama implementacije.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Kako funkcionišu enterprise cijene?</summary>
|
||||
|
||||
Nudimo enterprise cijene po sjedištu. Ako imate vlastiti LLM gateway, ne naplaćujemo korištene tokene. Za više detalja, **<a href={email}>kontaktirajte nas</a>** za prilagođenu ponudu prema potrebama vaše organizacije.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Jesu li moji podaci sigurni uz OpenCode Enterprise?</summary>
|
||||
|
||||
Da. OpenCode ne pohranjuje vaš kod niti kontekstualne podatke. Sva obrada se odvija lokalno ili putem direktnih API poziva vašem AI provajderu. Uz centralnu konfiguraciju i SSO integraciju, vaši podaci ostaju sigurni unutar infrastrukture vaše organizacije.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Možemo li koristiti vlastiti privatni NPM registar?</summary>
|
||||
|
||||
OpenCode podržava privatne npm registre kroz Bunovu izvornu podršku za `.npmrc` datoteku. Ako vaša organizacija koristi privatni registar, kao što je JFrog Artifactory, Nexus ili slično, osigurajte da su developeri autentifikovani prije pokretanja OpenCode.
|
||||
|
||||
Da postavite autentifikaciju s privatnim registrom:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
Ovo kreira `~/.npmrc` s detaljima za autentifikaciju. OpenCode će to automatski prepoznati.
|
||||
|
||||
:::caution
|
||||
Morate biti prijavljeni na privatni registar prije pokretanja OpenCode.
|
||||
:::
|
||||
|
||||
Alternativno, možete ručno konfigurisati `.npmrc` datoteku:
|
||||
|
||||
```bash title="~/.npmrc"
|
||||
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
|
||||
```
|
||||
|
||||
Developeri moraju biti prijavljeni na privatni registar prije pokretanja OpenCode kako bi se paketi mogli instalirati iz vašeg enterprise registra.
|
||||
|
||||
</details>
|
||||
124
qimingcode/packages/web/src/content/docs/bs/formatters.mdx
Normal file
124
qimingcode/packages/web/src/content/docs/bs/formatters.mdx
Normal file
@@ -0,0 +1,124 @@
|
||||
---
|
||||
title: Formateri
|
||||
description: OpenCode koristi formatere specifične za jezik.
|
||||
---
|
||||
|
||||
OpenCode automatski formatira datoteke nakon što su napisane ili uređene pomoću formatera specifičnih za jezik. Ovo osigurava da kod koji se generira prati stilove koda vašeg projekta.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađeni
|
||||
|
||||
OpenCode dolazi sa nekoliko ugrađenih formatera za popularne jezike i okvire. Ispod je lista formatera, podržanih ekstenzija datoteka i naredbi ili opcija konfiguracije koje su mu potrebne.
|
||||
| Formatter | Ekstenzije | Zahtjevi
|
||||
|-------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | `gofmt` komanda dostupna |
|
||||
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` komanda dostupna |
|
||||
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml i [više](https://prettier.io/docs/en/index.html) | `prettier` zavisnost u `package.json` |
|
||||
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml i [više](https://biomejs.dev/) | `biome.json(c)` konfiguracijski fajl |
|
||||
| zig | .zig, .zon | `zig` komanda dostupna |
|
||||
| clang-format | .c, .cpp, .h, .hpp, .ino i [više](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` konfiguracijski fajl |
|
||||
| ktlint | .kt, .kts | `ktlint` komanda dostupna |
|
||||
| ruff | .py, .pyi | `ruff` komanda dostupna sa konfiguracijom |
|
||||
| rustfmt | .rs | `rustfmt` komanda dostupna |
|
||||
| cargofmt | .rs | `cargo fmt` komanda dostupna |
|
||||
| uv | .py, .pyi | `uv` komanda dostupna || rubocop | .rb, .rake, .gemspec, .ru | `rubocop` komanda dostupna |
|
||||
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` komanda dostupna |
|
||||
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` komanda dostupna |
|
||||
| air | .R | `air` komanda dostupna |
|
||||
| dart | .dart | `dart` komanda dostupna |
|
||||
| dfmt | .d | `dfmt` komanda dostupna |
|
||||
| ocamlformat | .ml, .mli | `ocamlformat` komanda dostupna i `.ocamlformat` konfiguracioni fajl |
|
||||
| terraform | .tf, .tfvars | `terraform` komanda dostupna |
|
||||
| gleam | .bleam | `gleam` komanda dostupna |
|
||||
| nixfmt | .nix | `nixfmt` komanda dostupna |
|
||||
| shfmt | .sh, .bash | `shfmt` komanda dostupna |
|
||||
| pint | .php | `laravel/pint` zavisnost u `composer.json` || oxfmt (Eksperimentalno) | .js, .jsx, .ts, .tsx | `oxfmt` zavisnost u `package.json` i [eksperimentalna env varijabla flag](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | `ormolu` komanda dostupna |
|
||||
Dakle, ako vaš projekat ima `prettier` u vašem `package.json`, OpenCode će ga automatski koristiti.
|
||||
|
||||
---
|
||||
|
||||
## Kako radi
|
||||
|
||||
Kada OpenCode piše ili uređuje datoteku, on:
|
||||
|
||||
1. Provjerava ekstenziju datoteke prema svim omogućenim formaterima.
|
||||
2. Pokreće odgovarajuću naredbu za formatiranje na datoteci.
|
||||
3. Automatski primjenjuje promjene formatiranja.
|
||||
Ovaj proces se događa u pozadini, osiguravajući da se vaši stilovi koda održavaju bez ikakvih ručnih koraka.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete prilagoditi formatere kroz `formatter` odjeljak u vašoj OpenCode konfiguraciji.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
Svaka konfiguracija formatera podržava sljedeće:
|
||||
| Svojstvo | Vrsta | Opis
|
||||
|------------- | -------- | ------------------------------------------------------- |
|
||||
| `disabled` | boolean | Postavite ovo na `true` da onemogućite formater |
|
||||
| `command` | string[] | Naredba za pokretanje za formatiranje |
|
||||
| `environment` | objekt | Varijable okruženja koje treba postaviti prilikom pokretanja formatera |
|
||||
| `extensions` | string[] | Ekstenzije datoteka koje ovaj formater treba da obrađuje |
|
||||
Pogledajmo neke primjere.
|
||||
|
||||
---
|
||||
|
||||
### Onemogućavanje formatera
|
||||
|
||||
Da onemogućite **sve** formatere globalno, postavite `formatter` na `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
Da onemogućite **specifični** formater, postavite `disabled` na `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prilagođeni formateri
|
||||
|
||||
Možete nadjačati ugrađene formatere ili dodati nove navođenjem naredbe, varijabli okruženja i ekstenzija datoteke:
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
},
|
||||
"custom-markdown-formatter": {
|
||||
"command": ["deno", "fmt", "$FILE"],
|
||||
"extensions": [".md"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**`$FILE` čuvar mjesta** u naredbi će biti zamijenjen putanjom do datoteke koja se formatira.
|
||||
311
qimingcode/packages/web/src/content/docs/bs/github.mdx
Normal file
311
qimingcode/packages/web/src/content/docs/bs/github.mdx
Normal file
@@ -0,0 +1,311 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: Koristite OpenCode u GitHub problemima i zahtjevima za povlačenjem.
|
||||
---
|
||||
|
||||
OpenCode se integriše sa vašim GitHub tokovom rada. Spomenite `/opencode` ili `/oc` u svom komentaru i OpenCode će izvršiti zadatke unutar vašeg GitHub Actions runnera.
|
||||
|
||||
---
|
||||
|
||||
## Funkcije
|
||||
|
||||
- **Problemi trijaže**: Zamolite OpenCode da ispita problem i objasni vam ga.
|
||||
- **Popravi i implementiraj**: Zamolite OpenCode da popravi problem ili implementira funkciju. I radit će u novoj poslovnici i dostavljati PR sa svim promjenama.
|
||||
- **Secure**: OpenCode se pokreće unutar pokretača vašeg GitHub-a.
|
||||
|
||||
---
|
||||
|
||||
## Instalacija
|
||||
|
||||
Pokrenite sljedeću naredbu u projektu koji se nalazi u GitHub repo:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Ovo će vas provesti kroz instalaciju GitHub aplikacije, kreiranje toka posla i postavljanje tajni.
|
||||
|
||||
---
|
||||
|
||||
### Ručno podešavanje
|
||||
|
||||
Ili ga možete postaviti ručno.
|
||||
|
||||
1. **Instalirajte GitHub aplikaciju**
|
||||
Idite na [**github.com/apps/opencodegent**](https://github.com/apps/opencodegent). Uvjerite se da je instaliran na ciljnom spremištu.
|
||||
2. **Dodajte radni tok**
|
||||
Dodajte sljedeći fajl toka posla u `.github/workflows/opencode.yml` u svoj repo. Obavezno postavite odgovarajuće `model` i potrebne API ključeve u `env`.
|
||||
|
||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
||||
name: opencode
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
if: |
|
||||
contains(github.event.comment.body, '/oc') ||
|
||||
contains(github.event.comment.body, '/opencode')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
# share: true
|
||||
# github_token: xxxx
|
||||
```
|
||||
|
||||
3. **Sačuvaj API ključeve u tajne**
|
||||
U **postavkama** organizacije ili projekta proširite **Tajne i varijable** na lijevoj strani i odaberite **Radnje**. I dodajte potrebne API ključeve.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
- `model`: Model za korištenje s OpenCode. Uzima format `provider/model`. Ovo je **obavezno**.
|
||||
- `agent`: Agent za korištenje. Mora biti primarni agent. Vraća se na `default_agent` iz konfiguracije ili `"build"` ako nije pronađen.
|
||||
- `share`: Da li dijeliti OpenCode sesiju. Podrazumevano je **true** za javna spremišta.
|
||||
- `prompt`: Opcioni prilagođeni upit za nadjačavanje zadanog ponašanja. Koristite ovo da prilagodite kako OpenCode obrađuje zahtjeve.
|
||||
- `token`: Opcionalni GitHub pristupni token za izvođenje operacija kao što su kreiranje komentara, upisivanje promjena i otvaranje zahtjeva za povlačenjem. OpenCode prema zadanim postavkama koristi token za pristup instalaciji iz aplikacije OpenCode GitHub, tako da se urezivanje, komentari i zahtjevi za povlačenjem pojavljuju kao da dolaze iz aplikacije.
|
||||
Alternativno, možete koristiti GitHub Action runner [ugrađeni `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) bez instaliranja OpenCode GitHub aplikacije. Samo se pobrinite da date potrebna odobrenja u svom toku rada:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
Također možete koristiti [Personal Access Tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) ako želite.
|
||||
|
||||
---
|
||||
|
||||
## Podržani događaji
|
||||
|
||||
OpenCode se može pokrenuti sljedećim GitHub događajima:
|
||||
| Vrsta događaja | Pokrenuo | Detalji
|
||||
|----------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | Komentirajte problem ili PR | Navedite `/opencode` ili `/oc` u svom komentaru. OpenCode čita kontekst i može kreirati grane, otvarati PR-ove ili odgovarati. |
|
||||
| `pull_request_review_comment` | Komentirajte određene linije koda u PR-u | Navedite `/opencode` ili `/oc` dok pregledavate kod. OpenCode prima putanju datoteke, brojeve redova i kontekst razlike. |
|
||||
| `issues` | Broj otvoren ili uređen | Automatski pokrenite OpenCode kada se problemi kreiraju ili modificiraju. Zahtijeva `prompt` unos. |
|
||||
| `pull_request` | PR otvoren ili ažuriran | Automatski pokrenite OpenCode kada se PR-ovi otvore, sinkroniziraju ili ponovo otvore. Korisno za automatske recenzije. |
|
||||
| `schedule` | Cron baziran raspored | Pokrenite OpenCode prema rasporedu. Zahtijeva `prompt` unos. Izlaz ide u dnevnike i PR-ove (nema problema za komentarisanje). |
|
||||
| `workflow_dispatch` | Ručni okidač iz GitHub korisničkog sučelja | Aktivirajte OpenCode na zahtjev preko kartice Akcije. Zahtijeva `prompt` unos. Izlaz ide u dnevnike i PR-ove. |
|
||||
|
||||
### Primjer rasporeda
|
||||
|
||||
Pokrenite OpenCode po rasporedu za obavljanje automatiziranih zadataka:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Scheduled OpenCode Task
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Every Monday at 9am UTC
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review the codebase for any TODO comments and create a summary.
|
||||
If you find issues worth addressing, open an issue to track them.
|
||||
```
|
||||
|
||||
Za zakazane događaje, unos `prompt` je **potreban** jer nema komentara za izvlačenje instrukcija. Planirani tokovi posla se pokreću bez korisničkog konteksta za provjeru dozvola, tako da tok posla mora odobriti `contents: write` i `pull-requests: write` ako očekujete da će OpenCode kreirati grane ili PR-ove.
|
||||
|
||||
---
|
||||
|
||||
### Primjer zahtjeva za povlačenjem
|
||||
|
||||
Automatski pregledajte PR-ove kada se otvore ili ažuriraju:
|
||||
|
||||
```yaml title=".github/workflows/opencode-review.yml"
|
||||
name: opencode-review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
use_github_token: true
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
Za `pull_request` događaje, ako nije naveden `prompt`, OpenCode podrazumevano pregledava zahtjev za povlačenjem.
|
||||
|
||||
---
|
||||
|
||||
### Primjer trijaže problema
|
||||
|
||||
Automatski triažirajte nove probleme. Ovaj primjer filtrira na račune starije od 30 dana radi smanjenja neželjene pošte:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Issue Triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Check account age
|
||||
id: check
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const user = await github.rest.users.getByUsername({
|
||||
username: context.payload.issue.user.login
|
||||
});
|
||||
const created = new Date(user.data.created_at);
|
||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
||||
return days >= 30;
|
||||
result-encoding: string
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
if: steps.check.outputs.result == 'true'
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
if: steps.check.outputs.result == 'true'
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review this issue. If there's a clear fix or relevant docs:
|
||||
- Provide documentation links
|
||||
- Add error handling guidance for code examples
|
||||
Otherwise, do not comment.
|
||||
```
|
||||
|
||||
Za `issues` događaje, `prompt` unos je **potreban** jer nema komentara za izvlačenje instrukcija.
|
||||
|
||||
---
|
||||
|
||||
## Prilagođeni upiti
|
||||
|
||||
Zaobiđite zadani prompt da biste prilagodili ponašanje OpenCode za vaš tok posla.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
Ovo je korisno za provođenje specifičnih kriterija pregleda, standarda kodiranja ili fokusnih područja relevantnih za vaš projekt.
|
||||
|
||||
---
|
||||
|
||||
## Primjeri
|
||||
|
||||
Evo nekoliko primjera kako možete koristiti OpenCode u GitHub.
|
||||
|
||||
- **Objasnite problem**
|
||||
Dodajte ovaj komentar u GitHub izdanje.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode će pročitati cijelu temu, uključujući sve komentare, i odgovoriti s jasnim objašnjenjem.
|
||||
|
||||
- **Popravi problem**
|
||||
U izdanju na GitHub-u recite:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
I OpenCode će kreirati novu granu, implementirati promjene i otvoriti PR sa promjenama.
|
||||
|
||||
- **Pregledajte PR-ove i izvršite izmjene**
|
||||
Ostavite sljedeći komentar na GitHub PR-u.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
OpenCode će implementirati traženu promjenu i posvetiti je istom PR-u.
|
||||
|
||||
- **Pregledajte određene linije koda**
|
||||
Ostavite komentar direktno na linije koda u PR kartici "Files". OpenCode automatski detektuje datoteku, brojeve redova i kontekst razlike kako bi pružio precizne odgovore.
|
||||
|
||||
```
|
||||
[Comment on specific lines in Files tab]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
Kada komentarišete određene linije, OpenCode prima:
|
||||
|
||||
- Tačan fajl se pregleda
|
||||
- Specifične linije koda
|
||||
- Okolni diff kontekst
|
||||
- Informacije o broju linije
|
||||
Ovo omogućava više ciljanih zahtjeva bez potrebe za ručno specificiranjem putanja datoteka ili brojeva linija.
|
||||
188
qimingcode/packages/web/src/content/docs/bs/gitlab.mdx
Normal file
188
qimingcode/packages/web/src/content/docs/bs/gitlab.mdx
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: Koristite OpenCode u GitLab problemima i zahtjevima za spajanje.
|
||||
---
|
||||
|
||||
OpenCode se integriše sa vašim GitLab radnim tokom kroz vaš GitLab CI/CD cevovod ili sa GitLab Duo.
|
||||
U oba slučaja, OpenCode će se pokrenuti na vašim GitLab pokretačima.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
OpenCode radi u redovnom GitLab cevovodu. Možete ga ugraditi u cjevovod kao [CI komponenta](https://docs.gitlab.com/ee/ci/components/)
|
||||
Ovdje koristimo CI/CD komponentu kreiranu u zajednici za OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### Funkcije
|
||||
|
||||
- **Koristite prilagođenu konfiguraciju po poslu**: Konfigurirajte OpenCode s prilagođenim konfiguracijskim direktorijem, na primjer `./config/#custom-directory` da omogućite ili onemogućite funkcionalnost po OpenCode pozivanju.
|
||||
- **Minimalno podešavanje**: CI komponenta postavlja OpenCode u pozadini, samo trebate kreirati OpenCode konfiguraciju i početnu prompt.
|
||||
- **Fleksibilno**: CI komponenta podržava nekoliko ulaza za prilagođavanje njenog ponašanja
|
||||
|
||||
---
|
||||
|
||||
### Podešavanje
|
||||
|
||||
1. Sačuvajte JSON za autentifikaciju OpenCode kao CI varijable okruženja tipa datoteke pod **Postavke** > **CI/CD** > **Varijable**. Obavezno ih označite kao "Maskirane i skrivene".
|
||||
2. Dodajte sljedeće u svoju `.gitlab-ci.yml` datoteku.
|
||||
|
||||
```yaml title=".gitlab-ci.yml"
|
||||
include:
|
||||
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
|
||||
inputs:
|
||||
config_dir: ${CI_PROJECT_DIR}/opencode-config
|
||||
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
|
||||
command: optional-custom-command
|
||||
message: "Your prompt here"
|
||||
```
|
||||
|
||||
Za više unosa i slučajeva upotrebe [pogledajte dokumente docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) za ovu komponentu.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
OpenCode se integriše sa vašim GitLab tokovom rada.
|
||||
Spomenite `@opencode` u komentaru i OpenCode će izvršiti zadatke unutar vašeg GitLab CI cevovoda.
|
||||
|
||||
---
|
||||
|
||||
### Funkcije
|
||||
|
||||
- **Problemi trijaže**: Zamolite OpenCode da ispita problem i objasni vam ga.
|
||||
- **Popravi i implementiraj**: Zamolite OpenCode da popravi problem ili implementira funkciju.
|
||||
To će kreirati novu granu i pokrenuti zahtjev za spajanje s promjenama.
|
||||
- **Secure**: OpenCode radi na vašim GitLab pokretačima.
|
||||
|
||||
---
|
||||
|
||||
### Podešavanje
|
||||
|
||||
OpenCode radi u vašem GitLab CI/CD cevovodu, evo šta će vam trebati da ga postavite:
|
||||
:::tip
|
||||
Pogledajte [**GitLab dokumente**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) za ažurirane upute.
|
||||
:::
|
||||
|
||||
1. Konfigurirajte svoje GitLab okruženje
|
||||
2. Postavite CI/CD
|
||||
3. Nabavite API ključ dobavljača AI modela
|
||||
4. Kreirajte nalog usluge
|
||||
5. Konfigurirajte CI/CD varijable
|
||||
6. Kreirajte konfiguracijski fajl toka, evo primjera:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Konfiguracija toka</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Installing opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Installing glab"
|
||||
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
|
||||
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
|
||||
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
|
||||
- apt-get install --yes glab
|
||||
- echo "Configuring glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Creating OpenCode auth configuration"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configuring git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testing glab"
|
||||
- glab issue list
|
||||
- echo "Running OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
You are an AI assistant helping with GitLab operations.
|
||||
|
||||
Context: $AI_FLOW_CONTEXT
|
||||
Task: $AI_FLOW_INPUT
|
||||
Event: $AI_FLOW_EVENT
|
||||
|
||||
Please execute the requested task using the available GitLab tools.
|
||||
Be thorough in your analysis and provide clear explanations.
|
||||
|
||||
<important>
|
||||
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
|
||||
|
||||
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
|
||||
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Checking for git changes and pushing if any exist"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Git changes detected, adding and pushing..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "No staged changes to commit"
|
||||
else
|
||||
echo "Committing changes to branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Codex changes"
|
||||
echo "Pushing changes up to $CI_WORKLOAD_REF"
|
||||
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
|
||||
echo "Changes successfully pushed"
|
||||
fi
|
||||
else
|
||||
echo "No git changes detected, skipping push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Možete vidjeti [GitLab CLI agenti docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) za detaljna uputstva.
|
||||
|
||||
---
|
||||
|
||||
### Primjeri
|
||||
|
||||
Evo nekoliko primjera kako možete koristiti OpenCode u GitLab.
|
||||
:::tip
|
||||
Možete konfigurirati da koristite drugu frazu okidača od `@opencode`.
|
||||
:::
|
||||
|
||||
- **Objasnite problem**
|
||||
Dodajte ovaj komentar u izdanje GitLaba.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode će pročitati problem i odgovoriti jasnim objašnjenjem.
|
||||
|
||||
- **Reši problem**
|
||||
U izdanju GitLaba recite:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
OpenCode će kreirati novu granu, implementirati promjene i otvoriti zahtjev za spajanje s promjenama.
|
||||
|
||||
- **Pregledajte zahtjeve za pridruživanje**
|
||||
Ostavite sljedeći komentar na zahtjev za spajanje GitLab-a.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
OpenCode će pregledati zahtjev za spajanje i dati povratne informacije.
|
||||
196
qimingcode/packages/web/src/content/docs/bs/go.mdx
Normal file
196
qimingcode/packages/web/src/content/docs/bs/go.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: Go
|
||||
description: Povoljna pretplata za otvorene modele za programiranje.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Go je povoljna pretplata — **$5 za vaš prvi mjesec**, a zatim **$10/mjesečno** — koja vam pruža pouzdan pristup popularnim otvorenim modelima za programiranje.
|
||||
|
||||
:::note
|
||||
OpenCode Go je trenutno u beta fazi.
|
||||
:::
|
||||
|
||||
Go radi kao bilo koji drugi provajder u OpenCode-u. Pretplatite se na OpenCode Go i
|
||||
dobijete svoj API ključ. On je **potpuno opcionalan** i ne morate ga koristiti da
|
||||
biste koristili OpenCode.
|
||||
|
||||
Dizajniran je prvenstveno za međunarodne korisnike, sa modelima hostovanim u SAD-u, EU i Singapuru za stabilan globalni pristup.
|
||||
|
||||
---
|
||||
|
||||
## Pozadina
|
||||
|
||||
Otvoreni modeli su postali zaista dobri. Sada dostižu performanse bliske
|
||||
vlasničkim modelima za zadatke programiranja. A pošto ih mnogi provajderi mogu nuditi
|
||||
konkurentno, obično su znatno jeftiniji.
|
||||
|
||||
Međutim, dobiti pouzdan pristup s niskom latencijom do njih može biti teško. Provajderi
|
||||
variraju u pogledu kvaliteta i dostupnosti.
|
||||
|
||||
:::tip
|
||||
Testirali smo odabranu grupu modela i provajdera koji dobro rade sa OpenCode-om.
|
||||
:::
|
||||
|
||||
Da bismo to popravili, uradili smo nekoliko stvari:
|
||||
|
||||
1. Testirali smo odabranu grupu otvorenih modela i razgovarali s njihovim timovima o tome kako da ih
|
||||
najbolje pokrenemo.
|
||||
2. Zatim smo sarađivali s nekoliko provajdera kako bismo bili sigurni da se oni ispravno
|
||||
poslužuju.
|
||||
3. Na kraju smo benchmarkovali kombinaciju modela/provajdera i osmislili
|
||||
listu koju rado preporučujemo.
|
||||
|
||||
OpenCode Go vam daje pristup ovim modelima za **$5 za vaš prvi mjesec**, a zatim **$10/mjesečno**.
|
||||
|
||||
---
|
||||
|
||||
## Kako funkcioniše
|
||||
|
||||
OpenCode Go radi kao bilo koji drugi provajder u OpenCode-u.
|
||||
|
||||
1. Prijavite se na **<a href={console}>OpenCode Zen</a>**, pretplatite se na Go i
|
||||
kopirajte svoj API ključ.
|
||||
2. Pokrenite komandu `/connect` u TUI-ju, odaberite `OpenCode Go` i zalijepite
|
||||
svoj API ključ.
|
||||
3. Pokrenite `/models` u TUI-ju da vidite listu modela dostupnih kroz Go.
|
||||
|
||||
:::note
|
||||
Samo jedan član po radnom prostoru (workspace) može se pretplatiti na OpenCode Go.
|
||||
:::
|
||||
|
||||
Trenutna lista modela uključuje:
|
||||
|
||||
- **GLM-5**
|
||||
- **GLM-5.1**
|
||||
- **Kimi K2.5**
|
||||
- **Kimi K2.6**
|
||||
- **MiMo-V2-Pro**
|
||||
- **MiMo-V2-Omni**
|
||||
- **MiMo-V2.5-Pro**
|
||||
- **MiMo-V2.5**
|
||||
- **MiniMax M2.5**
|
||||
- **Qwen3.5 Plus**
|
||||
- **Qwen3.6 Plus**
|
||||
- **MiniMax M2.7**
|
||||
- **DeepSeek V4 Pro**
|
||||
- **DeepSeek V4 Flash**
|
||||
|
||||
Lista modela se može mijenjati dok testiramo i dodajemo nove.
|
||||
|
||||
---
|
||||
|
||||
## Ograničenja upotrebe
|
||||
|
||||
OpenCode Go uključuje sljedeća ograničenja:
|
||||
|
||||
- **Ograničenje od 5 sati** — $12 potrošnje
|
||||
- **Sedmično ograničenje** — $30 potrošnje
|
||||
- **Mjesečno ograničenje** — $60 potrošnje
|
||||
|
||||
Ograničenja su definisana u dolarskoj vrijednosti. To znači da vaš stvarni broj zahtjeva zavisi od modela koji koristite. Jeftiniji modeli poput MiniMax M2.5 omogućavaju više zahtjeva, dok skuplji modeli poput GLM-5.1 omogućavaju manje.
|
||||
|
||||
Tabela ispod pruža procijenjeni broj zahtjeva na osnovu tipičnih obrazaca korištenja Go pretplate:
|
||||
|
||||
| Model | zahtjeva na 5 sati | zahtjeva sedmično | zahtjeva mjesečno |
|
||||
| ------------------ | ------------------ | ----------------- | ----------------- |
|
||||
| GLM-5.1 | 880 | 2,150 | 4,300 |
|
||||
| GLM-5 | 1,150 | 2,880 | 5,750 |
|
||||
| Kimi K2.5 | 1,850 | 4,630 | 9,250 |
|
||||
| Kimi K2.6 | 1,150 | 2,880 | 5,750 |
|
||||
| MiMo-V2-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2-Omni | 2,150 | 5,450 | 10,900 |
|
||||
| MiMo-V2.5-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2.5 (≤ 256K) | 2,150 | 5,450 | 10,900 |
|
||||
| MiniMax M2.7 | 3,400 | 8,500 | 17,000 |
|
||||
| MiniMax M2.5 | 6,300 | 15,900 | 31,800 |
|
||||
| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 |
|
||||
| Qwen3.5 Plus | 10,200 | 25,200 | 50,500 |
|
||||
| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 |
|
||||
| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 |
|
||||
|
||||
Procjene se zasnivaju na zapaženim prosječnim obrascima zahtjeva:
|
||||
|
||||
- GLM-5/5.1 — 700 ulaznih (input), 52,000 keširanih, 150 izlaznih (output) tokena po zahtjevu
|
||||
- Kimi K2.5/K2.6 — 870 ulaznih, 55,000 keširanih, 200 izlaznih tokena po zahtjevu
|
||||
- DeepSeek V4 Pro — 750 ulaznih, 82,000 keširanih, 290 izlaznih tokena po zahtjevu
|
||||
- DeepSeek V4 Flash — 790 ulaznih, 68,000 keširanih, 280 izlaznih tokena po zahtjevu
|
||||
- MiniMax M2.7/M2.5 — 300 ulaznih, 55,000 keširanih, 125 izlaznih tokena po zahtjevu
|
||||
- Qwen3.5 Plus — 410 ulaznih, 47,000 keširanih, 140 izlaznih tokena po zahtjevu
|
||||
- Qwen3.6 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu
|
||||
- MiMo-V2-Pro — 350 ulaznih, 41,000 keširanih, 250 izlaznih tokena po zahtjevu
|
||||
- MiMo-V2-Omni — 1000 ulaznih, 60,000 keširanih, 140 izlaznih tokena po zahtjevu
|
||||
- MiMo-V2.5-Pro — 350 ulaznih, 41,000 keširanih, 250 izlaznih tokena po zahtjevu
|
||||
- MiMo-V2.5 — 1000 ulaznih, 60,000 keširanih, 140 izlaznih tokena po zahtjevu
|
||||
|
||||
Svoju trenutnu potrošnju možete pratiti u **<a href={console}>konzoli</a>**.
|
||||
|
||||
:::tip
|
||||
Ako dostignete ograničenje upotrebe, možete nastaviti koristiti besplatne modele.
|
||||
:::
|
||||
|
||||
Ograničenja upotrebe mogu se promijeniti kako budemo učili iz rane upotrebe i povratnih informacija.
|
||||
|
||||
---
|
||||
|
||||
### Upotreba preko ograničenja
|
||||
|
||||
Ako također imate kredite na svom Zen balansu, možete omogućiti **Use balance**
|
||||
opciju u konzoli. Kada je omogućeno, Go će preći na vaš Zen balans
|
||||
nakon što dostignete ograničenja upotrebe umjesto blokiranja zahtjeva.
|
||||
|
||||
---
|
||||
|
||||
## Endpointi
|
||||
|
||||
Također možete pristupiti Go modelima putem sljedećih API endpointa.
|
||||
|
||||
| Model | Model ID | Endpoint | AI SDK Paket |
|
||||
| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- |
|
||||
| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM-5 | glm-5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Pro | mimo-v2-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Omni | mimo-v2-omni | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5-Pro | mimo-v2.5-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5 | mimo-v2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
|
||||
[Model id](/docs/config/#models) u vašoj OpenCode konfiguraciji
|
||||
koristi format `opencode-go/<model-id>`. Na primjer, za Kimi K2.6, koristili biste
|
||||
`opencode-go/kimi-k2.6` u svojoj konfiguraciji.
|
||||
|
||||
---
|
||||
|
||||
### Modeli
|
||||
|
||||
Pun spisak dostupnih modela i njihovih metapodataka možete preuzeti na:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/go/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Privatnost
|
||||
|
||||
Plan je prvenstveno namijenjen međunarodnim korisnicima, a modeli su smješteni u US, EU i Singaporeu radi stabilnog globalnog pristupa. Naši pružaoci usluga primjenjuju politiku nultog zadržavanja podataka i ne koriste vaše podatke za treniranje modela.
|
||||
|
||||
---
|
||||
|
||||
## Ciljevi
|
||||
|
||||
Napravili smo OpenCode Go da bismo:
|
||||
|
||||
1. Učinili AI programiranje **dostupnim** većem broju ljudi putem povoljne pretplate.
|
||||
2. Pružili **pouzdan** pristup najboljim otvorenim modelima za programiranje.
|
||||
3. Odabrali modele koji su **testirani i benchmarkovani** za upotrebu od strane agenata za programiranje.
|
||||
4. Osigurali da **nema zaključavanja (no lock-in)**, omogućavajući vam da uz OpenCode koristite i bilo kojeg drugog provajdera.
|
||||
47
qimingcode/packages/web/src/content/docs/bs/ide.mdx
Normal file
47
qimingcode/packages/web/src/content/docs/bs/ide.mdx
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: IDE
|
||||
description: Ekstenzija OpenCode za VS Code, Cursor i druge IDE
|
||||
---
|
||||
|
||||
OpenCode se integriše sa VS kodom, Cursor-om ili bilo kojim IDE-om koji podržava terminal. Samo pokrenite `opencode` u terminalu da započnete.
|
||||
|
||||
---
|
||||
|
||||
## Korištenje
|
||||
|
||||
- **Brzo pokretanje**: Koristite `Cmd+Esc` (Mac) ili `Ctrl+Esc` (Windows/Linux) da otvorite OpenCode u prikazu podijeljenog terminala ili fokusirajte postojeću terminalsku sesiju ako je već pokrenuta.
|
||||
- **Nova sesija**: Koristite `Cmd+Shift+Esc` (Mac) ili `Ctrl+Shift+Esc` (Windows/Linux) da započnete novu OpenCode terminalsku sesiju, čak i ako je ona već otvorena. Takođe možete kliknuti na dugme OpenCode u korisničkom sučelju.
|
||||
- **Svijest o kontekstu**: Automatski dijelite svoj trenutni odabir ili karticu s OpenCode.
|
||||
- **Prečice za referencu datoteka**: Koristite `Cmd+Option+K` (Mac) ili `Alt+Ctrl+K` (Linux/Windows) za umetanje referenci datoteka. Na primjer, `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## Instalacija
|
||||
|
||||
Da biste instalirali OpenCode na VS Code i popularne viljuške kao što su Cursor, Windsurf, VSCodium:
|
||||
|
||||
1. Otvorite VS Code
|
||||
2. Otvorite integrirani terminal
|
||||
3. Pokrenite `opencode` - ekstenzija se automatski instalira
|
||||
Ako s druge strane želite da koristite svoj vlastiti IDE kada pokrenete `/editor` ili `/export` iz TUI-ja, morat ćete postaviti `export EDITOR="code --wait"`. [Saznajte više](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### Ručna instalacija
|
||||
|
||||
Potražite **OpenCode** na Extension Marketplaceu i kliknite na **Instaliraj**.
|
||||
|
||||
---
|
||||
|
||||
### Rješavanje problema
|
||||
|
||||
Ako se ekstenzija ne uspije automatski instalirati:
|
||||
|
||||
- Uvjerite se da koristite `opencode` u integriranom terminalu.
|
||||
- Potvrdite da je CLI za vaš IDE instaliran:
|
||||
- Za VS kod: `code` naredbu
|
||||
- Za Cursor: `cursor` naredba
|
||||
- Za Windsurf: `windsurf` komanda
|
||||
- Za VSCodium: `codium` komanda
|
||||
- Ako ne, pokrenite `Cmd+Shift+P` (Mac) ili `Ctrl+Shift+P` (Windows/Linux) i potražite "Shell Command: Install 'code' command in PATH" (ili ekvivalent za vaš IDE)
|
||||
- Osigurajte da VS Code ima dozvolu za instaliranje ekstenzija
|
||||
323
qimingcode/packages/web/src/content/docs/bs/index.mdx
Normal file
323
qimingcode/packages/web/src/content/docs/bs/index.mdx
Normal file
@@ -0,0 +1,323 @@
|
||||
---
|
||||
title: Uvod
|
||||
description: Započnite sa OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) je AI agent za kodiranje otvorenog koda. Dostupan je kao interfejs baziran na terminalu, desktop aplikacija ili IDE ekstenzija.
|
||||

|
||||
Hajde da počnemo.
|
||||
|
||||
---
|
||||
|
||||
#### Preduvjeti
|
||||
|
||||
Da biste koristili OpenCode u svom terminalu, trebat će vam:
|
||||
|
||||
1. Moderan emulator terminala kao što su:
|
||||
- [WezTerm](https://wezterm.org), više platformi
|
||||
- [Alacritty](https://alacritty.org), više platformi
|
||||
- [Ghostty](https://ghostty.org), Linux i macOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux i macOS
|
||||
2. API ključevi za LLM provajdere koje želite koristiti.
|
||||
|
||||
---
|
||||
|
||||
## Instalacija
|
||||
|
||||
Najlakši način za instaliranje OpenCode je putem instalacijske skripte.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
Također ga možete instalirati pomoću sljedećih naredbi:
|
||||
|
||||
- **Korištenje Node.js**
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem label="npm">
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Bun">
|
||||
```bash
|
||||
bun install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="pnpm">
|
||||
```bash
|
||||
pnpm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Yarn">
|
||||
```bash
|
||||
yarn global add opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
- **Korištenje Homebrew-a na macOS-u i Linux-u**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> Preporučujemo korištenje OpenCode tap za najnovija izdanja. Službenu formulu `brew install opencode` održava Homebrew tim i ažurira se rjeđe.
|
||||
|
||||
- **Korištenje Parua na Arch Linuxu**
|
||||
|
||||
```bash
|
||||
sudo pacman -S opencode # Arch Linux (Stable)
|
||||
paru -S opencode-bin # Arch Linux (Latest from AUR)
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[Preporučeno: Koristite WSL]
|
||||
Za najbolje iskustvo na Windows-u preporučujemo korištenje [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Pruža bolje performanse i potpunu kompatibilnost sa OpenCode funkcijama.
|
||||
:::
|
||||
|
||||
- **Korištenje Chocolatey-a**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **Korištenje Scoop-a**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **Korištenje NPM-a**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **Korištenje Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **Korištenje Dockera**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
Podrška za instaliranje OpenCode na Windows koristeći Bun je trenutno u toku.
|
||||
Također možete preuzeti binarnu datoteku iz [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Uz OpenCode možete koristiti bilo kojeg LLM provajdera tako što ćete konfigurirati njihove API ključeve.
|
||||
Ako ste tek počeli koristiti LLM provajdere, preporučujemo korištenje [OpenCode Zen](/docs/zen).
|
||||
To je kurirana lista modela koji su testirani i verifikovani od strane OpenCode tima.
|
||||
|
||||
1. Pokrenite naredbu `/connect` u TUI-u, odaberite opencode i idite na [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. Prijavite se, dodajte svoje detalje naplate i kopirajte svoj API ključ.
|
||||
3. Zalijepite svoj API ključ.
|
||||
|
||||
```txt
|
||||
┌ API key
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
Alternativno, možete odabrati jednog od drugih provajdera. [Saznajte više](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## Inicijalizacija
|
||||
|
||||
Sada kada ste konfigurisali provajdera, možete se kretati do projekta na kojem želite raditi.
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
```
|
||||
|
||||
I pokrenite OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Zatim inicijalizirajte OpenCode za projekat pokretanjem sljedeće naredbe.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
Ovo će omogućiti OpenCode da analizira vaš projekat i kreira `AGENTS.md` fajl u korijenu projekta.
|
||||
:::tip
|
||||
Trebali biste komitovati datoteku `AGENTS.md` vašeg projekta u Git.
|
||||
:::
|
||||
Ovo pomaže OpenCode da razumije strukturu projekta i obrasce kodiranja koji se koriste.
|
||||
|
||||
---
|
||||
|
||||
## Korištenje
|
||||
|
||||
Sada ste spremni da koristite OpenCode za rad na svom projektu. Slobodno pitajte bilo šta!
|
||||
Ako ste novi u korištenju agenta za AI kodiranje, evo nekoliko primjera koji bi mogli pomoći.
|
||||
|
||||
---
|
||||
|
||||
### Postavljanje pitanja
|
||||
|
||||
Možete zamoliti OpenCode da vam objasni kodnu bazu.
|
||||
:::tip
|
||||
Koristite tipku `@` za nejasnu pretragu datoteka u projektu.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
How is authentication handled in @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
Ovo je korisno ako postoji dio kodne baze na kojem niste radili.
|
||||
|
||||
---
|
||||
|
||||
### Dodavanje funkcija
|
||||
|
||||
Možete zamoliti OpenCode da vašem projektu doda nove funkcije. Iako preporučujemo da ga prvo zamolite da napravi plan.
|
||||
|
||||
1. **Kreirajte plan**
|
||||
OpenCode ima _Plan mod_ koji onemogućuje njegovu sposobnost da pravi promjene i umjesto toga predlaže _kako_ će implementirati ovu funkciju.
|
||||
Prebacite se na njega pomoću tipke **Tab**. Vidjet ćete indikator za ovo u donjem desnom uglu.
|
||||
|
||||
```bash frame="none" title="Switch to Plan mode"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
Hajde sada da opišemo šta želimo da uradi.
|
||||
|
||||
```txt frame="none"
|
||||
When a user deletes a note, we'd like to flag it as deleted in the database.
|
||||
Then create a screen that shows all the recently deleted notes.
|
||||
From this screen, the user can undelete a note or permanently delete it.
|
||||
```
|
||||
|
||||
Želite da date OpenCode dovoljno detalja da razumije šta želite. Pomaže da razgovarate s njim kao da razgovarate sa mlađim programerom u svom timu.
|
||||
:::tip
|
||||
Dajte OpenCode dosta konteksta i primjera koji će mu pomoći da razumije šta vi želite.
|
||||
:::
|
||||
|
||||
2. **Ponovite plan**
|
||||
Kada vam da plan, možete mu dati povratne informacije ili dodati više detalja.
|
||||
|
||||
```txt frame="none"
|
||||
We'd like to design this new screen using a design I've used before.
|
||||
[Image #1] Take a look at this image and use it as a reference.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Prevucite i ispustite slike u terminal da biste ih dodali u prompt.
|
||||
:::
|
||||
OpenCode može skenirati sve slike koje mu date i dodati ih u prompt. Možete to učiniti povlačenjem i ispuštanjem slike u terminal.
|
||||
|
||||
3. **Izgradite funkciju**
|
||||
Kada se osjećate ugodno s planom, vratite se na _Build mode_ ponovnim pritiskom na taster **Tab**.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
I tražeći od njega da napravi promjene.
|
||||
|
||||
```bash frame="none"
|
||||
Sounds good! Go ahead and make the changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Pravljenje izmjena
|
||||
|
||||
Za jednostavnije promjene, možete zamoliti OpenCode da ga direktno izgradi bez potrebe da prvo pregledate plan.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
We need to add authentication to the /settings route. Take a look at how this is
|
||||
handled in the /notes route in @packages/functions/src/notes.ts and implement
|
||||
the same logic in @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
Želite da budete sigurni da ste pružili dobru količinu detalja kako bi OpenCode napravio ispravne promjene.
|
||||
|
||||
---
|
||||
|
||||
### Poništavanje izmjena
|
||||
|
||||
Recimo da tražite od OpenCode da izvrši neke promjene.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Ali shvatate da to nije ono što ste željeli. Možete **poništiti** promjene koristeći naredbu `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
OpenCode će sada poništiti promjene koje ste napravili i ponovo prikazati vašu originalnu poruku.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Odavde možete podesiti prompt i zamoliti OpenCode da pokuša ponovo.
|
||||
:::tip
|
||||
Možete pokrenuti `/undo` više puta da poništite više promjena.
|
||||
:::
|
||||
Ili **možete ponoviti** promjene koristeći naredbu `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dijeljenje
|
||||
|
||||
Razgovore koje imate sa OpenCode možete [dijeliti sa vašim timom](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
Ovo će kreirati vezu do trenutnog razgovora i kopirati je u međuspremnik.
|
||||
:::note
|
||||
Razgovori se ne dijele prema zadanim postavkama.
|
||||
:::
|
||||
Evo [primjer razgovora](https://opencode.ai/s/4XP1fce5) sa OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Prilagođavanje
|
||||
|
||||
I to je to! Sada ste profesionalac u korištenju OpenCode.
|
||||
Da biste to učinili svojim, preporučujemo [odabir teme](/docs/themes), [prilagođavanje povezivanja tipki](/docs/keybinds), [konfiguriranje formatera koda](/docs/formatters), [kreiranje prilagođenih komandi](/docs/commands), ili igranje sa [OpenCode config](/docs/config).
|
||||
194
qimingcode/packages/web/src/content/docs/bs/keybinds.mdx
Normal file
194
qimingcode/packages/web/src/content/docs/bs/keybinds.mdx
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
title: Prečice tipki
|
||||
description: Prilagodite svoje veze tipki.
|
||||
---
|
||||
|
||||
OpenCode ima listu veza tipki koje možete prilagoditi putem `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x",
|
||||
"app_exit": "ctrl+c,ctrl+d,<leader>q",
|
||||
"editor_open": "<leader>e",
|
||||
"theme_list": "<leader>t",
|
||||
"sidebar_toggle": "<leader>b",
|
||||
"scrollbar_toggle": "none",
|
||||
"username_toggle": "none",
|
||||
"status_view": "<leader>s",
|
||||
"tool_details": "none",
|
||||
"session_export": "<leader>x",
|
||||
"session_new": "<leader>n",
|
||||
"session_list": "<leader>l",
|
||||
"session_timeline": "<leader>g",
|
||||
"session_fork": "none",
|
||||
"session_rename": "none",
|
||||
"session_share": "none",
|
||||
"session_unshare": "none",
|
||||
"session_interrupt": "escape",
|
||||
"session_compact": "<leader>c",
|
||||
"session_child_first": "<leader>down",
|
||||
"session_child_cycle": "<leader>right",
|
||||
"session_child_cycle_reverse": "<leader>left",
|
||||
"session_parent": "<leader>up",
|
||||
"messages_page_up": "pageup,ctrl+alt+b",
|
||||
"messages_page_down": "pagedown,ctrl+alt+f",
|
||||
"messages_line_up": "ctrl+alt+y",
|
||||
"messages_line_down": "ctrl+alt+e",
|
||||
"messages_half_page_up": "ctrl+alt+u",
|
||||
"messages_half_page_down": "ctrl+alt+d",
|
||||
"messages_first": "ctrl+g,home",
|
||||
"messages_last": "ctrl+alt+g,end",
|
||||
"messages_next": "none",
|
||||
"messages_previous": "none",
|
||||
"messages_copy": "<leader>y",
|
||||
"messages_undo": "<leader>u",
|
||||
"messages_redo": "<leader>r",
|
||||
"messages_last_user": "none",
|
||||
"messages_toggle_conceal": "<leader>h",
|
||||
"model_list": "<leader>m",
|
||||
"model_cycle_recent": "f2",
|
||||
"model_cycle_recent_reverse": "shift+f2",
|
||||
"model_cycle_favorite": "none",
|
||||
"model_cycle_favorite_reverse": "none",
|
||||
"variant_cycle": "ctrl+t",
|
||||
"variant_list": "none",
|
||||
"command_list": "ctrl+p",
|
||||
"agent_list": "<leader>a",
|
||||
"agent_cycle": "tab",
|
||||
"agent_cycle_reverse": "shift+tab",
|
||||
"input_clear": "ctrl+c",
|
||||
"input_paste": "ctrl+v",
|
||||
"input_submit": "return",
|
||||
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
|
||||
"input_move_left": "left,ctrl+b",
|
||||
"input_move_right": "right,ctrl+f",
|
||||
"input_move_up": "up",
|
||||
"input_move_down": "down",
|
||||
"input_select_left": "shift+left",
|
||||
"input_select_right": "shift+right",
|
||||
"input_select_up": "shift+up",
|
||||
"input_select_down": "shift+down",
|
||||
"input_line_home": "ctrl+a",
|
||||
"input_line_end": "ctrl+e",
|
||||
"input_select_line_home": "ctrl+shift+a",
|
||||
"input_select_line_end": "ctrl+shift+e",
|
||||
"input_visual_line_home": "alt+a",
|
||||
"input_visual_line_end": "alt+e",
|
||||
"input_select_visual_line_home": "alt+shift+a",
|
||||
"input_select_visual_line_end": "alt+shift+e",
|
||||
"input_buffer_home": "home",
|
||||
"input_buffer_end": "end",
|
||||
"input_select_buffer_home": "shift+home",
|
||||
"input_select_buffer_end": "shift+end",
|
||||
"input_delete_line": "ctrl+shift+d",
|
||||
"input_delete_to_line_end": "ctrl+k",
|
||||
"input_delete_to_line_start": "ctrl+u",
|
||||
"input_backspace": "backspace,shift+backspace",
|
||||
"input_delete": "ctrl+d,delete,shift+delete",
|
||||
"input_undo": "ctrl+-,super+z",
|
||||
"input_redo": "ctrl+.,super+shift+z",
|
||||
"input_word_forward": "alt+f,alt+right,ctrl+right",
|
||||
"input_word_backward": "alt+b,alt+left,ctrl+left",
|
||||
"input_select_word_forward": "alt+shift+f,alt+shift+right",
|
||||
"input_select_word_backward": "alt+shift+b,alt+shift+left",
|
||||
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
|
||||
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
|
||||
"history_previous": "up",
|
||||
"history_next": "down",
|
||||
"terminal_suspend": "ctrl+z",
|
||||
"terminal_title_toggle": "none",
|
||||
"tips_toggle": "<leader>h",
|
||||
"display_thinking": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Leader tipka
|
||||
|
||||
OpenCode koristi `leader` (vodeću) tipku za većinu povezivanja tipki. Ovo izbjegava sukobe u vašem terminalu.
|
||||
|
||||
Prema zadanim postavkama, `ctrl+x` je vodeća tipka i većina radnji zahtijeva da prvo pritisnete vodeću tipku, a zatim i prečicu. Na primjer, da biste započeli novu sesiju, prvo pritisnite `ctrl+x`, a zatim pritisnite `n`.
|
||||
|
||||
Ne morate koristiti vodeću tipku za svoje veze tipki, ali preporučujemo da to učinite.
|
||||
|
||||
---
|
||||
|
||||
## Onemogućavanje prečica tipki
|
||||
|
||||
Možete onemogućiti spajanje tipki dodavanjem ključa u `tui.json` s vrijednošću "none".
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prečice za radnu površinu
|
||||
|
||||
Unos prompta aplikacije OpenCode za desktop podržava uobičajene prečice u stilu Readline/Emacs za uređivanje teksta. One su ugrađene i trenutno se ne mogu konfigurirati putem `opencode.json`.
|
||||
|
||||
| Prečica | Akcija |
|
||||
| -------- | ------------------------------------------------ |
|
||||
| `ctrl+a` | Prelazak na početak trenutnog reda |
|
||||
| `ctrl+e` | Prelazak na kraj trenutnog reda |
|
||||
| `ctrl+b` | Pomjeri kursor za jedan znak unazad |
|
||||
| `ctrl+f` | Pomicanje kursora naprijed za jedan znak |
|
||||
| `alt+b` | Pomjeri kursor za jednu riječ unazad |
|
||||
| `alt+f` | Pomjeri kursor za jednu riječ unaprijed |
|
||||
| `ctrl+d` | Izbriši znak ispod kursora |
|
||||
| `ctrl+k` | Kill do kraja reda |
|
||||
| `ctrl+u` | Kill do početka reda |
|
||||
| `ctrl+w` | Kill prethodnu riječ |
|
||||
| `alt+d` | Kill sljedeću riječ |
|
||||
| `ctrl+t` | Transponirajte znakove |
|
||||
| `ctrl+g` | Otkaži iskakanje / poništi odgovor na pokretanje |
|
||||
|
||||
---
|
||||
|
||||
## Shift+Enter
|
||||
|
||||
Neki terminali ne šalju modifikatorske tipke sa Enter prema zadanim postavkama. Možda ćete trebati konfigurirati svoj terminal da pošalje `Shift+Enter` kao escape sekvencu.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
Otvorite svoj `settings.json` na:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
Dodajte ovo u niz korijenskog nivoa `actions`:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Dodajte ovo u niz korijenskog nivoa `keybindings`:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Sačuvajte datoteku i ponovo pokrenite Windows Terminal ili otvorite novu karticu.
|
||||
185
qimingcode/packages/web/src/content/docs/bs/lsp.mdx
Normal file
185
qimingcode/packages/web/src/content/docs/bs/lsp.mdx
Normal file
@@ -0,0 +1,185 @@
|
||||
---
|
||||
title: LSP serveri
|
||||
description: OpenCode se integriše sa vašim LSP serverima.
|
||||
---
|
||||
|
||||
OpenCode se integriše sa vašim Language Server Protocol (LSP) serverima kako bi pomogao LLM-u u interakciji s kodnom bazom. Koristi dijagnostiku za slanje povratnih informacija modelu.
|
||||
|
||||
## Ugrađeni
|
||||
|
||||
OpenCode dolazi sa nekoliko ugrađenih LSP servera za popularne jezike:
|
||||
|
||||
| LSP server | Ekstenzije | Zahtjevi |
|
||||
| ------------------ | ------------------------------------------------------------------- | -------------------------------------------------------- |
|
||||
| astro | .astro | Automatske instalacije za Astro projekte |
|
||||
| bash | .sh, .bash, .zsh, .ksh | Automatski instalira bash-language-server |
|
||||
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Automatske instalacije za C/C++ projekte |
|
||||
| csharp | .cs | `.NET SDK` instaliran |
|
||||
| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` komanda dostupna |
|
||||
| dart | .dart | `dart` komanda dostupna |
|
||||
| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` komanda dostupna (automatski detektuje deno.json) |
|
||||
| elixir-ls | .ex, .exs | `elixir` komanda dostupna |
|
||||
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` ovisnost u projektu |
|
||||
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` instaliran |
|
||||
| gleam | .gleam | `gleam` komanda dostupna |
|
||||
| gopls | .go | `go` komanda dostupna |
|
||||
| hls | .hs, .lhs | `haskell-language-server-wrapper` komanda dostupna |
|
||||
| jdtls | .java | `Java SDK (version 21+)` instaliran |
|
||||
| julials | .jl | `julia` i `LanguageServer.jl` instalirani |
|
||||
| kotlin-ls | .kt, .kts | Automatske instalacije za Kotlin projekte |
|
||||
| lua-ls | .lua | Automatske instalacije za Lua projekte |
|
||||
| nixd | .nix | `nixd` komanda dostupna |
|
||||
| ocaml-lsp | .ml, .mli | `ocamllsp` komanda dostupna |
|
||||
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` zavisnost u projektu |
|
||||
| php intelephense | .php | Automatske instalacije za PHP projekte |
|
||||
| prisma | .prisma | `prisma` komanda dostupna |
|
||||
| pyright | .py, .pyi | `pyright` ovisnost instalirana |
|
||||
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` i `gem` komande dostupne |
|
||||
| rust | .rs | `rust-analyzer` komanda dostupna |
|
||||
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` instaliran (`xcode` na macOS-u) |
|
||||
| svelte | .svelte | Automatske instalacije za Svelte projekte |
|
||||
| terraform | .tf, .tfvars | Automatske instalacije iz GitHub izdanja |
|
||||
| tinymist | .typ, .typc | Automatske instalacije iz GitHub izdanja |
|
||||
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` zavisnost u projektu |
|
||||
| vue | .vue | Automatske instalacije za Vue projekte |
|
||||
| yaml-ls | .yaml, .yml | Automatski instalira Red Hat yaml-language-server |
|
||||
| zls | .zig, .zon | `zig` komanda dostupna |
|
||||
|
||||
LSP serveri su automatski omogućeni kada se otkrije jedna od gore navedenih ekstenzija datoteke i zahtjevi su ispunjeni.
|
||||
:::note
|
||||
Možete onemogućiti automatska preuzimanja LSP servera tako što ćete postaviti varijablu okruženja `OPENCODE_DISABLE_LSP_DOWNLOAD` na `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Kako radi
|
||||
|
||||
Kada opencode otvori fajl, on:
|
||||
|
||||
1. Provjerava ekstenziju datoteke u odnosu na sve omogućene LSP servere.
|
||||
2. Pokreće odgovarajući LSP server ako već nije pokrenut.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete prilagoditi LSP servere kroz `lsp` odjeljak u vašoj opencode konfiguraciji.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
Svaki LSP server podržava sljedeće:
|
||||
|
||||
| Svojstvo | Vrsta | Opis |
|
||||
| ---------------- | -------- | -------------------------------------------------------------------- |
|
||||
| `disabled` | boolean | Postavite ovo na `true` da onemogućite LSP server |
|
||||
| `command` | string[] | Naredba za pokretanje LSP servera |
|
||||
| `extensions` | string[] | Ekstenzije datoteka koje ovaj LSP server treba da rukuje |
|
||||
| `env` | objekt | Varijable okruženja koje treba postaviti prilikom pokretanja servera |
|
||||
| `initialization` | objekt | Opcije inicijalizacije za slanje na LSP server |
|
||||
|
||||
Pogledajmo neke primjere.
|
||||
|
||||
---
|
||||
|
||||
### Varijable okruženja
|
||||
|
||||
Koristite svojstvo `env` za postavljanje varijabli okruženja prilikom pokretanja LSP servera:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Opcije inicijalizacije
|
||||
|
||||
Koristite svojstvo `initialization` da prosledite opcije inicijalizacije na LSP server. Ovo su postavke specifične za server poslane tokom LSP `initialize` zahtjeva:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
Opcije inicijalizacije razlikuju se od LSP servera. Provjerite dokumentaciju vašeg LSP servera za dostupne opcije.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Onemogućavanje LSP servera
|
||||
|
||||
Da biste onemogućili **sve** LSP servere globalno, postavite `lsp` na `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
Da onemogućite **specifičan** LSP server, postavite `disabled` na `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prilagođeni LSP serveri
|
||||
|
||||
Možete dodati prilagođene LSP servere navodeći ekstenzije naredbe i datoteke:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dodatne informacije
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
PHP Intelephense nudi vrhunske funkcije putem licencnog ključa. Možete dati licencni ključ postavljanjem (samo) ključa u tekstualnu datoteku na:
|
||||
|
||||
- Na macOS/Linuxu: `$HOME/intelephense/license.txt`
|
||||
- Na Windowsima: `%USERPROFILE%/intelephense/license.txt`
|
||||
Datoteka treba da sadrži samo licencni ključ bez dodatnog sadržaja.
|
||||
482
qimingcode/packages/web/src/content/docs/bs/mcp-servers.mdx
Normal file
482
qimingcode/packages/web/src/content/docs/bs/mcp-servers.mdx
Normal file
@@ -0,0 +1,482 @@
|
||||
---
|
||||
title: MCP serveri
|
||||
description: Dodajte lokalne i udaljene MCP alate.
|
||||
---
|
||||
|
||||
Možete dodati vanjske alate u OpenCode koristeći _Model Context Protocol_, ili MCP. OpenCode podržava i lokalne i udaljene servere.
|
||||
Jednom dodani, MCP alati su automatski dostupni LLM-u zajedno sa ugrađenim alatima.
|
||||
|
||||
---
|
||||
|
||||
#### Upozorenje
|
||||
|
||||
Kada koristite MCP server, on dodaje u kontekst. Ovo se može brzo zbrojiti ako imate puno alata. Stoga preporučujemo da pazite koje MCP servere koristite.
|
||||
:::tip
|
||||
MCP serveri dodaju vaš kontekst, tako da želite da budete pažljivi s tim koje ćete omogućiti.
|
||||
:::
|
||||
|
||||
Određeni MCP serveri, poput GitHub MCP servera, mogu dodati mnogo tokena i lako premašiti limit konteksta.
|
||||
|
||||
## Omogućavanje
|
||||
|
||||
Možete definirati MCP servere u vašoj [OpenCode Config](https://opencode.ai/docs/config/) pod `mcp`. Dodajte svaki MCP sa jedinstvenim imenom. Možete se pozvati na taj MCP po imenu kada tražite LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"name-of-mcp-server": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"name-of-other-mcp-server": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Također možete onemogućiti server postavljanjem `enabled` na `false`. To je korisno kada ga želite privremeno isključiti bez uklanjanja iz konfiguracije.
|
||||
|
||||
### Poništavanje udaljenih zadanih postavki
|
||||
|
||||
Organizacije mogu obezbijediti zadane MCP servere preko svoje krajnje tačke `.well-known/opencode`. Ovi serveri mogu biti onemogućeni prema zadanim postavkama, omogućavajući korisnicima da se odluče za one koji su im potrebni.
|
||||
Da omogućite određeni server iz udaljene konfiguracije vaše organizacije, dodajte ga u svoju lokalnu konfiguraciju sa `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vrijednosti lokalne konfiguracije nadjačavaju udaljene zadane postavke. Pogledajte [config precedence](/docs/config#precedence-order) za više detalja.
|
||||
|
||||
## Lokalno
|
||||
|
||||
Dodajte lokalne MCP servere koristeći `type` u `"local"` unutar MCP objekta.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-local-mcp-server": {
|
||||
"type": "local",
|
||||
// Or ["bun", "x", "my-mcp-command"]
|
||||
"command": ["npx", "-y", "my-mcp-command"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MY_ENV_VAR": "my_env_var_value",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Naredba je način na koji se pokreće lokalni MCP server. Također možete proslijediti listu varijabli okruženja.
|
||||
Na primjer, evo kako možete dodati testni [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP server.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_everything": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
I da ga koristim mogu dodati `use the mcp_everything tool` u svoje upite.
|
||||
|
||||
```txt "mcp_everything"
|
||||
use the mcp_everything tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Opcije
|
||||
|
||||
Ovdje su sve opcije za konfiguriranje lokalnog MCP servera.
|
||||
| Opcija | Tip | Obavezno | Opis
|
||||
|------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | Tip veze sa MCP serverom, mora biti `"local"`. |
|
||||
| `command` | Niz | Y | Naredba i argumenti za pokretanje MCP servera. |
|
||||
| `environment` | Objekt | | Varijable okruženja koje treba postaviti prilikom pokretanja servera. |
|
||||
| `enabled` | Boolean | | Omogućite ili onemogućite MCP server pri pokretanju. |
|
||||
| `timeout` | Broj | | Vremensko ograničenje u ms za dohvaćanje alata sa MCP servera. Podrazumevano je 5000 (5 sekundi). |
|
||||
|
||||
---
|
||||
|
||||
## Udaljeno
|
||||
|
||||
Dodajte udaljene MCP servere postavljanjem `type` na `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-remote-mcp": {
|
||||
"type": "remote",
|
||||
"url": "https://my-mcp-server.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MY_API_KEY"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`url` je URL udaljenog MCP servera, a kroz opciju `headers` možete proslijediti listu zaglavlja.
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Tip | Obavezno | Opis |
|
||||
| --------- | ------- | -------- | -------------------------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | Tip veze sa MCP serverom, mora biti `"remote"`. |
|
||||
| `url` | String | Y | URL udaljenog MCP servera. |
|
||||
| `enabled` | Boolean | | Omogućite ili onemogućite MCP server pri pokretanju. |
|
||||
| `headers` | Objekt | | Zaglavlja za slanje uz zahtjev. |
|
||||
| `oauth` | Objekt | | Konfiguracija OAuth provjere autentičnosti. Pogledajte odjeljak [OAuth](#oauth) ispod. |
|
||||
| `timeout` | Broj | | Vremensko ograničenje u ms za preuzimanje alata sa MCP servera. Podrazumevano je 5000 (5 sekundi). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
|
||||
OpenCode automatski rukuje OAuth autentifikacijom za udaljene MCP servere. Kada server zahtijeva autentifikaciju, OpenCode će:
|
||||
|
||||
1. Otkrijte 401 odgovor i pokrenite OAuth tok
|
||||
2. Koristite **Dynamic Client Registration (RFC 7591)** ako podržava server
|
||||
3. Sigurno čuvajte tokene za buduće zahtjeve
|
||||
|
||||
---
|
||||
|
||||
### Automatski
|
||||
|
||||
Za većinu MCP servera sa omogućenim OAuthom nije potrebna posebna konfiguracija. Samo konfigurirajte udaljeni server:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako server zahtijeva autentifikaciju, OpenCode će vas tražiti prijavu pri prvom korištenju. Ako se to ne desi, možete [ručno pokrenuti tok](#authenticating) naredbom `opencode mcp auth <server-name>`.
|
||||
|
||||
### Prethodno registrirano
|
||||
|
||||
Ako imate klijentske vjerodajnice od dobavljača MCP servera, možete ih konfigurirati:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MY_MCP_CLIENT_ID}",
|
||||
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autentifikacija
|
||||
|
||||
Možete ručno pokrenuti autentifikaciju ili upravljati vjerodajnicama.
|
||||
Autentifikacija sa određenim MCP serverom:
|
||||
|
||||
```bash
|
||||
opencode mcp auth my-oauth-server
|
||||
```
|
||||
|
||||
Navedite sve MCP servere i njihov status autentifikacije:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Uklonite pohranjene vjerodajnice:
|
||||
|
||||
```bash
|
||||
opencode mcp logout my-oauth-server
|
||||
```
|
||||
|
||||
Komanda `mcp auth` otvara pretraživač za autorizaciju. Nakon odobrenja, OpenCode sigurno čuva tokene u `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
#### Onemogućavanje OAuth-a
|
||||
|
||||
Ako želite onemogućiti automatski OAuth za server (npr. za servere koji umjesto toga koriste API ključeve), postavite `oauth` na `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-api-key-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MY_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### OAuth opcije
|
||||
|
||||
| Opcija | Tip | Opis |
|
||||
| -------------- | --------------- | --------------------------------------------------------------------------------------------- |
|
||||
| `oauth` | Objekt \| false | OAuth konfiguracijski objekt, ili `false` da onemogućite automatsko otkrivanje OAuth. |
|
||||
| `clientId` | String | ID OAuth klijenta. Ako nije navedeno, pokušat će se izvršiti dinamička registracija klijenta. |
|
||||
| `clientSecret` | String | Tajna OAuth klijenta, ako to zahtijeva autorizacijski server. |
|
||||
| `scope` | String | OAuth opseg zahtjeva za vrijeme autorizacije. |
|
||||
|
||||
#### Otklanjanje grešaka
|
||||
|
||||
Ako udaljeni MCP server ne uspije u autentifikaciji, možete dijagnosticirati probleme pomoću:
|
||||
|
||||
```bash
|
||||
# View auth status for all OAuth-capable servers
|
||||
opencode mcp auth list
|
||||
|
||||
# Debug connection and OAuth flow for a specific server
|
||||
opencode mcp debug my-oauth-server
|
||||
```
|
||||
|
||||
Komanda `mcp debug` prikazuje trenutni auth status, testira HTTP povezanost i pokušava OAuth discovery flow.
|
||||
|
||||
## Upravljanje
|
||||
|
||||
Vaši MCP serveri su dostupni kao alati u OpenCode, zajedno s ugrađenim alatima. Možete njima upravljati kroz OpenCode konfiguraciju kao i bilo kojim drugim alatom.
|
||||
|
||||
### Globalno
|
||||
|
||||
To znači da ih možete omogućiti ili onemogućiti globalno.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Također možemo koristiti glob obrazac da onemogućimo sve odgovarajuće MCP-ove.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovdje koristimo glob obrazac `my-mcp*` da onemogućimo sve MCP servere.
|
||||
|
||||
### Po agentu
|
||||
|
||||
Ako imate veliki broj MCP servera, možda ćete želeti da ih omogućite samo po agentu i da ih onemogućite globalno. Da biste to učinili:
|
||||
|
||||
1. Onemogućite ga kao alat globalno.
|
||||
2. U vašem [agent config](/docs/agents#tools), omogućite MCP server kao alat.
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"my-agent": {
|
||||
"tools": {
|
||||
"my-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Glob uzorci
|
||||
|
||||
Uzorak glob koristi jednostavne šablone globbiranja regularnih izraza:
|
||||
|
||||
- `*` odgovara nuli ili više bilo kojeg znaka (npr. `"my-mcp*"` odgovara `my-mcp_search`, `my-mcp_list`, itd.)
|
||||
- `?` odgovara tačno jednom znaku
|
||||
- Svi ostali likovi se bukvalno podudaraju
|
||||
:::note
|
||||
MCP serverski alati se registruju sa imenom servera kao prefiksom, tako da onemogućite sve alate za server jednostavno koristite:
|
||||
|
||||
```
|
||||
"mymcpservername_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Primjeri
|
||||
|
||||
Ispod su primjeri uobičajenih MCP servera. Možete poslati PR ako želite dokumentovati druge servere.
|
||||
|
||||
### Sentry
|
||||
|
||||
Dodajte [Sentry MCP server](https://mcp.sentry.dev) za interakciju sa vašim Sentry projektima i problemima.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Nakon dodavanja konfiguracije, autentifikujte se sa Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
Ovo će otvoriti prozor pretraživača da završite OAuth tok i povežete OpenCode sa vašim Sentry nalogom.
|
||||
Nakon provjere autentičnosti, možete koristiti Sentry alate u svojim upitima za upite o problemima, projektima i podacima o greškama.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
Dodajte [Context7 MCP server](https://github.com/upstash/context7) za pretraživanje dokumenata.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako ste se prijavili za besplatni račun, možete koristiti svoj API ključ i dobiti viša ograničenja stope.
|
||||
|
||||
```json title="opencode.json" {7-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovdje pretpostavljamo da imate postavljenu varijablu okruženja `CONTEXT7_API_KEY`.
|
||||
Dodajte `use context7` vašim upitima za korištenje Context7 MCP servera.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
Alternativno, možete dodati nešto poput ovoga na svoj [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
Dodajte [Grep by Vercel](https://grep.app) MCP server za pretraživanje isječaka koda na GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Pošto smo naš MCP server nazvali `gh_grep`, možete dodati `use the gh_grep tool` u svoje upite da natjerate agenta da ga koristi.
|
||||
|
||||
```txt "use the gh_grep tool"
|
||||
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
|
||||
```
|
||||
|
||||
Alternativno, možete dodati nešto poput ovoga na svoj [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
|
||||
```
|
||||
201
qimingcode/packages/web/src/content/docs/bs/models.mdx
Normal file
201
qimingcode/packages/web/src/content/docs/bs/models.mdx
Normal file
@@ -0,0 +1,201 @@
|
||||
---
|
||||
title: Modeli
|
||||
description: Konfiguriranje LLM provajdera i modela.
|
||||
---
|
||||
|
||||
OpenCode koristi [AI SDK](https://ai-sdk.dev/) i [Models.dev](https://models.dev) za podršku **75+ LLM providera**, uključujući lokalne modele.
|
||||
|
||||
## Provajderi
|
||||
|
||||
Većina popularnih provajdera su unaprijed učitani prema zadanim postavkama. Ako ste dodali vjerodajnice za provajdera putem naredbe `/connect`, oni će biti dostupni kada pokrenete OpenCode.
|
||||
Saznajte više o [providers](/docs/providers).
|
||||
|
||||
---
|
||||
|
||||
## Odabir modela
|
||||
|
||||
Nakon što konfigurirate svog provajdera, možete odabrati model koji želite upisivanjem:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Preporučeni modeli
|
||||
|
||||
Postoji mnogo modela vani, a novi modeli izlaze svake sedmice.
|
||||
:::tip
|
||||
Razmislite o korištenju jednog od modela koje preporučujemo.
|
||||
:::
|
||||
|
||||
Međutim, postoji samo nekoliko njih koji su dobri i u generiranju koda i u pozivanju alata.
|
||||
Evo nekoliko modela koji dobro rade sa OpenCode, bez posebnog redosleda. (Ovo nije potpuna lista niti je nužno ažurirana):
|
||||
|
||||
- GPT 5.2
|
||||
- Codex GPT 5.1
|
||||
- Claude Opus 4.5
|
||||
- Claude Sonnet 4.5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## Postavljanje zadanog
|
||||
|
||||
Da postavite jedan od ovih kao zadani model, možete postaviti ključ `model` u svom
|
||||
OpenCode config.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
Ovdje je puni ID `provider_id/model_id`. Na primjer, ako koristite [OpenCode Zen](/docs/zen), koristili biste `opencode/gpt-5.1-codex` za GPT 5.1 Codex.
|
||||
Ako ste konfigurirali [prilagođenog provajdera](/docs/providers#custom), `provider_id` je ključ iz `provider` dijela vaše konfiguracije, a `model_id` je ključ iz `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija modela
|
||||
|
||||
Možete globalno konfigurirati opcije modela kroz config.
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-12,19-24}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"options": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
"include": ["reasoning.encrypted_content"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"anthropic": {
|
||||
"models": {
|
||||
"claude-sonnet-4-5-20250929": {
|
||||
"options": {
|
||||
"thinking": {
|
||||
"type": "enabled",
|
||||
"budgetTokens": 16000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Ovdje konfiguriramo globalne postavke za dva ugrađena modela: `gpt-5` kada se pristupa preko `openai` provajdera i `claude-sonnet-4-20250514` kada se pristupa preko `anthropic` provajdera.
|
||||
Ugrađeni dobavljač i nazivi modela mogu se naći na [Models.dev](https://models.dev).
|
||||
Također možete konfigurirati ove opcije za sve agente koje koristite. Konfiguracija agenta poništava sve globalne opcije ovdje. [Saznajte više](/docs/agents/#additional).
|
||||
Također možete definirati prilagođene varijante koje proširuju ugrađene. Varijante vam omogućavaju da konfigurirate različite postavke za isti model bez stvaranja duplih unosa:
|
||||
|
||||
```jsonc title="opencode.jsonc" {6-21}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"opencode": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"high": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
"low": {
|
||||
"reasoningEffort": "low",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Varijante
|
||||
|
||||
Mnogi modeli podržavaju više varijanti sa različitim konfiguracijama. OpenCode se isporučuje sa ugrađenim podrazumevanim varijantama za popularne provajdere.
|
||||
|
||||
### Ugrađene varijante
|
||||
|
||||
OpenCode se isporučuje sa zadanim varijantama za mnoge provajdere:
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - Visok budžet za razmišljanje (zadano)
|
||||
- `max` - Maksimalni budžet za razmišljanje
|
||||
**OpenAI**:
|
||||
Zavisi od modela, ali otprilike:
|
||||
- `none` - Bez obrazloženja
|
||||
- `minimal` - Minimalni napor za rasuđivanje
|
||||
- `low` - Nizak napor u rasuđivanju
|
||||
- `medium` - Srednji napor u zaključivanju
|
||||
- `high` - Veliki napor u rasuđivanju
|
||||
- `xhigh` - Ekstra visok napor u rasuđivanju
|
||||
**Google**:
|
||||
- `low` - Manji trud/budžet tokena
|
||||
- `high` - Veći budžet za trud/token
|
||||
:::tip
|
||||
Ova lista nije sveobuhvatna. Mnogi drugi provajderi također imaju ugrađene zadane postavke.
|
||||
:::
|
||||
|
||||
### Prilagođene varijante
|
||||
|
||||
Možete nadjačati postojeće varijante ili dodati svoje:
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"thinking": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
},
|
||||
"fast": {
|
||||
"disabled": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Kruženje kroz varijante
|
||||
|
||||
Koristite keybind `variant_cycle` za brzo prebacivanje između varijanti. [Saznajte više](/docs/keybinds).
|
||||
|
||||
## Učitavanje modela
|
||||
|
||||
Kada se OpenCode pokrene, on provjerava modele u sljedećem prioritetnom redoslijedu:
|
||||
|
||||
1. Oznaka komandne linije `--model` ili `-m`. Format je isti kao u konfiguracijskoj datoteci: `provider_id/model_id`.
|
||||
2. Lista modela u OpenCode konfiguraciji.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
Format ovdje je `provider/model`. 3. Posljednji korišteni model. 4. Prvi model koji koristi interni prioritet.
|
||||
314
qimingcode/packages/web/src/content/docs/bs/modes.mdx
Normal file
314
qimingcode/packages/web/src/content/docs/bs/modes.mdx
Normal file
@@ -0,0 +1,314 @@
|
||||
---
|
||||
title: Načini rada
|
||||
description: Različiti načini za različite slučajeve upotrebe.
|
||||
---
|
||||
|
||||
:::caution
|
||||
Načini se sada konfiguriraju preko opcije `agent` u konfiguraciji otvorenog koda. The
|
||||
`mode` opcija je sada zastarjela. [Saznajte više](/docs/agents).
|
||||
:::
|
||||
|
||||
Režimi u otvorenom kodu omogućavaju vam da prilagodite ponašanje, alate i upite za različite slučajeve upotrebe.
|
||||
Dolazi sa dva ugrađena načina rada: **build** i **plan**. Možete prilagoditi
|
||||
ove ili konfigurirajte svoje putem opencode config.
|
||||
Možete se prebacivati između režima tokom sesije ili ih konfigurisati u svom konfiguracionom fajlu.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađeni
|
||||
|
||||
opencode dolazi sa dva ugrađena načina rada.
|
||||
|
||||
### Build
|
||||
|
||||
Build je **podrazumijevani** režim sa svim omogućenim alatima. Ovo je standardni način rada za razvoj kada vam treba pun pristup fajlovima i sistemskim komandama.
|
||||
|
||||
### Plan
|
||||
|
||||
Ograničeni način rada dizajniran za planiranje i analizu. U načinu plana, sljedeći alati su onemogućeni prema zadanim postavkama:
|
||||
|
||||
- `write` - Ne mogu kreirati nove fajlove
|
||||
- `edit` - Ne mogu modificirati postojeće fajlove, osim fajlova koji se nalaze na `.opencode/plans/*.md` radi detaljiziranja samog plana
|
||||
- `patch` - Ne mogu primijeniti zakrpe
|
||||
- `bash` - Ne mogu izvršiti naredbe ljuske
|
||||
Ovaj način rada je koristan kada želite da AI analizira kod, predlaže promjene ili kreira planove bez ikakvih stvarnih modifikacija u vašoj bazi kodova.
|
||||
|
||||
---
|
||||
|
||||
## Prebacivanje
|
||||
|
||||
Možete se prebacivati između načina rada tokom sesije pomoću tipke _Tab_. Ili vaše konfigurirano `switch_mode` spajanje tipki.
|
||||
Vidi također: [Formatters](/docs/formatters) za informacije o konfiguraciji formatiranja koda.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete prilagoditi ugrađene načine rada ili kreirati vlastite kroz konfiguraciju. Modovi se mogu konfigurirati na dva načina:
|
||||
|
||||
### JSON konfiguracija
|
||||
|
||||
Konfigurirajte načine rada u svom `opencode.json` konfiguracijskom fajlu:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"build": {
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Markdown konfiguracija
|
||||
|
||||
Također možete definirati načine rada koristeći markdown datoteke. Postavite ih u:
|
||||
|
||||
- Globalno: `~/.config/opencode/modes/`
|
||||
- Projekat: `.opencode/modes/`
|
||||
|
||||
```markdown title="~/.config/opencode/modes/review.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Naziv datoteke s uštedom postaje naziv načina (npr. `review.md` kreira `review` način rada).
|
||||
Pogledajmo ove opcije konfiguracije detaljno.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Koristite `model` konfiguraciju da nadjačate zadani model za ovaj način rada. Korisno za korištenje različitih modela optimiziranih za različite zadatke. Na primjer, brži model za planiranje, sposobniji model za implementaciju.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Temperatura
|
||||
|
||||
Kontrolišite slučajnost i kreativnost odgovora AI pomoću `temperature` konfiguracije. Niže vrijednosti čine odgovore fokusiranijim i determinističkim, dok veće vrijednosti povećavaju kreativnost i varijabilnost.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vrijednosti temperature obično se kreću od 0,0 do 1,0:
|
||||
|
||||
- **0,0-0,2**: Vrlo fokusirani i deterministički odgovori, idealni za analizu i planiranje koda
|
||||
- **0,3-0,5**: Uravnoteženi odgovori sa malo kreativnosti, dobro za opšte razvojne zadatke
|
||||
- **0,6-1,0**: kreativniji i raznovrsniji odgovori, korisni za razmišljanje i istraživanje
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako temperatura nije navedena, opencode koristi podrazumijevane postavke specifične za model (obično 0 za većinu modela i 0.55 za Qwen modele).
|
||||
|
||||
### Upit
|
||||
|
||||
Navedite prilagođenu sistemsku datoteku prompta za ovaj način rada s konfiguracijom `prompt`. Datoteka s promptom treba da sadrži upute specifične za svrhu načina rada.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ova putanja je relativna u odnosu na mjesto gdje se nalazi konfiguracijski fajl. Dakle, ovo radi za
|
||||
i globalnu konfiguraciju otvorenog koda i konfiguraciju specifične za projekat.
|
||||
|
||||
---
|
||||
|
||||
### Alati
|
||||
|
||||
Kontrolirajte koji su alati dostupni u ovom načinu rada pomoću `tools` konfiguracije. Možete omogućiti ili onemogućiti određene alate tako što ćete ih postaviti na `true` ili `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ako nijedan alat nije specificiran, svi alati su omogućeni po defaultu.
|
||||
|
||||
#### Dostupni alati
|
||||
|
||||
Ovdje su svi alati koji se mogu kontrolirati kroz konfiguraciju načina rada.
|
||||
| Alat | Opis
|
||||
|----------- | ----------------------- |
|
||||
| `bash` | Izvrši naredbe ljuske |
|
||||
| `edit` | Izmijenite postojeće datoteke |
|
||||
| `write` | Kreirajte nove fajlove |
|
||||
| `read` | Pročitajte sadržaj datoteke |
|
||||
| `grep` | Pretraži sadržaj datoteke |
|
||||
| `glob` | Pronađite datoteke po uzorku |
|
||||
| `patch` | Primijenite zakrpe na datoteke |
|
||||
| `todowrite` | Upravljanje listama zadataka |
|
||||
| `webfetch` | Dohvati web sadržaj |
|
||||
|
||||
---
|
||||
|
||||
## Prilagođeni načini rada
|
||||
|
||||
Možete kreirati vlastite prilagođene modove tako što ćete ih dodati u konfiguraciju. Evo primjera koji koriste oba pristupa:
|
||||
|
||||
### Korištenje JSON konfiguracije
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"docs": {
|
||||
"prompt": "{file:./prompts/documentation.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Korištenje markdown fajlova
|
||||
|
||||
Kreirajte fajlove načina u `.opencode/modes/` za specifične načine rada ili `~/.config/opencode/modes/` za globalne načine:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Understanding the problem through careful analysis
|
||||
- Using bash commands to inspect system state
|
||||
- Reading relevant files and logs
|
||||
- Searching for patterns and anomalies
|
||||
- Providing clear explanations of findings
|
||||
|
||||
Do not make any changes to files. Only investigate and report.
|
||||
```
|
||||
|
||||
```markdown title="~/.config/opencode/modes/refactor.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.2
|
||||
tools:
|
||||
edit: true
|
||||
read: true
|
||||
grep: true
|
||||
glob: true
|
||||
---
|
||||
|
||||
You are in refactoring mode. Focus on improving code quality without changing functionality.
|
||||
|
||||
Priorities:
|
||||
|
||||
- Improve code readability and maintainability
|
||||
- Apply consistent naming conventions
|
||||
- Reduce code duplication
|
||||
- Optimize performance where appropriate
|
||||
- Ensure all tests continue to pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Slučajevi upotrebe
|
||||
|
||||
Evo nekoliko uobičajenih slučajeva upotrebe za različite načine rada.
|
||||
|
||||
- **Build mode**: Potpuni razvojni rad sa svim omogućenim alatima
|
||||
- **Plan mode**: Analiza i planiranje bez izmjena
|
||||
- **Review mode**: Pregled koda sa pristupom samo za čitanje plus alati za dokumentaciju
|
||||
- **Debug mode**: Fokusiran na istragu sa omogućenim bash i alatima za čitanje
|
||||
- **Docs mode**: Pisanje dokumentacije sa operacijama datoteka, ali bez sistemskih naredbi
|
||||
Možda ćete također otkriti da su različiti modeli dobri za različite slučajeve upotrebe.
|
||||
51
qimingcode/packages/web/src/content/docs/bs/network.mdx
Normal file
51
qimingcode/packages/web/src/content/docs/bs/network.mdx
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: Mreža
|
||||
description: Konfigurirajte proksije i prilagođene certifikate.
|
||||
---
|
||||
|
||||
OpenCode podržava standardne proxy varijable okruženja i prilagođene certifikate za enterprise mrežna okruženja.
|
||||
|
||||
## Proksi
|
||||
|
||||
OpenCode poštuje standardne varijable proxy okruženja.
|
||||
|
||||
```bash
|
||||
# HTTPS proxy (recommended)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# HTTP proxy (if HTTPS not available)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# Bypass proxy for local server (required)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
TUI komunicira sa lokalnim HTTP serverom. Morate zaobići proxy za ovu vezu kako biste spriječili petlje usmjeravanja.
|
||||
:::
|
||||
|
||||
Možete konfigurirati port servera i naziv hosta koristeći [CLI flags](/docs/cli#run).
|
||||
|
||||
### Autentikacija
|
||||
|
||||
Ako vaš proxy zahtijeva osnovnu autentifikaciju, uključite vjerodajnice u URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
Izbjegavajte tvrdo kodiranje lozinki. Koristite varijable okruženja ili sigurno skladište vjerodajnica.
|
||||
:::
|
||||
|
||||
Za proxy servere koji zahtijevaju naprednu autentifikaciju poput NTLM ili Kerberos, razmotrite LLM Gateway koji podržava vašu metodu autentifikacije.
|
||||
|
||||
## Prilagođeni certifikati
|
||||
|
||||
Ako vaše preduzeće koristi prilagođene CA-ove za HTTPS veze, konfigurirajte OpenCode da im vjeruje.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
Ovo radi i za proxy veze i za direktan pristup API-ju.
|
||||
228
qimingcode/packages/web/src/content/docs/bs/permissions.mdx
Normal file
228
qimingcode/packages/web/src/content/docs/bs/permissions.mdx
Normal file
@@ -0,0 +1,228 @@
|
||||
---
|
||||
title: Dozvole
|
||||
description: Kontrolirajte koje radnje zahtijevaju odobrenje za pokretanje.
|
||||
---
|
||||
|
||||
OpenCode koristi `permission` konfiguraciju da odluči da li će se određena radnja pokrenuti automatski, zatražiti od vas ili biti blokirana.
|
||||
Od `v1.1.1`, naslijeđena `tools` logička konfiguracija je zastarjela i spojena je u `permission`. Stara `tools` konfiguracija je još uvijek podržana za kompatibilnost unatrag.
|
||||
|
||||
---
|
||||
|
||||
## Akcije
|
||||
|
||||
Svako pravilo dozvole rješava jedno od:
|
||||
|
||||
- `"allow"` — pokrenuti bez odobrenja
|
||||
- `"ask"` — upit za odobrenje
|
||||
- `"deny"` — blokiraj akciju
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Dozvole možete postaviti globalno (sa `*`) i nadjačati određene alate.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Također možete postaviti sve dozvole odjednom:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Granularna pravila (sintaksa objekta)
|
||||
|
||||
Za većinu dozvola, možete koristiti objekt za primjenu različitih radnji na osnovu unosa alata.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"npm *": "allow",
|
||||
"rm *": "deny",
|
||||
"grep *": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"*": "deny",
|
||||
"packages/web/src/content/docs/*.mdx": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Pravila se procjenjuju na osnovu podudaranja uzorka, pri čemu **pobjeđuje **poslednje odgovarajuće pravilo\*\_. Uobičajeni obrazac je da se prvo pravilo `"*"` stavi sveobuhvatno, a poslije njega konkretnija pravila.
|
||||
|
||||
### Zamjenski znakovi
|
||||
|
||||
Uzorci dozvola koriste jednostavno podudaranje zamjenskih znakova:
|
||||
|
||||
- `*` odgovara nula ili više bilo kojeg znaka
|
||||
- `?` odgovara tačno jednom znaku
|
||||
- Svi ostali likovi se bukvalno podudaraju
|
||||
|
||||
### Proširenje kućnog direktorija
|
||||
|
||||
Možete koristiti `~` ili `$HOME` na početku obrasca da referencirate svoj početni direktorij. Ovo je posebno korisno za [`external_directory`](#external-directories) pravila.
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### Vanjski direktoriji
|
||||
|
||||
Koristite `external_directory` da dozvolite pozive alata koji dodiruju putanje izvan radnog direktorija gdje je OpenCode pokrenut. Ovo se odnosi na bilo koji alat koji uzima putanju kao ulaz (na primjer `read`, `edit`, `glob`, `grep` i mnoge `bash` komande).
|
||||
Proširenje kuće (poput `~/...`) utiče samo na način na koji je obrazac napisan. Ne čini vanjsku stazu dijelom trenutnog radnog prostora, tako da staze izvan radnog direktorija i dalje moraju biti dozvoljene preko `external_directory`.
|
||||
Na primjer, ovo omogućava pristup svemu pod `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Svaki direktorij koji je ovdje dozvoljen nasljeđuje iste zadane postavke kao trenutni radni prostor. Pošto je [`read` zadano na `allow`](#defaults), čitanje je također dozvoljeno za unose pod `external_directory` osim ako se ne poništi. Dodajte eksplicitna pravila kada bi alat trebao biti ograničen na ovim stazama, kao što je blokiranje uređivanja uz zadržavanje čitanja:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Držite ovu listu fokusiranom na pouzdane putanje, a dodatna allow/deny pravila dodajte po potrebi za druge alate (npr. `bash`).
|
||||
|
||||
## Dostupne dozvole
|
||||
|
||||
Dozvole OpenCode su označene imenom alata, plus nekoliko sigurnosnih mjera:
|
||||
|
||||
- `read` — čitanje datoteke (odgovara putanji datoteke)
|
||||
- `edit` — sve izmjene fajlova (pokriva `edit`, `write`, `patch`)
|
||||
- `glob` — globbiranje fajla (odgovara glob uzorku)
|
||||
- `grep` — pretraga sadržaja (podudara se sa regularnim izrazom)
|
||||
- `bash` — izvođenje komandi ljuske (podudara se s raščlanjenim komandama kao što je `git status --porcelain`)
|
||||
- `task` — pokretanje subagenta (odgovara tipu podagenta)
|
||||
- `skill` — učitavanje vještine (odgovara nazivu vještine)
|
||||
- `lsp` — pokretanje LSP upita (trenutno negranularno)
|
||||
- `webfetch` — dohvaćanje URL-a (odgovara URL-u)
|
||||
- `websearch`, `codesearch` — pretraživanje weba/koda (odgovara upitu)
|
||||
- `external_directory` — pokreće se kada alat dodirne staze izvan radnog direktorija projekta
|
||||
- `doom_loop` — aktivira se kada se isti poziv alata ponovi 3 puta sa identičnim unosom
|
||||
|
||||
---
|
||||
|
||||
## Zadane postavke
|
||||
|
||||
Ako ništa ne navedete, OpenCode počinje od dozvoljenih zadanih vrijednosti:
|
||||
|
||||
- Većina dozvola je zadana na `"allow"`.
|
||||
- `doom_loop` i `external_directory` zadano na `"ask"`.
|
||||
- `read` je `"allow"`, ali `.env` fajlovi su po defaultu odbijeni:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Šta radi “Ask”
|
||||
|
||||
Kada OpenCode zatraži odobrenje, korisničko sučelje nudi tri ishoda:
|
||||
|
||||
- `once` — odobri samo ovaj zahtjev
|
||||
- `always` — odobri buduće zahtjeve koji odgovaraju predloženim obrascima (za ostatak trenutne OpenCode sesije)
|
||||
- `reject` — odbiti zahtjev
|
||||
Skup obrazaca koje bi `always` odobrio pruža alat (na primjer, bash odobrenja obično stavljaju na bijelu listu sigurni prefiks komande kao što je `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## Agenti
|
||||
|
||||
Možete nadjačati dozvole po agentu. Dozvole agenta su spojene sa globalnom konfiguracijom, a pravila agenta imaju prednost. [Saznajte više](/docs/agents#permissions) o dozvolama agenta.
|
||||
:::note
|
||||
Pogledajte gornji odjeljak [Granularna pravila (sintaksa objekata)](#granular-rules-object-syntax) za detaljnije primjere podudaranja uzoraka.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "deny",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "ask",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Također možete konfigurirati dozvole agenta u Markdownu:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Koristite podudaranje uzoraka za naredbe s argumentima. `"grep *"` dozvoljava `grep pattern file.txt`, dok bi ga samo `"grep"` blokirao. Naredbe poput `git status` rade za zadano ponašanje, ali zahtijevaju eksplicitnu dozvolu (kao `"git status *"`) kada se prosljeđuju argumenti.
|
||||
:::
|
||||
371
qimingcode/packages/web/src/content/docs/bs/plugins.mdx
Normal file
371
qimingcode/packages/web/src/content/docs/bs/plugins.mdx
Normal file
@@ -0,0 +1,371 @@
|
||||
---
|
||||
title: Dodaci
|
||||
description: Napišite vlastite dodatke za proširenje OpenCode.
|
||||
---
|
||||
|
||||
Dodaci vam omogućavaju da proširite OpenCode spajanjem na različite događaje i prilagođavanjem ponašanja. Možete kreirati dodatke za dodavanje novih funkcija, integraciju sa eksternim uslugama ili izmenu zadanog ponašanja OpenCode.
|
||||
Za primjere, pogledajte [plugins](/docs/ecosystem#plugins) kreirane od strane zajednice.
|
||||
|
||||
---
|
||||
|
||||
## Korištenje dodatka
|
||||
|
||||
Postoje dva načina za učitavanje dodataka.
|
||||
|
||||
### Iz lokalnih datoteka
|
||||
|
||||
Postavite JavaScript ili TypeScript datoteke u direktorij dodataka.
|
||||
|
||||
- `.opencode/plugins/` - Dodaci na nivou projekta
|
||||
- `~/.config/opencode/plugins/` - Globalni dodaci
|
||||
Datoteke u ovim direktorijumima se automatski učitavaju pri pokretanju.
|
||||
|
||||
---
|
||||
|
||||
### Iz npm-a
|
||||
|
||||
Navedite npm pakete u vašoj konfiguracijskoj datoteci.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
Podržani su i regularni i npm paketi sa opsegom.
|
||||
Pregledajte dostupne dodatke u [ecosystem](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Kako se instaliraju dodaci
|
||||
|
||||
**npm dodaci** se instaliraju automatski pomoću Bun pri pokretanju. Paketi i njihove zavisnosti su keširani u `~/.cache/opencode/node_modules/`.
|
||||
**Lokalni dodaci** se učitavaju direktno iz direktorija dodataka. Da biste koristili vanjske pakete, morate kreirati `package.json` unutar svog konfiguracijskog direktorija (pogledajte [Zavisnosti](#dependencies)) ili objaviti dodatak na npm i [dodati ga u svoju konfiguraciju](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Redoslijed učitavanja
|
||||
|
||||
Dodaci se učitavaju iz svih izvora i svi zakačnjaci rade u nizu. Redoslijed učitavanja je:
|
||||
|
||||
1. Globalna konfiguracija (`~/.config/opencode/opencode.json`)
|
||||
2. Konfiguracija projekta (`opencode.json`)
|
||||
3. Globalni direktorij dodataka (`~/.config/opencode/plugins/`)
|
||||
4. Direktorij dodataka projekta (`.opencode/plugins/`)
|
||||
Duplicirani npm paketi sa istim imenom i verzijom se učitavaju jednom. Međutim, lokalni dodatak i npm dodatak sa sličnim nazivima se učitavaju odvojeno.
|
||||
|
||||
---
|
||||
|
||||
## Kreiranje dodatka
|
||||
|
||||
Dodatak je **JavaScript/TypeScript modul** koji izvozi jedan ili više dodataka
|
||||
funkcije. Svaka funkcija prima objekt konteksta i vraća hooks objekt.
|
||||
|
||||
---
|
||||
|
||||
### Zavisnosti
|
||||
|
||||
Lokalni dodaci i prilagođeni alati mogu koristiti vanjske npm pakete. Dodajte `package.json` u svoj konfiguracijski direktorij sa zavisnostima koje su vam potrebne.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
OpenCode pokreće `bun install` pri pokretanju da ih instalira. Vaši dodaci i alati ih zatim mogu uvesti.
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
import { escape } from "shescape"
|
||||
|
||||
export const MyPlugin = async (ctx) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "bash") {
|
||||
output.args.command = escape(output.args.command)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Osnovna struktura
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin initialized!")
|
||||
|
||||
return {
|
||||
// Hook implementations go here
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Funkcija dodatka prima:
|
||||
|
||||
- `project`: Trenutne informacije o projektu.
|
||||
- `directory`: Trenutni radni direktorij.
|
||||
- `worktree`: Putanja git radnog stabla.
|
||||
- `client`: Opencode SDK klijent za interakciju sa AI.
|
||||
- `$`: Bun's [shell API](https://bun.com/docs/runtime/shell) za izvršavanje naredbi.
|
||||
|
||||
---
|
||||
|
||||
### Podrška za TypeScript
|
||||
|
||||
Za TypeScript dodatke, možete uvesti tipove iz paketa dodataka:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Type-safe hook implementations
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Događaji
|
||||
|
||||
Dodaci se mogu pretplatiti na događaje kao što je prikazano ispod u odjeljku Primjeri. Evo liste različitih dostupnih događaja.
|
||||
|
||||
#### Komandni događaji
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### Događaji datoteka
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### Instalacijski događaji
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### LSP događaji
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### Događaji poruka
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### Događaji dozvola
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### Serverski događaji
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### Događaji sesije
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### Todo događaji
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### Shell događaji
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### Događaji alata
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### TUI događaji
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## Primjeri
|
||||
|
||||
Evo nekoliko primjera dodataka koje možete koristiti za proširenje OpenCode.
|
||||
|
||||
### Slanje obavještenja
|
||||
|
||||
Pošaljite obavještenja kada se dogode određeni događaji:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Send notification on session completion
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Koristimo `osascript` za pokretanje AppleScript-a na macOS-u. Ovdje ga koristimo za slanje obavještenja.
|
||||
:::note
|
||||
Ako alat dodatka koristi isto ime kao ugrađeni alat, alat dodatka ima prednost.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### .env zaštita
|
||||
|
||||
Spriječite opencode da čita `.env` fajlove:
|
||||
|
||||
```javascript title=".opencode/plugins/env-protection.js"
|
||||
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "read" && output.args.filePath.includes(".env")) {
|
||||
throw new Error("Do not read .env files")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Ubacivanje varijabli okruženja
|
||||
|
||||
Ubacite varijable okruženja u sva izvršavanja ljuske (AI alati i korisnički terminali):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secret"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prilagođeni alati
|
||||
|
||||
Dodaci također mogu dodati prilagođene alate u opencode:
|
||||
|
||||
```ts title=".opencode/plugins/custom-tools.ts"
|
||||
import { type Plugin, tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomToolsPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
tool: {
|
||||
mytool: tool({
|
||||
description: "This is a custom tool",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Pomoćnik `tool` kreira prilagođeni alat koji opencode može pozvati. Uzima funkciju Zod sheme i vraća definiciju alata sa:
|
||||
|
||||
- `description`: Šta alat radi
|
||||
- `args`: Zod šema za argumente alata
|
||||
- `execute`: Funkcija koja se pokreće kada se pozove alat
|
||||
Vaši prilagođeni alati će biti dostupni za opencode zajedno sa ugrađenim alatima.
|
||||
|
||||
---
|
||||
|
||||
### Bilježenje
|
||||
|
||||
Koristite `client.app.log()` umjesto `console.log` za strukturirano bilježenje:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin initialized",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Nivoi su: `debug`, `info`, `warn`, `error`. Pogledajte [SDK dokumentaciju](https://opencode.ai/docs/sdk) za detalje.
|
||||
|
||||
### Kuke za sažimanje
|
||||
|
||||
Prilagodite kontekst uključen kada se sesija zbije:
|
||||
|
||||
```ts title=".opencode/plugins/compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Inject additional context into the compaction prompt
|
||||
output.context.push(`
|
||||
## Custom Context
|
||||
|
||||
Include any state that should persist across compaction:
|
||||
- Current task status
|
||||
- Important decisions made
|
||||
- Files being actively worked on
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`experimental.session.compacting` kuka se aktivira prije nego što LLM generira sažetak nastavka. Koristite ga za ubacivanje konteksta specifičnog za domenu koji bi zadani prompt za sažimanje propustio.
|
||||
Također možete u potpunosti zamijeniti prompt za sabijanje postavljanjem `output.prompt`:
|
||||
|
||||
```ts title=".opencode/plugins/custom-compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomCompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Replace the entire compaction prompt
|
||||
output.prompt = `
|
||||
You are generating a continuation prompt for a multi-agent swarm session.
|
||||
|
||||
Summarize:
|
||||
1. The current task and its status
|
||||
2. Which files are being modified and by whom
|
||||
3. Any blockers or dependencies between agents
|
||||
4. The next steps to complete the work
|
||||
|
||||
Format as a structured prompt that a new agent can use to resume work.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Kada je `output.prompt` postavljen, on u potpunosti zamjenjuje zadani prompt za sažimanje. Niz `output.context` se zanemaruje u ovom slučaju.
|
||||
1955
qimingcode/packages/web/src/content/docs/bs/providers.mdx
Normal file
1955
qimingcode/packages/web/src/content/docs/bs/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
qimingcode/packages/web/src/content/docs/bs/rules.mdx
Normal file
180
qimingcode/packages/web/src/content/docs/bs/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: Pravila
|
||||
description: Postavite prilagodena uputstva za opencode.
|
||||
---
|
||||
|
||||
Mozete dodati prilagodena uputstva za opencode tako sto kreirate `AGENTS.md` datoteku. Ovo je slicno pravilima u Cursor-u. Sadrzi uputstva koja se ubacuju u LLM kontekst da prilagode ponasanje za vas projekat.
|
||||
|
||||
---
|
||||
|
||||
## Inicijalizacija
|
||||
|
||||
Da kreirate novu `AGENTS.md` datoteku, pokrenite `/init` komandu u opencode.
|
||||
|
||||
:::tip
|
||||
Preporuceno je da `AGENTS.md` iz projekta commitujete u Git.
|
||||
:::
|
||||
|
||||
Ovo skenira projekat i njegov sadrzaj, razumije cemu projekat sluzi i generise `AGENTS.md`. Tako opencode bolje navigira kroz kod.
|
||||
|
||||
Ako vec imate `AGENTS.md`, komanda ce pokusati da ga dopuni.
|
||||
|
||||
---
|
||||
|
||||
## Primjer
|
||||
|
||||
Datoteku mozete napraviti i rucno. Evo primjera sta mozete staviti u `AGENTS.md`.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# SST v3 Monorepo Project
|
||||
|
||||
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
|
||||
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Main SST configuration with dynamic imports
|
||||
|
||||
## Code Standards
|
||||
|
||||
- Use TypeScript with strict mode enabled
|
||||
- Shared code goes in `packages/core/` with proper exports configuration
|
||||
- Functions go in `packages/functions/`
|
||||
- Infrastructure should be split into logical files in `infra/`
|
||||
|
||||
## Monorepo Conventions
|
||||
|
||||
- Import shared modules using workspace names: `@my-app/core/example`
|
||||
```
|
||||
|
||||
Ovdje dodajete uputstva specificna za projekat koja se dijele sa timom.
|
||||
|
||||
---
|
||||
|
||||
## Tipovi
|
||||
|
||||
opencode podrzava citanje `AGENTS.md` datoteke sa vise lokacija. Svaka lokacija ima drugu svrhu.
|
||||
|
||||
### Projekat
|
||||
|
||||
Stavite `AGENTS.md` u korijen projekta za pravila specificna za taj projekat. Primjenjuju se samo kada radite u tom direktoriju ili poddirektorijima.
|
||||
|
||||
### Globalno
|
||||
|
||||
Mozete imati i globalna pravila u `~/.config/opencode/AGENTS.md`. Ona se primjenjuju u svim opencode sesijama.
|
||||
|
||||
Posto se ovo ne commituje u Git niti dijeli s timom, najbolje je da ovdje cuvate licna pravila koja LLM treba pratiti.
|
||||
|
||||
### Kompatibilnost s Claude Code
|
||||
|
||||
Za korisnike koji prelaze sa Claude Code, OpenCode podrzava i Claude konvencije datoteka kao rezervu:
|
||||
|
||||
- **Pravila projekta**: `CLAUDE.md` u direktoriju projekta (koristi se ako ne postoji `AGENTS.md`)
|
||||
- **Globalna pravila**: `~/.claude/CLAUDE.md` (koristi se ako ne postoji `~/.config/opencode/AGENTS.md`)
|
||||
- **Skills**: `~/.claude/skills/` — pogledajte [Agent Skills](/docs/skills/) za detalje
|
||||
|
||||
Da iskljucite kompatibilnost sa Claude Code, postavite jednu od ovih varijabli okruzenja:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prioritet
|
||||
|
||||
Kada se opencode pokrene, trazi datoteke pravila ovim redoslijedom:
|
||||
|
||||
1. **Lokalne datoteke** pretrazivanjem prema gore od trenutnog direktorija (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **Globalna datoteka** na `~/.config/opencode/AGENTS.md`
|
||||
3. **Claude Code datoteka** na `~/.claude/CLAUDE.md` (osim ako je iskljucena)
|
||||
|
||||
Prva pronadena datoteka pobjeduje u svakoj kategoriji. Na primjer, ako imate i `AGENTS.md` i `CLAUDE.md`, koristi se samo `AGENTS.md`. Isto tako, `~/.config/opencode/AGENTS.md` ima prednost nad `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## Prilagođena uputstva
|
||||
|
||||
Mozete navesti prilagodene datoteke uputstava u `opencode.json` ili globalnom `~/.config/opencode/opencode.json`. Tako vi i tim ponovo koristite postojeca pravila bez dupliranja u AGENTS.md.
|
||||
|
||||
Primjer:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Mozete koristiti i udaljene URL-ove za ucitavanje uputstava sa weba.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Udaljena uputstva se preuzimaju uz timeout od 5 sekundi.
|
||||
|
||||
Sve datoteke uputstava se kombinuju sa vasim `AGENTS.md` datotekama.
|
||||
|
||||
---
|
||||
|
||||
## Referenciranje eksternih datoteka
|
||||
|
||||
Iako opencode ne parsira automatski reference datoteka u `AGENTS.md`, slicno ponasanje mozete dobiti na dva nacina:
|
||||
|
||||
### Korištenje opencode.json
|
||||
|
||||
Preporuceni pristup je da koristite `instructions` polje u `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### Ručna uputstva u AGENTS.md
|
||||
|
||||
Mozete nauciti opencode da cita eksterne datoteke tako sto cete dati eksplicitna uputstva u `AGENTS.md`. Evo prakticnog primjera:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# TypeScript Project Rules
|
||||
|
||||
## External File Loading
|
||||
|
||||
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
|
||||
|
||||
Instructions:
|
||||
|
||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
||||
- When loaded, treat content as mandatory instructions that override defaults
|
||||
- Follow references recursively when needed
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
For TypeScript code style and best practices: @docs/typescript-guidelines.md
|
||||
For React component architecture and hooks patterns: @docs/react-patterns.md
|
||||
For REST API design and error handling: @docs/api-standards.md
|
||||
For testing strategies and coverage requirements: @test/testing-guidelines.md
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
Ovaj pristup vam omogucava da:
|
||||
|
||||
- Kreirate modularne datoteke pravila koje se mogu ponovo koristiti
|
||||
- Dijelite pravila izmedu projekata kroz symlinkove ili git submodule
|
||||
- Drzite AGENTS.md kratkim dok upucujete na detaljne smjernice
|
||||
- Osigurate da opencode ucitava datoteke samo kad su potrebne za konkretan zadatak
|
||||
|
||||
:::tip
|
||||
Za monorepo projekte ili projekte sa zajednickim standardima, odrzivije je koristiti `opencode.json` sa glob obrascima (npr. `packages/*/AGENTS.md`) nego rucna uputstva.
|
||||
:::
|
||||
463
qimingcode/packages/web/src/content/docs/bs/sdk.mdx
Normal file
463
qimingcode/packages/web/src/content/docs/bs/sdk.mdx
Normal file
@@ -0,0 +1,463 @@
|
||||
---
|
||||
title: SDK
|
||||
description: Type-safe JS klijent za opencode server.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
opencode JS/TS SDK pruza type-safe klijent za interakciju sa serverom.
|
||||
Koristite ga za izradu integracija i programsko upravljanje opencode-om.
|
||||
|
||||
[Saznajte vise](/docs/server) kako server radi. Za primjere pogledajte [projects](/docs/ecosystem#projects) koje je napravila zajednica.
|
||||
|
||||
---
|
||||
|
||||
## Instalacija
|
||||
|
||||
Instalirajte SDK sa npm-a:
|
||||
|
||||
```bash
|
||||
npm install @opencode-ai/sdk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kreiranje klijenta
|
||||
|
||||
Kreirajte instancu opencode:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const { client } = await createOpencode()
|
||||
```
|
||||
|
||||
Ovo pokrece i server i klijent
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Tip | Opis | Default |
|
||||
| ---------- | ------------- | ----------------------------- | ----------- |
|
||||
| `hostname` | `string` | Hostname servera | `127.0.0.1` |
|
||||
| `port` | `number` | Port servera | `4096` |
|
||||
| `signal` | `AbortSignal` | Abort signal za otkazivanje | `undefined` |
|
||||
| `timeout` | `number` | Timeout u ms za start servera | `5000` |
|
||||
| `config` | `Config` | Konfiguracijski objekat | `{}` |
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Mozete proslijediti konfiguracijski objekat za prilagodavanje ponasanja. Instanca i dalje ucitava `opencode.json`, ali konfiguraciju mozete nadjacati ili dodati inline:
|
||||
|
||||
```javascript
|
||||
import { createOpencode } from "@opencode-ai/sdk"
|
||||
|
||||
const opencode = await createOpencode({
|
||||
hostname: "127.0.0.1",
|
||||
port: 4096,
|
||||
config: {
|
||||
model: "anthropic/claude-3-5-sonnet-20241022",
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`Server running at ${opencode.server.url}`)
|
||||
|
||||
opencode.server.close()
|
||||
```
|
||||
|
||||
## Samo klijent
|
||||
|
||||
Ako vec imate pokrenutu opencode instancu, mozete napraviti klijentsku instancu i povezati se na nju:
|
||||
|
||||
```javascript
|
||||
import { createOpencodeClient } from "@opencode-ai/sdk"
|
||||
|
||||
const client = createOpencodeClient({
|
||||
baseUrl: "http://localhost:4096",
|
||||
})
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Tip | Opis | Default |
|
||||
| --------------- | ---------- | --------------------------------- | ----------------------- |
|
||||
| `baseUrl` | `string` | URL servera | `http://localhost:4096` |
|
||||
| `fetch` | `function` | Prilagodena fetch implementacija | `globalThis.fetch` |
|
||||
| `parseAs` | `string` | Metoda parsiranja odgovora | `auto` |
|
||||
| `responseStyle` | `string` | Stil povrata: `data` ili `fields` | `fields` |
|
||||
| `throwOnError` | `boolean` | Baci greske umjesto povrata | `false` |
|
||||
|
||||
---
|
||||
|
||||
## Tipovi
|
||||
|
||||
SDK ukljucuje TypeScript definicije za sve API tipove. Uvezite ih direktno:
|
||||
|
||||
```typescript
|
||||
import type { Session, Message, Part } from "@opencode-ai/sdk"
|
||||
```
|
||||
|
||||
Svi tipovi su generisani iz OpenAPI specifikacije servera i dostupni u <a href={typesUrl}>types datoteci</a>.
|
||||
|
||||
---
|
||||
|
||||
## Greške
|
||||
|
||||
SDK moze baciti greske koje mozete uhvatiti i obraditi:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await client.session.get({ path: { id: "invalid-id" } })
|
||||
} catch (error) {
|
||||
console.error("Failed to get session:", (error as Error).message)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Strukturirani izlaz
|
||||
|
||||
Možete zatražiti strukturirani JSON izlaz od modela specificiranjem `format` sa JSON šemom. Model će koristiti `StructuredOutput` alat da vrati validirani JSON koji odgovara vašoj šemi.
|
||||
|
||||
### Osnovna upotreba
|
||||
|
||||
```typescript
|
||||
const result = await client.session.prompt({
|
||||
path: { id: sessionId },
|
||||
body: {
|
||||
parts: [{ type: "text", text: "Research Anthropic and provide company info" }],
|
||||
format: {
|
||||
type: "json_schema",
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
company: { type: "string", description: "Company name" },
|
||||
founded: { type: "number", description: "Year founded" },
|
||||
products: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "Main products",
|
||||
},
|
||||
},
|
||||
required: ["company", "founded"],
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
// Access the structured output
|
||||
console.log(result.data.info.structured_output)
|
||||
// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }
|
||||
```
|
||||
|
||||
### Tipovi formata izlaza
|
||||
|
||||
| Tip | Opis |
|
||||
| ------------- | ------------------------------------------------------------------- |
|
||||
| `text` | Default. Standardni tekstualni odgovor (nema strukturiranog izlaza) |
|
||||
| `json_schema` | Vraća validirani JSON koji odgovara pruženoj šemi |
|
||||
|
||||
### Format JSON šeme
|
||||
|
||||
Kada koristite `type: 'json_schema'`, navedite:
|
||||
|
||||
| Polje | Tip | Opis |
|
||||
| ------------ | --------------- | ----------------------------------------------------------- |
|
||||
| `type` | `'json_schema'` | Obavezno. Određuje JSON schema način rada |
|
||||
| `schema` | `object` | Obavezno. JSON Schema objekt koji definira strukturu izlaza |
|
||||
| `retryCount` | `number` | Opcionalno. Broj ponovnih pokušaja validacije (default: 2) |
|
||||
|
||||
### Rukovanje greškama
|
||||
|
||||
Ako model ne uspije proizvesti validan strukturirani izlaz nakon svih ponovnih pokušaja, odgovor će uključivati `StructuredOutputError`:
|
||||
|
||||
```typescript
|
||||
if (result.data.info.error?.name === "StructuredOutputError") {
|
||||
console.error("Failed to produce structured output:", result.data.info.error.message)
|
||||
console.error("Attempts:", result.data.info.error.retries)
|
||||
}
|
||||
```
|
||||
|
||||
### Najbolje prakse
|
||||
|
||||
1. **Navedite jasne opise** u svojstvima vaše šeme kako biste pomogli modelu da razumije koje podatke treba izdvojiti
|
||||
2. **Koristite `required`** da odredite koja polja moraju biti prisutna
|
||||
3. **Držite šeme fokusiranim** - složene ugniježđene šeme modelu mogu biti teže za ispravno popunjavanje
|
||||
4. **Postavite odgovarajući `retryCount`** - povećajte za složene šeme, smanjite za jednostavne
|
||||
|
||||
---
|
||||
|
||||
## API-ji
|
||||
|
||||
SDK izlaže sve server API-je kroz type-safe klijent.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ----------------- | --------------------------- | ------------------------------------ |
|
||||
| `global.health()` | Provjera zdravlja i verzije | `{ healthy: true, version: string }` |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
const health = await client.global.health()
|
||||
console.log(health.data.version)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### App
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| -------------- | ----------------------- | ------------------------------------------- |
|
||||
| `app.log()` | Upis log zapisa | `boolean` |
|
||||
| `app.agents()` | Lista dostupnih agenata | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Write a log entry
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-app",
|
||||
level: "info",
|
||||
message: "Operation completed",
|
||||
},
|
||||
})
|
||||
|
||||
// List available agents
|
||||
const agents = await client.app.agents()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Project
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------------- | -------------------- | --------------------------------------------- |
|
||||
| `project.list()` | Lista svih projekata | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `project.current()` | Trenutni projekat | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// List all projects
|
||||
const projects = await client.project.list()
|
||||
|
||||
// Get current project
|
||||
const currentProject = await client.project.current()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Path
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------ | ---------------- | ---------------------------------------- |
|
||||
| `path.get()` | Trenutna putanja | <a href={typesUrl}><code>Path</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Get current path information
|
||||
const pathInfo = await client.path.get()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Konfiguracija
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `config.get()` | Info o konfiguraciji | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `config.providers()` | Lista provajdera i default modela | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
const config = await client.config.get()
|
||||
|
||||
const { providers, default: defaults } = await client.config.providers()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sesije
|
||||
|
||||
| Metoda | Opis | Napomene |
|
||||
| ---------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `session.list()` | List sessions | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.get({ path })` | Get session | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.children({ path })` | List child sessions | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.create({ body })` | Create session | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.delete({ path })` | Delete session | Returns `boolean` |
|
||||
| `session.update({ path, body })` | Update session properties | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.init({ path, body })` | Analyze app and create `AGENTS.md` | Returns `boolean` |
|
||||
| `session.abort({ path })` | Abort a running session | Returns `boolean` |
|
||||
| `session.share({ path })` | Share session | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unshare({ path })` | Unshare session | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.summarize({ path, body })` | Summarize session | Returns `boolean` |
|
||||
| `session.messages({ path })` | List messages in a session | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
|
||||
| `session.message({ path })` | Get message details | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.prompt({ path, body })` | Send prompt message | `body.noReply: true` returns UserMessage (context only). Default returns <a href={typesUrl}><code>AssistantMessage</code></a> with AI response. Supports `body.outputFormat` for [structured output](#strukturirani-izlaz) |
|
||||
| `session.command({ path, body })` | Send command to session | Returns `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.shell({ path, body })` | Run a shell command | Returns <a href={typesUrl}><code>AssistantMessage</code></a> |
|
||||
| `session.revert({ path, body })` | Revert a message | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unrevert({ path })` | Restore reverted messages | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Respond to a permission request | Returns `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Create and manage sessions
|
||||
const session = await client.session.create({
|
||||
body: { title: "My session" },
|
||||
})
|
||||
|
||||
const sessions = await client.session.list()
|
||||
|
||||
// Send a prompt message
|
||||
const result = await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
|
||||
parts: [{ type: "text", text: "Hello!" }],
|
||||
},
|
||||
})
|
||||
|
||||
// Inject context without triggering AI response (useful for plugins)
|
||||
await client.session.prompt({
|
||||
path: { id: session.id },
|
||||
body: {
|
||||
noReply: true,
|
||||
parts: [{ type: "text", text: "You are a helpful assistant." }],
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Datoteke
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `find.text({ query })` | Search for text in files | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `find.files({ query })` | Find files and directories by name | `string[]` (paths) |
|
||||
| `find.symbols({ query })` | Find workspace symbols | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `file.read({ query })` | Read a file | `{ type: "raw" \| "patch", content: string }` |
|
||||
| `file.status({ query? })` | Get status for tracked files | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
`find.files` supports a few optional query fields:
|
||||
|
||||
- `type`: `"file"` or `"directory"`
|
||||
- `directory`: override the project root for the search
|
||||
- `limit`: max results (1–200)
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Search and read files
|
||||
const textResults = await client.find.text({
|
||||
query: { pattern: "function.*opencode" },
|
||||
})
|
||||
|
||||
const files = await client.find.files({
|
||||
query: { query: "*.ts", type: "file" },
|
||||
})
|
||||
|
||||
const directories = await client.find.files({
|
||||
query: { query: "packages", type: "directory", limit: 20 },
|
||||
})
|
||||
|
||||
const content = await client.file.read({
|
||||
query: { path: "src/index.ts" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------------------------ | ------------------------- | --------- |
|
||||
| `tui.appendPrompt({ body })` | Append text to the prompt | `boolean` |
|
||||
| `tui.openHelp()` | Open the help dialog | `boolean` |
|
||||
| `tui.openSessions()` | Open the session selector | `boolean` |
|
||||
| `tui.openThemes()` | Open the theme selector | `boolean` |
|
||||
| `tui.openModels()` | Open the model selector | `boolean` |
|
||||
| `tui.submitPrompt()` | Submit the current prompt | `boolean` |
|
||||
| `tui.clearPrompt()` | Clear the prompt | `boolean` |
|
||||
| `tui.executeCommand({ body })` | Execute a command | `boolean` |
|
||||
| `tui.showToast({ body })` | Show toast notification | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Control TUI interface
|
||||
await client.tui.appendPrompt({
|
||||
body: { text: "Add this to prompt" },
|
||||
})
|
||||
|
||||
await client.tui.showToast({
|
||||
body: { message: "Task completed", variant: "success" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Auth
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------------- | ------------------------------ | --------- |
|
||||
| `auth.set({ ... })` | Set authentication credentials | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
await client.auth.set({
|
||||
path: { id: "anthropic" },
|
||||
body: { type: "api", key: "your-api-key" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Događaji
|
||||
|
||||
| Metoda | Opis | Odgovor |
|
||||
| ------------------- | ------------------------- | ------------------------- |
|
||||
| `event.subscribe()` | Server-sent events stream | Server-sent events stream |
|
||||
|
||||
---
|
||||
|
||||
#### Primjeri
|
||||
|
||||
```javascript
|
||||
// Listen to real-time events
|
||||
const events = await client.event.subscribe()
|
||||
for await (const event of events.stream) {
|
||||
console.log("Event:", event.type, event.properties)
|
||||
}
|
||||
```
|
||||
284
qimingcode/packages/web/src/content/docs/bs/server.mdx
Normal file
284
qimingcode/packages/web/src/content/docs/bs/server.mdx
Normal file
@@ -0,0 +1,284 @@
|
||||
---
|
||||
title: Server
|
||||
description: Komunicirajte s opencode serverom preko HTTP-a.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
Komanda `opencode serve` pokrece headless HTTP server koji izlaže OpenAPI endpoint koji opencode klijent moze koristiti.
|
||||
|
||||
---
|
||||
|
||||
### Korištenje
|
||||
|
||||
```bash
|
||||
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
|
||||
```
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Zastava | Opis | Default |
|
||||
| --------------- | ----------------------------------- | ---------------- |
|
||||
| `--port` | Port na kojem slusa | `4096` |
|
||||
| `--hostname` | Hostname na kojem slusa | `127.0.0.1` |
|
||||
| `--mdns` | Ukljuci mDNS otkrivanje | `false` |
|
||||
| `--mdns-domain` | Prilagodeni domen za mDNS servis | `opencode.local` |
|
||||
| `--cors` | Dodatni browser origin-i koje dozv. | `[]` |
|
||||
|
||||
`--cors` mozete navesti vise puta:
|
||||
|
||||
```bash
|
||||
opencode serve --cors http://localhost:5173 --cors https://app.example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Autentifikacija
|
||||
|
||||
Postavite `OPENCODE_SERVER_PASSWORD` da zastitite server HTTP basic auth mehanizmom. Korisnicko ime je po defaultu `opencode`, ili postavite `OPENCODE_SERVER_USERNAME` za nadjacavanje. Ovo vazi i za `opencode serve` i za `opencode web`.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Kako radi
|
||||
|
||||
Kada pokrenete `opencode`, pokrecu se TUI i server. TUI je klijent koji komunicira sa serverom. Server izlaže OpenAPI 3.1 spec endpoint koji se koristi i za generisanje [SDK-a](/docs/sdk).
|
||||
|
||||
:::tip
|
||||
Koristite opencode server za programsku interakciju sa opencode-om.
|
||||
:::
|
||||
|
||||
Ova arhitektura omogucava opencode podrsku za vise klijenata i programsku interakciju.
|
||||
|
||||
Mozete pokrenuti `opencode serve` da startate standalone server. Ako je opencode TUI vec pokrenut, `opencode serve` ce pokrenuti novi server.
|
||||
|
||||
---
|
||||
|
||||
#### Povezivanje na postojeći server
|
||||
|
||||
Kada pokrenete TUI, port i hostname se nasumicno dodijele. Umjesto toga, mozete zadati `--hostname` i `--port` [zastave](/docs/cli), pa se povezati na taj server.
|
||||
|
||||
Endpoint [`/tui`](#tui) mozete koristiti za upravljanje TUI-jem kroz server. Na primjer, mozete unaprijed popuniti ili pokrenuti prompt. Ovaj setup koriste OpenCode [IDE](/docs/ide) pluginovi.
|
||||
|
||||
---
|
||||
|
||||
## Specifikacija
|
||||
|
||||
Server objavljuje OpenAPI 3.1 specifikaciju koju mozete vidjeti na:
|
||||
|
||||
```
|
||||
http://<hostname>:<port>/doc
|
||||
```
|
||||
|
||||
Na primjer, `http://localhost:4096/doc`. Koristite specifikaciju da generisete klijente ili pregledate tipove zahtjeva i odgovora. Mozete je otvoriti i u Swagger exploreru.
|
||||
|
||||
---
|
||||
|
||||
## API-ji
|
||||
|
||||
opencode server izlaže sljedece API-je.
|
||||
|
||||
---
|
||||
|
||||
### Globalno
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ---------------- | ----------------------------------- | ------------------------------------ |
|
||||
| `GET` | `/global/health` | Dohvati zdravlje i verziju servera | `{ healthy: true, version: string }` |
|
||||
| `GET` | `/global/event` | Dohvati globalne događaje (SSE tok) | Event stream |
|
||||
|
||||
---
|
||||
|
||||
### Projekt
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------------------ | ------------------------ | --------------------------------------------- |
|
||||
| `GET` | `/project` | Izlistaj sve projekte | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `GET` | `/project/current` | Dohvati trenutni projekt | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Putanja i VCS
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------- | ------------------------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/path` | Dohvati trenutnu putanju | <a href={typesUrl}><code>Path</code></a> |
|
||||
| `GET` | `/vcs` | Dohvati VCS informacije za trenutni projekt | <a href={typesUrl}><code>VcsInfo</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Instanca
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------------------- | ----------------------- | --------- |
|
||||
| `POST` | `/instance/dispose` | Ugasi trenutnu instancu | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Konfiguracija
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------- | ------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/config` | Dohvati informacije o konfiguraciji | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `PATCH` | `/config` | Ažuriraj konfiguraciju | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `GET` | `/config/providers` | Izlistaj provajdere i zadane modele | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
### Provajder
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | -------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| `GET` | `/provider` | Izlistaj sve provajdere | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
|
||||
| `GET` | `/provider/auth` | Dohvati metode autentifikacije provajdera | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
|
||||
| `POST` | `/provider/{id}/oauth/authorize` | Autoriziraj provajdera koristeći OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
|
||||
| `POST` | `/provider/{id}/oauth/callback` | Obradi OAuth povratni poziv za provajdera | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Sesije
|
||||
|
||||
| Metoda | Putanja | Opis | Napomene |
|
||||
| -------- | ---------------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session` | Izlistaj sve sesije | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `POST` | `/session` | Kreiraj novu sesiju | body: `{ parentID?, title? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/status` | Dohvati status sesije za sve sesije | Returns `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
|
||||
| `GET` | `/session/:id` | Dohvati detalje sesije | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id` | Obriši sesiju i sve njene podatke | Returns `boolean` |
|
||||
| `PATCH` | `/session/:id` | Ažuriraj svojstva sesije | body: `{ title? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/children` | Dohvati pod-sesije sesije | Returns <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `GET` | `/session/:id/todo` | Dohvati listu zadataka za sesiju | Returns <a href={typesUrl}><code>Todo[]</code></a> |
|
||||
| `POST` | `/session/:id/init` | Analiziraj aplikaciju i kreiraj `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/fork` | Granaj postojeću sesiju na poruci | body: `{ messageID? }`, returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `POST` | `/session/:id/abort` | Prekini sesiju u toku | Returns `boolean` |
|
||||
| `POST` | `/session/:id/share` | Podijeli sesiju | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id/share` | Prestani dijeliti sesiju | Returns <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/diff` | Dohvati razlike za ovu sesiju | query: `messageID?`, returns <a href={typesUrl}><code>FileDiff[]</code></a> |
|
||||
| `POST` | `/session/:id/summarize` | Rezimiraj sesiju | body: `{ providerID, modelID }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/revert` | Vrati poruku | body: `{ messageID, partID? }`, returns `boolean` |
|
||||
| `POST` | `/session/:id/unrevert` | Vrati sve vraćene poruke | Returns `boolean` |
|
||||
| `POST` | `/session/:id/permissions/:permissionID` | Odgovori na zahtjev za dozvolu | body: `{ response, remember? }`, returns `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Poruke
|
||||
|
||||
| Metoda | Putanja | Opis | Napomene |
|
||||
| ------ | --------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session/:id/message` | Izlistaj poruke u sesiji | query: `limit?`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
|
||||
| `POST` | `/session/:id/message` | Pošalji poruku i čekaj odgovor | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `GET` | `/session/:id/message/:messageID` | Dohvati detalje poruke | Returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/prompt_async` | Pošalji poruku asinkrono (bez čekanja) | body: same as `/session/:id/message`, returns `204 No Content` |
|
||||
| `POST` | `/session/:id/command` | Izvrši slash naredbu | body: `{ messageID?, agent?, model?, command, arguments }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/shell` | Pokreni shell naredbu | body: `{ agent, model?, command }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
|
||||
---
|
||||
|
||||
### Naredbe
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ---------- | -------------------- | --------------------------------------------- |
|
||||
| `GET` | `/command` | Izlistaj sve naredbe | <a href={typesUrl}><code>Command[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Datoteke
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------------------------ | --------------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/find?pattern=<pat>` | Traži tekst u datotekama | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
|
||||
| `GET` | `/find/file?query=<q>` | Pronađi datoteke i direktorije po imenu | `string[]` (paths) |
|
||||
| `GET` | `/find/symbol?query=<q>` | Pronađi simbole radnog prostora | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `GET` | `/file?path=<path>` | Izlistaj datoteke i direktorije | <a href={typesUrl}><code>FileNode[]</code></a> |
|
||||
| `GET` | `/file/content?path=<p>` | Pročitaj datoteku | <a href={typesUrl}><code>FileContent</code></a> |
|
||||
| `GET` | `/file/status` | Dohvati status za praćene datoteke | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
#### `/find/file` parametri upita
|
||||
|
||||
- `query` (obavezno) — niz za pretragu (fuzzy podudaranje)
|
||||
- `type` (opcionalno) — ograniči rezultate na `"file"` ili `"directory"`
|
||||
- `directory` (opcionalno) — nadjačaj korijen projekta za pretragu
|
||||
- `limit` (opcionalno) — maksimalni rezultati (1–200)
|
||||
- `dirs` (opcionalno) — zastarjela zastavica (`"false"` vraća samo datoteke)
|
||||
|
||||
---
|
||||
|
||||
### Alati (Eksperimentalno)
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------------------------------------------- | -------------------------------------- | -------------------------------------------- |
|
||||
| `GET` | `/experimental/tool/ids` | Izlistaj sve ID-ove alata | <a href={typesUrl}><code>ToolIDs</code></a> |
|
||||
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Izlistaj alate sa JSON šemama za model | <a href={typesUrl}><code>ToolList</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### LSP, Formateri & MCP
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------------ | -------------------------- | -------------------------------------------------------- |
|
||||
| `GET` | `/lsp` | Dohvati status LSP servera | <a href={typesUrl}><code>LSPStatus[]</code></a> |
|
||||
| `GET` | `/formatter` | Dohvati status formatera | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
|
||||
| `GET` | `/mcp` | Dohvati status MCP servera | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
|
||||
| `POST` | `/mcp` | Dodaj MCP server dinamički | body: `{ name, config }`, returns MCP status object |
|
||||
|
||||
---
|
||||
|
||||
### Agenti
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | -------- | ---------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/agent` | Izlistaj sve dostupne agente | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### Bilježenje
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------- | ------------------------------------------------------------------- | --------- |
|
||||
| `POST` | `/log` | Upiši zapis dnevnika. Tijelo: `{ service, level, message, extra? }` | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ----------------------- | -------------------------------------------------------- | ---------------------- |
|
||||
| `POST` | `/tui/append-prompt` | Dodaj tekst na prompt | `boolean` |
|
||||
| `POST` | `/tui/open-help` | Otvori dijalog za pomoć | `boolean` |
|
||||
| `POST` | `/tui/open-sessions` | Otvori selektor sesija | `boolean` |
|
||||
| `POST` | `/tui/open-themes` | Otvori selektor tema | `boolean` |
|
||||
| `POST` | `/tui/open-models` | Otvori selektor modela | `boolean` |
|
||||
| `POST` | `/tui/submit-prompt` | Pošalji trenutni prompt | `boolean` |
|
||||
| `POST` | `/tui/clear-prompt` | Očisti prompt | `boolean` |
|
||||
| `POST` | `/tui/execute-command` | Izvrši naredbu (`{ command }`) | `boolean` |
|
||||
| `POST` | `/tui/show-toast` | Prikaži toast obavijest (`{ title?, message, variant }`) | `boolean` |
|
||||
| `GET` | `/tui/control/next` | Čekaj sljedeći kontrolni zahtjev | Control request object |
|
||||
| `POST` | `/tui/control/response` | Odgovori na kontrolni zahtjev (`{ body }`) | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Autentifikacija
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ----------- | ------------------------------------------------------------------------------- | --------- |
|
||||
| `PUT` | `/auth/:id` | Postavi autentifikacijske vjerodajnice. Tijelo mora odgovarati shemi provajdera | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### Događaji
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | -------- | -------------------------------------------------------------------------------------- | ------------------------- |
|
||||
| `GET` | `/event` | Tok događaja koje šalje server. Prvi događaj je `server.connected`, zatim bus događaji | Server-sent events stream |
|
||||
|
||||
---
|
||||
|
||||
### Dokumentacija
|
||||
|
||||
| Metoda | Putanja | Opis | Odgovor |
|
||||
| ------ | ------- | ------------------------- | --------------------------------------- |
|
||||
| `GET` | `/doc` | OpenAPI 3.1 specifikacija | HTML stranica sa OpenAPI specifikacijom |
|
||||
127
qimingcode/packages/web/src/content/docs/bs/share.mdx
Normal file
127
qimingcode/packages/web/src/content/docs/bs/share.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: Dijeljenje
|
||||
description: Dijelite OpenCode razgovore javnim linkovima.
|
||||
---
|
||||
|
||||
OpenCode opcija dijeljenja vam omogucava da kreirate javne linkove za razgovore. Tako lakse saradujete s timom ili trazite pomoc od drugih.
|
||||
|
||||
:::note
|
||||
Dijeljeni razgovori su javno dostupni svakome ko ima link.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Kako radi
|
||||
|
||||
Kada podijelite razgovor, OpenCode:
|
||||
|
||||
1. Kreira jedinstveni javni URL za vasu sesiju
|
||||
2. Sinhronizuje historiju razgovora na nase servere
|
||||
3. Cini razgovor dostupnim preko linka za dijeljenje — `opncd.ai/s/<share-id>`
|
||||
|
||||
---
|
||||
|
||||
## Dijeljenje
|
||||
|
||||
OpenCode podrzava tri nacina dijeljenja koji odreduju kako se razgovori dijele:
|
||||
|
||||
---
|
||||
|
||||
### Ručno (zadano)
|
||||
|
||||
Po defaultu, OpenCode koristi rucni nacin dijeljenja. Sesije se ne dijele automatski, ali ih mozete rucno podijeliti komandom `/share`:
|
||||
|
||||
```
|
||||
/share
|
||||
```
|
||||
|
||||
Ovo ce generisati jedinstveni URL i kopirati ga u clipboard.
|
||||
|
||||
Da eksplicitno postavite rucni nacin u [config datoteci](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Automatsko dijeljenje
|
||||
|
||||
Mozete ukljuciti automatsko dijeljenje za sve nove razgovore tako sto `share` postavite na `"auto"` u [config datoteci](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
Kada je auto-share ukljucen, svaki novi razgovor se automatski dijeli i kreira se link.
|
||||
|
||||
---
|
||||
|
||||
### Onemogućeno
|
||||
|
||||
Dijeljenje mozete potpuno iskljuciti tako sto `share` postavite na `"disabled"` u [config datoteci](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
Da ovo vazi za cijeli tim u odredenom projektu, dodajte postavku u projektni `opencode.json` i commitujte u Git.
|
||||
|
||||
---
|
||||
|
||||
## Uklanjanje dijeljenja
|
||||
|
||||
Da prestanete dijeliti razgovor i uklonite javni pristup:
|
||||
|
||||
```
|
||||
/unshare
|
||||
```
|
||||
|
||||
Ovo uklanja link za dijeljenje i brise podatke povezane s razgovorom.
|
||||
|
||||
---
|
||||
|
||||
## Privatnost
|
||||
|
||||
Imajte na umu nekoliko stvari prije dijeljenja razgovora.
|
||||
|
||||
---
|
||||
|
||||
### Čuvanje podataka
|
||||
|
||||
Dijeljeni razgovori ostaju dostupni dok ih eksplicitno ne uklonite iz dijeljenja. Ovo ukljucuje:
|
||||
|
||||
- Kompletnu historiju razgovora
|
||||
- Sve poruke i odgovore
|
||||
- Metapodatke sesije
|
||||
|
||||
---
|
||||
|
||||
### Preporuke
|
||||
|
||||
- Dijelite samo razgovore koji ne sadrze osjetljive informacije.
|
||||
- Pregledajte sadrzaj razgovora prije dijeljenja.
|
||||
- Uklonite dijeljenje kad saradnja zavrsi.
|
||||
- Izbjegavajte dijeljenje razgovora s vlasnickim kodom ili povjerljivim podacima.
|
||||
- Za osjetljive projekte potpuno iskljucite dijeljenje.
|
||||
|
||||
---
|
||||
|
||||
## Za enterprise
|
||||
|
||||
Za enterprise okruzenja, opcija dijeljenja moze biti:
|
||||
|
||||
- **Iskljucena** u potpunosti radi sigurnosne uskladenosti
|
||||
- **Ogranicena** samo na korisnike autentifikovane kroz SSO
|
||||
- **Self-hosted** na vasoj infrastrukturi
|
||||
|
||||
[Saznajte vise](/docs/enterprise) o koristenju opencode u organizaciji.
|
||||
222
qimingcode/packages/web/src/content/docs/bs/skills.mdx
Normal file
222
qimingcode/packages/web/src/content/docs/bs/skills.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: Vještine agenata
|
||||
description: "Definisite ponasanje koje se moze ponovo koristiti"
|
||||
---
|
||||
|
||||
Agent skills omogucavaju OpenCode da pronade uputstva koja se mogu ponovo koristiti iz repozitorija ili home direktorija.
|
||||
Skills se ucitavaju po potrebi kroz ugradeni `skill` alat - agenti vide dostupne skills i ucitavaju puni sadrzaj kad zatreba.
|
||||
|
||||
---
|
||||
|
||||
## Postavite datoteke
|
||||
|
||||
Kreirajte jedan folder po nazivu skill-a i stavite `SKILL.md` unutar njega.
|
||||
OpenCode pretrazuje ove lokacije:
|
||||
|
||||
- Konfiguracija projekta: `.opencode/skills/<name>/SKILL.md`
|
||||
- Globalna konfiguracija: `~/.config/opencode/skills/<name>/SKILL.md`
|
||||
- Claude kompatibilno u projektu: `.claude/skills/<name>/SKILL.md`
|
||||
- Globalno Claude kompatibilno: `~/.claude/skills/<name>/SKILL.md`
|
||||
- Agent kompatibilno u projektu: `.agents/skills/<name>/SKILL.md`
|
||||
- Globalno agent kompatibilno: `~/.agents/skills/<name>/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## Razumijte otkrivanje
|
||||
|
||||
Za projektne lokalne putanje, OpenCode ide prema gore od trenutnog radnog direktorija dok ne dode do git worktree-ja.
|
||||
Usput ucitava sve odgovarajuce `skills/*/SKILL.md` u `.opencode/` i odgovarajuce `.claude/skills/*/SKILL.md` ili `.agents/skills/*/SKILL.md`.
|
||||
|
||||
Globalne definicije se takoder ucitavaju iz `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` i `~/.agents/skills/*/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## Pisanje frontmatter-a
|
||||
|
||||
Svaki `SKILL.md` mora poceti YAML frontmatter-om.
|
||||
Prepoznaju se samo ova polja:
|
||||
|
||||
- `name` (obavezno)
|
||||
- `description` (obavezno)
|
||||
- `license` (opcionalno)
|
||||
- `compatibility` (opcionalno)
|
||||
- `metadata` (opcionalno, mapa string->string)
|
||||
|
||||
Nepoznata frontmatter polja se ignorisu.
|
||||
|
||||
---
|
||||
|
||||
## Validirajte nazive
|
||||
|
||||
`name` mora:
|
||||
|
||||
- Imati 1-64 karaktera
|
||||
- Biti malim slovima i brojevima sa jednim crticama kao razdvajacima
|
||||
- Ne pocinjati ni zavrsavati sa `-`
|
||||
- Ne sadrzavati uzastopno `--`
|
||||
- Odgovarati nazivu direktorija koji sadrzi `SKILL.md`
|
||||
|
||||
Ekvivalentni regex:
|
||||
|
||||
```text
|
||||
^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Pravila dužine
|
||||
|
||||
`description` mora imati 1-1024 karaktera.
|
||||
Neka bude dovoljno precizan da agent moze pravilno odabrati.
|
||||
|
||||
---
|
||||
|
||||
## Primjer
|
||||
|
||||
Kreirajte `.opencode/skills/git-release/SKILL.md` ovako:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: git-release
|
||||
description: Create consistent releases and changelogs
|
||||
license: MIT
|
||||
compatibility: opencode
|
||||
metadata:
|
||||
audience: maintainers
|
||||
workflow: github
|
||||
---
|
||||
|
||||
## What I do
|
||||
|
||||
- Draft release notes from merged PRs
|
||||
- Propose a version bump
|
||||
- Provide a copy-pasteable `gh release create` command
|
||||
|
||||
## When to use me
|
||||
|
||||
Use this when you are preparing a tagged release.
|
||||
Ask clarifying questions if the target versioning scheme is unclear.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Opis alata
|
||||
|
||||
OpenCode navodi dostupne skills u opisu `skill` alata.
|
||||
Svaki unos sadrzi naziv i opis skill-a:
|
||||
|
||||
```xml
|
||||
<available_skills>
|
||||
<skill>
|
||||
<name>git-release</name>
|
||||
<description>Create consistent releases and changelogs</description>
|
||||
</skill>
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
Agent ucitava skill pozivom alata:
|
||||
|
||||
```
|
||||
skill({ name: "git-release" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija dozvola
|
||||
|
||||
Kontrolisite kojim skills agenti mogu pristupiti pomocu dozvola baziranih na obrascima u `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"permission": {
|
||||
"skill": {
|
||||
"*": "allow",
|
||||
"pr-review": "allow",
|
||||
"internal-*": "deny",
|
||||
"experimental-*": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Dozvola | Ponasanje |
|
||||
| ------- | ------------------------------------------- |
|
||||
| `allow` | Skill se ucitava odmah |
|
||||
| `deny` | Skill je skriven od agenta, pristup odbijen |
|
||||
| `ask` | Korisnik mora odobriti prije ucitavanja |
|
||||
|
||||
Obrasci podrzavaju wildcard znakove: `internal-*` poklapa `internal-docs`, `internal-tools` itd.
|
||||
|
||||
---
|
||||
|
||||
## Nadjačavanje po agentu
|
||||
|
||||
Dajte odredenim agentima drugacije dozvole od globalnih defaulta.
|
||||
|
||||
**Za prilagodene agente** (u frontmatter-u agenta):
|
||||
|
||||
```yaml
|
||||
---
|
||||
permission:
|
||||
skill:
|
||||
"documents-*": "allow"
|
||||
---
|
||||
```
|
||||
|
||||
**Za ugradene agente** (u `opencode.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"permission": {
|
||||
"skill": {
|
||||
"internal-*": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Isključivanje skill alata
|
||||
|
||||
Potpuno iskljucite skills za agente koji ih ne bi trebali koristiti:
|
||||
|
||||
**Za prilagodene agente**:
|
||||
|
||||
```yaml
|
||||
---
|
||||
tools:
|
||||
skill: false
|
||||
---
|
||||
```
|
||||
|
||||
**Za ugradene agente**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"skill": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Kada je iskljuceno, sekcija `<available_skills>` se potpuno izostavlja.
|
||||
|
||||
---
|
||||
|
||||
## Rješavanje problema s učitavanjem
|
||||
|
||||
Ako se skill ne pojavi:
|
||||
|
||||
1. Provjerite da je naziv `SKILL.md` napisan velikim slovima
|
||||
2. Provjerite da frontmatter sadrzi `name` i `description`
|
||||
3. Potvrdite da su nazivi skill-ova jedinstveni na svim lokacijama
|
||||
4. Provjerite dozvole - skills sa `deny` su skriveni od agenata
|
||||
369
qimingcode/packages/web/src/content/docs/bs/themes.mdx
Normal file
369
qimingcode/packages/web/src/content/docs/bs/themes.mdx
Normal file
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: Teme
|
||||
description: Izaberite ugradenu temu ili napravite svoju.
|
||||
---
|
||||
|
||||
U OpenCode mozete birati izmedu vise ugradenih tema, koristiti temu koja se prilagodava terminalu ili definisati vlastitu temu.
|
||||
|
||||
Po defaultu, OpenCode koristi nasu `opencode` temu.
|
||||
|
||||
---
|
||||
|
||||
## Zahtjevi terminala
|
||||
|
||||
Da bi teme bile prikazane ispravno sa punom paletom boja, terminal mora podrzavati **truecolor** (24-bitne boje). Vecina modernih terminala to podrzava, ali nekad ga treba ukljuciti:
|
||||
|
||||
- **Provjerite podrsku**: Pokrenite `echo $COLORTERM` - trebalo bi vratiti `truecolor` ili `24bit`
|
||||
- **Ukljucite truecolor**: Postavite varijablu okruzenja `COLORTERM=truecolor` u shell profilu
|
||||
- **Kompatibilnost terminala**: Potvrdite da emulator terminala podrzava 24-bitne boje (vecina modernih terminala kao iTerm2, Alacritty, Kitty, Windows Terminal i novije verzije GNOME Terminala)
|
||||
|
||||
Bez truecolor podrske, teme mogu imati slabiju preciznost boja ili pasti na najblizu 256-color aproksimaciju.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađene teme
|
||||
|
||||
OpenCode dolazi sa vise ugradenih tema.
|
||||
|
||||
| Naziv | Opis |
|
||||
| ---------------------- | -------------------------------------------------------------------------- |
|
||||
| `system` | Prilagodava se boji pozadine vaseg terminala |
|
||||
| `tokyonight` | Bazirana na [Tokyonight](https://github.com/folke/tokyonight.nvim) temi |
|
||||
| `everforest` | Bazirana na [Everforest](https://github.com/sainnhe/everforest) temi |
|
||||
| `ayu` | Bazirana na [Ayu](https://github.com/ayu-theme) dark temi |
|
||||
| `catppuccin` | Bazirana na [Catppuccin](https://github.com/catppuccin) temi |
|
||||
| `catppuccin-macchiato` | Bazirana na [Catppuccin](https://github.com/catppuccin) temi |
|
||||
| `gruvbox` | Bazirana na [Gruvbox](https://github.com/morhetz/gruvbox) temi |
|
||||
| `kanagawa` | Bazirana na [Kanagawa](https://github.com/rebelot/kanagawa.nvim) temi |
|
||||
| `nord` | Bazirana na [Nord](https://github.com/nordtheme/nord) temi |
|
||||
| `matrix` | Hacker stil zelena-na-crnom tema |
|
||||
| `one-dark` | Bazirana na [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark temi |
|
||||
|
||||
I jos mnogo njih, stalno dodajemo nove teme.
|
||||
|
||||
---
|
||||
|
||||
## System tema
|
||||
|
||||
`system` tema je napravljena da se automatski prilagodi sem i boja vaseg terminala. Za razliku od tradicionalnih tema sa fiksnim bojama, _system_ tema:
|
||||
|
||||
- **Generise sivu skalu**: Pravi prilagodenu sivu skalu na osnovu boje pozadine terminala za optimalan kontrast.
|
||||
- **Koristi ANSI boje**: Koristi standardne ANSI boje (0-15) za sintaksno isticanje i UI elemente, uz postovanje palete terminala.
|
||||
- **Cuva terminalske defaulte**: Koristi `none` za boju teksta i pozadine da zadrzi izvorni izgled terminala.
|
||||
|
||||
System tema je za korisnike koji:
|
||||
|
||||
- Zele da OpenCode odgovara izgledu njihovog terminala
|
||||
- Koriste prilagodene seme boja terminala
|
||||
- Preferiraju konzistentan izgled kroz sve terminalske aplikacije
|
||||
|
||||
---
|
||||
|
||||
## Korištenje teme
|
||||
|
||||
Temu mozete izabrati preko selektora tema komandom `/theme`. Ili je možete navesti u `tui.json`.
|
||||
|
||||
```json title="tui.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prilagođene teme
|
||||
|
||||
OpenCode podrzava fleksibilan sistem tema baziran na JSON-u koji olaksava kreiranje i prilagodavanje tema.
|
||||
|
||||
---
|
||||
|
||||
### Hijerarhija
|
||||
|
||||
Teme se ucitavaju iz vise direktorija ovim redoslijedom, gdje kasniji direktoriji prepisuju ranije:
|
||||
|
||||
1. **Ugradene teme** - Ugradene su u binarni fajl
|
||||
2. **Korisnicki config direktorij** - `~/.config/opencode/themes/*.json` ili `$XDG_CONFIG_HOME/opencode/themes/*.json`
|
||||
3. **Korijenski direktorij projekta** - `<project-root>/.opencode/themes/*.json`
|
||||
4. **Trenutni radni direktorij** - `./.opencode/themes/*.json`
|
||||
|
||||
Ako vise direktorija sadrzi temu istog naziva, koristit ce se tema iz direktorija s vecim prioritetom.
|
||||
|
||||
---
|
||||
|
||||
### Kreiranje teme
|
||||
|
||||
Da kreirate prilagodenu temu, napravite JSON datoteku u jednom od direktorija za teme.
|
||||
|
||||
Za korisnicke teme na nivou sistema:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p ~/.config/opencode/themes
|
||||
vim ~/.config/opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
I za teme specificne za projekat.
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p .opencode/themes
|
||||
vim .opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JSON struktura
|
||||
|
||||
Teme koriste fleksibilan JSON format koji podrzava:
|
||||
|
||||
- **Hex boje**: `"#ffffff"`
|
||||
- **ANSI boje**: `3` (0-255)
|
||||
- **Reference boja**: `"primary"` ili prilagodene definicije
|
||||
- **Dark/light varijante**: `{"dark": "#000", "light": "#fff"}`
|
||||
- **Bez boje**: `"none"` - koristi defaultnu boju terminala ili transparentno
|
||||
|
||||
---
|
||||
|
||||
### Definicije boja
|
||||
|
||||
Sekcija `defs` je opcionalna i omogucava da definisete boje koje se mogu ponovo koristiti kroz temu.
|
||||
|
||||
---
|
||||
|
||||
### Terminalske zadane vrijednosti
|
||||
|
||||
Specijalna vrijednost `"none"` moze se koristiti za bilo koju boju da naslijedi defaultnu boju terminala. Ovo je korisno za teme koje se prirodno uklapaju u semu boja terminala:
|
||||
|
||||
- `"text": "none"` - koristi defaultnu boju teksta terminala
|
||||
- `"background": "none"` - koristi defaultnu boju pozadine terminala
|
||||
|
||||
---
|
||||
|
||||
### Primjer
|
||||
|
||||
Evo primjera prilagodene teme:
|
||||
|
||||
```json title="my-theme.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"nord0": "#2E3440",
|
||||
"nord1": "#3B4252",
|
||||
"nord2": "#434C5E",
|
||||
"nord3": "#4C566A",
|
||||
"nord4": "#D8DEE9",
|
||||
"nord5": "#E5E9F0",
|
||||
"nord6": "#ECEFF4",
|
||||
"nord7": "#8FBCBB",
|
||||
"nord8": "#88C0D0",
|
||||
"nord9": "#81A1C1",
|
||||
"nord10": "#5E81AC",
|
||||
"nord11": "#BF616A",
|
||||
"nord12": "#D08770",
|
||||
"nord13": "#EBCB8B",
|
||||
"nord14": "#A3BE8C",
|
||||
"nord15": "#B48EAD"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"error": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"success": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"info": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"text": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "nord3",
|
||||
"light": "nord1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "nord0",
|
||||
"light": "nord6"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "nord1",
|
||||
"light": "nord4"
|
||||
},
|
||||
"border": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "nord3",
|
||||
"light": "nord2"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "nord13",
|
||||
"light": "nord13"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "nord8",
|
||||
"light": "nord8"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "nord15",
|
||||
"light": "nord15"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
341
qimingcode/packages/web/src/content/docs/bs/tools.mdx
Normal file
341
qimingcode/packages/web/src/content/docs/bs/tools.mdx
Normal file
@@ -0,0 +1,341 @@
|
||||
---
|
||||
title: Alati
|
||||
description: Upravljajte alatima koje LLM moze koristiti.
|
||||
---
|
||||
|
||||
Alati omogucavaju LLM-u da izvrsava akcije u vasem kodu. OpenCode dolazi sa skupom ugradenih alata, a mozete ga prosiriti kroz [custom tools](/docs/custom-tools) ili [MCP servers](/docs/mcp-servers).
|
||||
|
||||
Po defaultu su svi alati **ukljuceni** i ne traze dozvolu za pokretanje. Ponasanje alata kontrolisete kroz [permissions](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Koristite polje `permission` za kontrolu ponasanja alata. Za svaki alat mozete postaviti allow, deny ili ask.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "ask",
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Mozete koristiti i wildcard obrasce da kontrolisete vise alata odjednom. Na primjer, da trazite odobrenje za sve alate jednog MCP servera:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"mymcp_*": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Saznajte vise](/docs/permissions) o konfigurisanju dozvola.
|
||||
|
||||
---
|
||||
|
||||
## Ugrađeni
|
||||
|
||||
Ovo su svi ugradeni alati dostupni u OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### bash
|
||||
|
||||
Izvrsava shell komande u okruzenju projekta.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovaj alat omogucava LLM-u da pokrece terminalske komande kao `npm install`, `git status` i druge shell komande.
|
||||
|
||||
---
|
||||
|
||||
### edit
|
||||
|
||||
Mijenja postojece datoteke tacnim zamjenama stringova.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovaj alat radi precizne izmjene datoteka zamjenom tacnih poklapanja teksta. To je glavni nacin na koji LLM mijenja kod.
|
||||
|
||||
---
|
||||
|
||||
### write
|
||||
|
||||
Kreira nove datoteke ili prepisuje postojece.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Koristite ovo da dozvolite LLM-u kreiranje novih datoteka. Ako datoteka vec postoji, bit ce prepisana.
|
||||
|
||||
:::note
|
||||
`write` alat kontrolise `edit` dozvola, koja pokriva sve izmjene datoteka (`edit`, `write`, `patch`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### read
|
||||
|
||||
Cita sadrzaj datoteka iz vaseg koda.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"read": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovaj alat cita datoteke i vraca njihov sadrzaj. Podrzava citanje odredenih raspona linija kod velikih fajlova.
|
||||
|
||||
---
|
||||
|
||||
### grep
|
||||
|
||||
Pretrazuje sadrzaj datoteka pomocu regularnih izraza.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"grep": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Brza pretraga sadrzaja kroz cijeli kod. Podrzava puni regex i filtriranje po obrascima datoteka.
|
||||
|
||||
---
|
||||
|
||||
### glob
|
||||
|
||||
Pronalazi datoteke po obrascima.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"glob": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Trazi datoteke koristeci glob obrasce kao `**/*.js` ili `src/**/*.ts`. Vraca putanje sortirane po vremenu izmjene.
|
||||
|
||||
---
|
||||
|
||||
### lsp (eksperimentalno)
|
||||
|
||||
Komunicira sa konfigurisanim LSP serverima za funkcije inteligencije koda kao definicije, reference, hover info i hijerarhija poziva.
|
||||
|
||||
:::note
|
||||
Ovaj alat je dostupan samo kada je `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (ili `OPENCODE_EXPERIMENTAL=true`).
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"lsp": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Podrzane operacije ukljucuju `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` i `outgoingCalls`.
|
||||
|
||||
Za konfiguraciju dostupnih LSP servera u projektu, pogledajte [LSP Servers](/docs/lsp).
|
||||
|
||||
---
|
||||
|
||||
### patch
|
||||
|
||||
Primjenjuje zakrpe na datoteke.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovaj alat primjenjuje patch datoteke na kod. Koristan je za diffs i patch-eve iz razlicitih izvora.
|
||||
|
||||
:::note
|
||||
`patch` alat kontrolise `edit` dozvola, koja pokriva sve izmjene datoteka (`edit`, `write`, `patch`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### skill
|
||||
|
||||
Ucitajte [skill](/docs/skills) (`SKILL.md` datoteku) i vratite njegov sadrzaj u razgovor.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"skill": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### todowrite
|
||||
|
||||
Upravlja todo listama tokom coding sesija.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todowrite": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Kreira i azurira liste zadataka za pracenje napretka tokom slozenih operacija. LLM ovo koristi za organizaciju zadataka u vise koraka.
|
||||
|
||||
:::note
|
||||
Ovaj alat je po defaultu iskljucen za subagente, ali ga mozete rucno ukljuciti. [Saznajte vise](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### webfetch
|
||||
|
||||
Preuzima web sadrzaj.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Omogucava LLM-u da preuzima i cita web stranice. Korisno za dokumentaciju i online istrazivanje.
|
||||
|
||||
---
|
||||
|
||||
### websearch
|
||||
|
||||
Pretrazuje web za informacije.
|
||||
|
||||
:::note
|
||||
Ovaj alat je dostupan samo uz OpenCode provajdera ili kada je varijabla `OPENCODE_ENABLE_EXA` postavljena na truthy vrijednost (npr. `true` ili `1`).
|
||||
|
||||
Da ukljucite pri pokretanju OpenCode:
|
||||
|
||||
```bash
|
||||
OPENCODE_ENABLE_EXA=1 opencode
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"websearch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vrsi web pretrage preko Exa AI da pronade relevantne informacije online. Korisno za istrazivanje tema, aktuelnosti i podataka van granice trening skupa.
|
||||
|
||||
API kljuc nije potreban - alat se direktno povezuje na Exa AI hosted MCP servis bez autentifikacije.
|
||||
|
||||
:::tip
|
||||
Koristite `websearch` kada trebate pronaci informacije (discovery), a `webfetch` kada trebate preuzeti sadrzaj sa konkretnog URL-a (retrieval).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### question
|
||||
|
||||
Postavlja korisniku pitanja tokom izvrsavanja.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"question": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ovaj alat omogucava LLM-u da postavlja pitanja korisniku tokom zadatka. Koristan je za:
|
||||
|
||||
- Prikupljanje korisnickih preferencija i zahtjeva
|
||||
- Razjasnjavanje nejasnih uputstava
|
||||
- Donosenje odluka oko implementacije
|
||||
- Nudjenje izbora o smjeru rada
|
||||
|
||||
Svako pitanje ukljucuje naslov, tekst pitanja i listu opcija. Korisnici mogu izabrati ponudenu opciju ili upisati vlastiti odgovor. Kada ima vise pitanja, mogu se kretati izmedu njih prije slanja svih odgovora.
|
||||
|
||||
---
|
||||
|
||||
## Prilagođeni alati
|
||||
|
||||
Custom tools vam omogucavaju da definisete vlastite funkcije koje LLM moze pozivati. Definisu se u config datoteci i mogu izvrsavati proizvoljan kod.
|
||||
|
||||
[Saznajte vise](/docs/custom-tools) o kreiranju custom tools.
|
||||
|
||||
---
|
||||
|
||||
## MCP serveri
|
||||
|
||||
MCP (Model Context Protocol) serveri omogucavaju integraciju eksternih alata i servisa. Ovo ukljucuje pristup bazama, API integracije i third-party servise.
|
||||
|
||||
[Saznajte vise](/docs/mcp-servers) o konfigurisanju MCP servera.
|
||||
|
||||
---
|
||||
|
||||
## Interno
|
||||
|
||||
Interno, alati kao `grep` i `glob` koriste [ripgrep](https://github.com/BurntSushi/ripgrep). Po defaultu, ripgrep postuje `.gitignore` obrasce, pa se fajlovi i direktoriji iz `.gitignore` izostavljaju iz pretraga i listinga.
|
||||
|
||||
---
|
||||
|
||||
### Obrasci ignorisanja
|
||||
|
||||
Da ukljucite fajlove koji bi inace bili ignorisani, kreirajte `.ignore` datoteku u korijenu projekta. Ova datoteka moze eksplicitno dozvoliti odredene putanje.
|
||||
|
||||
```text title=".ignore"
|
||||
!node_modules/
|
||||
!dist/
|
||||
!build/
|
||||
```
|
||||
|
||||
Na primjer, ova `.ignore` datoteka dozvoljava ripgrep-u da pretrazuje `node_modules/`, `dist/` i `build/` direktorije i kada su navedeni u `.gitignore`.
|
||||
300
qimingcode/packages/web/src/content/docs/bs/troubleshooting.mdx
Normal file
300
qimingcode/packages/web/src/content/docs/bs/troubleshooting.mdx
Normal file
@@ -0,0 +1,300 @@
|
||||
---
|
||||
title: Rješavanje problema
|
||||
description: Uobičajeni problemi i kako ih riješiti.
|
||||
---
|
||||
|
||||
Da biste otklonili probleme s OpenCode, počnite provjeravanjem dnevnika i lokalnih podataka koje pohranjuje na disku.
|
||||
|
||||
---
|
||||
|
||||
## Dnevnici
|
||||
|
||||
Log fajlovi se pišu na:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/log/`
|
||||
- **Windows**: Pritisnite `WIN+R` i zalijepite `%USERPROFILE%\.local\share\opencode\log`
|
||||
|
||||
Datoteke evidencije se imenuju vremenskim oznakama (npr. `2025-01-09T123456.log`) i čuvaju se najnovijih 10 datoteka dnevnika.
|
||||
|
||||
Možete postaviti nivo dnevnika pomoću opcije komandne linije `--log-level` da biste dobili detaljnije informacije o otklanjanju grešaka. Na primjer, `opencode --log-level DEBUG`.
|
||||
|
||||
---
|
||||
|
||||
## Pohrana
|
||||
|
||||
OpenCode pohranjuje podatke o sesiji i druge podatke aplikacije na disku na:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/`
|
||||
- **Windows**: Pritisnite `WIN+R` i zalijepite `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
Ovaj direktorij sadrži:
|
||||
|
||||
- `auth.json` - Podaci o autentifikaciji kao što su API ključevi, OAuth tokeni
|
||||
- `log/` - Dnevnici aplikacije
|
||||
- `project/` - Podaci specifični za projekat kao što su podaci o sesiji i poruci
|
||||
- Ako je projekat unutar Git repo-a, on je pohranjen u `./<project-slug>/storage/`
|
||||
- Ako nije Git repo, pohranjuje se u `./global/storage/`
|
||||
|
||||
---
|
||||
|
||||
## Desktop aplikacija
|
||||
|
||||
OpenCode Desktop pokreće lokalni OpenCode server (`opencode-cli` sidecar) u pozadini. Većina problema je uzrokovana nedostatkom dodatka, oštećenom keš memorijom ili lošim postavkama servera.
|
||||
|
||||
### Brze provjere
|
||||
|
||||
- Potpuno zatvorite i ponovo pokrenite aplikaciju.
|
||||
- Ako aplikacija prikaže ekran s greškom, kliknite na **Restart** i kopirajte detalje o grešci.
|
||||
- samo za macOS: `OpenCode` meni -> **Ponovo učitaj Webview** (pomaže ako je korisnički interfejs prazan/zamrznut).
|
||||
|
||||
---
|
||||
|
||||
### Onemogućavanje dodataka
|
||||
|
||||
Ako se desktop aplikacija ruši pri pokretanju, visi ili se čudno ponaša, počnite s onemogućavanjem dodataka.
|
||||
|
||||
#### Provjerite globalnu konfiguraciju
|
||||
|
||||
Otvorite svoju globalnu konfiguracijsku datoteku i potražite ključ `plugin`.
|
||||
|
||||
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (ili `~/.config/opencode/opencode.json`)
|
||||
- **macOS/Linux** (starije instalacije): `~/.local/share/opencode/opencode.jsonc`
|
||||
- **Windows**: Pritisnite `WIN+R` i zalijepite `%USERPROFILE%\.config\opencode\opencode.jsonc`
|
||||
|
||||
Ako imate konfigurirane dodatke, privremeno ih onemogućite uklanjanjem ključa ili postavljanjem na prazan niz:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": [],
|
||||
}
|
||||
```
|
||||
|
||||
#### Provjera direktorija dodataka
|
||||
|
||||
OpenCode također može učitati lokalne dodatke s diska. Privremeno ih maknite s puta (ili preimenujte folder) i ponovo pokrenite desktop aplikaciju:
|
||||
|
||||
- **Globalni dodaci**
|
||||
- **macOS/Linux**: `~/.config/opencode/plugins/`
|
||||
- **Windows**: Pritisnite `WIN+R` i zalijepite `%USERPROFILE%\.config\opencode\plugins`
|
||||
- **Projektni dodaci** (samo ako koristite konfiguraciju po projektu)
|
||||
- `<your-project>/.opencode/plugins/`
|
||||
|
||||
Ako aplikacija ponovo počne raditi, ponovo omogućite dodatke jedan po jedan kako biste otkrili koji od njih uzrokuje problem.
|
||||
|
||||
---
|
||||
|
||||
### Brisanje keš memorije
|
||||
|
||||
Ako onemogućavanje dodataka ne pomogne (ili se instalacija dodatka zaglavila), obrišite keš memoriju kako bi ga OpenCode mogao ponovo izgraditi.
|
||||
|
||||
1. Potpuno zatvorite OpenCode Desktop.
|
||||
2. Izbrišite keš direktorij:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> zalijepi `~/.cache/opencode`
|
||||
- **Linux**: obrišite `~/.cache/opencode` (ili pokrenite `rm -rf ~/.cache/opencode`)
|
||||
- **Windows**: Pritisnite `WIN+R` i zalijepite `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
3. Ponovo pokrenite OpenCode Desktop.
|
||||
|
||||
---
|
||||
|
||||
### Rješavanje problema sa vezom na serveru
|
||||
|
||||
OpenCode Desktop može ili pokrenuti svoj lokalni server (podrazumevano) ili se povezati na URL servera koji ste konfigurisali.
|
||||
|
||||
Ako vidite dijaloški okvir **"Povezivanje nije uspjelo"** (ili aplikacija nikada ne prođe kroz početni ekran), provjerite da li postoji prilagođeni URL servera.
|
||||
|
||||
#### Obrišite zadani URL servera radne površine
|
||||
|
||||
Na početnom ekranu kliknite na ime servera (sa tačkom statusa) da otvorite birač servera. U odjeljku **Podrazumevani server** kliknite na **Obriši**.
|
||||
|
||||
#### Uklonite `server.port` / `server.hostname` iz vaše konfiguracije
|
||||
|
||||
Ako vaš `opencode.json(c)` sadrži odjeljak `server`, privremeno ga uklonite i ponovo pokrenite desktop aplikaciju.
|
||||
|
||||
#### Provjerite varijable okruženja
|
||||
|
||||
Ako ste postavili `OPENCODE_PORT` u svom okruženju, desktop aplikacija će pokušati da koristi taj port za lokalni server.
|
||||
|
||||
- Poništite `OPENCODE_PORT` (ili odaberite slobodan port) i ponovo pokrenite.
|
||||
|
||||
---
|
||||
|
||||
### Linux: Wayland / X11 problemi
|
||||
|
||||
Na Linuxu, neka podešavanja Waylanda mogu uzrokovati prazne prozore ili greške sastavljača.
|
||||
|
||||
- Ako ste na Waylandu, a aplikacija je prazna/ispada, pokušajte pokrenuti sa `OC_ALLOW_WAYLAND=1`.
|
||||
- Ako to pogorša stvari, uklonite ga i pokušajte pokrenuti pod X11 sesijom umjesto toga.
|
||||
|
||||
---
|
||||
|
||||
### Windows: WebView2 izvršno okruženje
|
||||
|
||||
Na Windows-u, OpenCode Desktop zahtijeva Microsoft Edge **WebView2 Runtime**. Ako se aplikacija otvori u praznom prozoru ili se ne pokrene, instalirajte/ažurirajte WebView2 i pokušajte ponovo.
|
||||
|
||||
---
|
||||
|
||||
### Windows: Opšti problemi sa performansama
|
||||
|
||||
Ako imate spore performanse, probleme s pristupom datotekama ili probleme s terminalom na Windows-u, pokušajte koristiti [WSL (Windows podsistem za Linux)](/docs/windows-wsl). WSL pruža Linux okruženje koje radi neprimetnije sa OpenCode karakteristikama.
|
||||
|
||||
---
|
||||
|
||||
### Obavještenja se ne prikazuju
|
||||
|
||||
OpenCode Desktop prikazuje sistemska obavještenja samo kada:
|
||||
|
||||
- obavještenja su omogućena za OpenCode u postavkama vašeg OS-a, i
|
||||
- prozor aplikacije nije fokusiran.
|
||||
|
||||
---
|
||||
|
||||
### Resetovanje pohrane desktop aplikacije
|
||||
|
||||
Ako se aplikacija ne pokrene i ne možete izbrisati postavke unutar korisničkog sučelja, resetirajte spremljeno stanje desktop aplikacije.
|
||||
|
||||
1. Zatvorite OpenCode Desktop.
|
||||
2. Pronađite i izbrišite ove datoteke (oni žive u direktoriju podataka OpenCode Desktop aplikacije):
|
||||
|
||||
- `opencode.settings.dat` (URL zadanog servera za desktop)
|
||||
- `opencode.global.dat` i `opencode.workspace.*.dat` (stanje korisničkog interfejsa poput nedavnih servera/projekata)
|
||||
|
||||
Da brzo pronađete direktorij:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (onda potražite nazive fajlova iznad)
|
||||
- **Linux**: potražite nazive fajlova iznad pod `~/.local/share`
|
||||
- **Windows**: Pritisnite `WIN+R` -> `%APPDATA%` (zatim potražite nazive fajlova iznad)
|
||||
|
||||
---
|
||||
|
||||
## Traženje pomoći
|
||||
|
||||
Ako imate problema s OpenCode:
|
||||
|
||||
1. **Prijavite probleme na GitHub**
|
||||
|
||||
Najbolji način da prijavite greške ili zatražite funkcije je putem našeg GitHub spremišta:
|
||||
|
||||
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
|
||||
|
||||
Prije kreiranja novog problema, pretražite postojeće probleme da vidite je li vaš problem već prijavljen.
|
||||
|
||||
2. **Pridružite se našem Discordu**
|
||||
|
||||
Za pomoć u stvarnom vremenu i diskusiju u zajednici, pridružite se našem Discord serveru:
|
||||
|
||||
[**opencode.ai/discord**](https://opencode.ai/discord)
|
||||
|
||||
---
|
||||
|
||||
## Uobičajeni problemi
|
||||
|
||||
Evo nekih uobičajenih problema i kako ih riješiti.
|
||||
|
||||
---
|
||||
|
||||
### OpenCode se ne pokreće
|
||||
|
||||
1. Provjerite dnevnike za poruke o greškama
|
||||
2. Pokušajte pokrenuti sa `--print-logs` da vidite izlaz u terminalu
|
||||
3. Uvjerite se da imate najnoviju verziju sa `opencode upgrade`
|
||||
|
||||
---
|
||||
|
||||
### Problemi s autentifikacijom
|
||||
|
||||
1. Pokušajte ponovo autentifikovati sa naredbom `/connect` u TUI
|
||||
2. Provjerite da li su vaši API ključevi važeći
|
||||
3. Uvjerite se da vaša mreža dozvoljava veze s API-jem provajdera
|
||||
|
||||
---
|
||||
|
||||
### Model nije dostupan
|
||||
|
||||
1. Provjerite jeste li se autentifikovali kod provajdera
|
||||
2. Provjerite je li naziv modela u vašoj konfiguraciji tačan
|
||||
3. Neki modeli mogu zahtijevati poseban pristup ili pretplate
|
||||
|
||||
Ako naiđete na `ProviderModelNotFoundError` najvjerovatnije niste u pravu
|
||||
referenciranje modela negdje.
|
||||
Modele treba referencirati ovako: `<providerId>/<modelId>`
|
||||
|
||||
primjeri:
|
||||
|
||||
- `openai/gpt-4.1`
|
||||
- `openrouter/google/gemini-2.5-flash`
|
||||
- `opencode/kimi-k2`
|
||||
|
||||
Da saznate kojim modelima imate pristup, pokrenite `opencode models`
|
||||
|
||||
---
|
||||
|
||||
### ProviderInitError
|
||||
|
||||
Ako naiđete na grešku ProviderInitError, vjerovatno imate nevažeću ili oštećenu konfiguraciju.
|
||||
|
||||
Da biste ovo riješili:
|
||||
|
||||
1. Prvo provjerite da li je vaš provajder ispravno postavljen slijedeći [vodič za pružatelje](/docs/providers)
|
||||
2. Ako se problem nastavi, pokušajte obrisati pohranjenu konfiguraciju:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/share/opencode
|
||||
```
|
||||
|
||||
Na Windows-u pritisnite `WIN+R` i izbrišite: `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
3. Ponovo izvršite autentifikaciju kod svog provajdera koristeći naredbu `/connect` u TUI.
|
||||
|
||||
---
|
||||
|
||||
### AI_APICallError i problemi sa paketom dobavljača
|
||||
|
||||
Ako naiđete na greške API poziva, to može biti zbog zastarjelih paketa dobavljača. OpenCode dinamički instalira pakete dobavljača (OpenAI, Anthropic, Google, itd.) po potrebi i kešira ih lokalno.
|
||||
|
||||
Da biste riješili probleme s paketom dobavljača:
|
||||
|
||||
1. Obrišite keš paketa provajdera:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.cache/opencode
|
||||
```
|
||||
|
||||
Na Windows-u pritisnite `WIN+R` i izbrišite: `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
2. Ponovo pokrenite OpenCode da ponovo instalirate najnovije pakete dobavljača
|
||||
|
||||
Ovo će prisiliti OpenCode da preuzme najnovije verzije paketa dobavljača, što često rješava probleme kompatibilnosti s parametrima modela i promjenama API-ja.
|
||||
|
||||
---
|
||||
|
||||
### Copy/paste ne radi na Linuxu
|
||||
|
||||
Korisnici Linuxa moraju imati instaliran jedan od sljedećih uslužnih programa međuspremnika da bi funkcionirala funkcionalnost kopiranja/lijepljenja:
|
||||
|
||||
**Za X11 sisteme:**
|
||||
|
||||
```bash
|
||||
apt install -y xclip
|
||||
# or
|
||||
apt install -y xsel
|
||||
```
|
||||
|
||||
**Za Wayland sisteme:**
|
||||
|
||||
```bash
|
||||
apt install -y wl-clipboard
|
||||
```
|
||||
|
||||
**Za okruženja bez glave:**
|
||||
|
||||
```bash
|
||||
apt install -y xvfb
|
||||
# and run:
|
||||
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99.0
|
||||
```
|
||||
|
||||
OpenCode će otkriti da li koristite Wayland i preferirate `wl-clipboard`, u suprotnom će pokušati pronaći alate međuspremnika po redoslijedu: `xclip` i `xsel`.
|
||||
403
qimingcode/packages/web/src/content/docs/bs/tui.mdx
Normal file
403
qimingcode/packages/web/src/content/docs/bs/tui.mdx
Normal file
@@ -0,0 +1,403 @@
|
||||
---
|
||||
title: TUI
|
||||
description: Korištenje korisničkog interfejsa OpenCode terminala.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
OpenCode pruža interaktivni terminalski interfejs ili TUI za rad na vašim projektima sa LLM.
|
||||
|
||||
Pokretanje OpenCode pokreće TUI za trenutni direktorij.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Ili ga možete pokrenuti za određeni radni direktorij.
|
||||
|
||||
```bash
|
||||
opencode /path/to/project
|
||||
```
|
||||
|
||||
Kada uđete u TUI, možete to zatražiti porukom.
|
||||
|
||||
```text
|
||||
Give me a quick summary of the codebase.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reference datoteka
|
||||
|
||||
Možete referencirati datoteke u svojim porukama koristeći `@`. Ovo vrši nejasnu pretragu datoteka u trenutnom radnom direktoriju.
|
||||
|
||||
:::tip
|
||||
Također možete koristiti `@` da referencirate datoteke u svojim porukama.
|
||||
:::
|
||||
|
||||
```text "@packages/functions/src/api/index.ts"
|
||||
How is auth handled in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Sadržaj datoteke se automatski dodaje u razgovor.
|
||||
|
||||
---
|
||||
|
||||
## Bash naredbe
|
||||
|
||||
Započnite poruku sa `!` da pokrenete komandu ljuske.
|
||||
|
||||
```bash frame="none"
|
||||
!ls -la
|
||||
```
|
||||
|
||||
Izlaz naredbe se dodaje u razgovor kao rezultat alata.
|
||||
|
||||
---
|
||||
|
||||
## Naredbe
|
||||
|
||||
Kada koristite OpenCode TUI, možete upisati `/` nakon čega slijedi ime komande da biste brzo izvršili radnje. na primjer:
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
Većina naredbi također ima vezu pomoću `ctrl+x` kao vodeće tipke, gdje je `ctrl+x` zadani vodeći ključ. [Saznajte više](/docs/keybinds).
|
||||
|
||||
Ovdje su sve dostupne komande kose crte:
|
||||
|
||||
---
|
||||
|
||||
### connect
|
||||
|
||||
Dodajte provajdera u OpenCode. Omogućava vam da odaberete između dostupnih provajdera i dodate njihove API ključeve.
|
||||
|
||||
```bash frame="none"
|
||||
/connect
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### compact
|
||||
|
||||
Sažimanje trenutne sesije. _Alias_: `/summarize`
|
||||
|
||||
```bash frame="none"
|
||||
/compact
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x c`
|
||||
|
||||
---
|
||||
|
||||
### details
|
||||
|
||||
Prebacite detalje o izvršavanju alata.
|
||||
|
||||
```bash frame="none"
|
||||
/details
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x d`
|
||||
|
||||
---
|
||||
|
||||
### editor
|
||||
|
||||
Otvorite vanjski uređivač za sastavljanje poruka. Koristi editor postavljen u vašoj varijabli okruženja `EDITOR`. [Saznajte više](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/editor
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x e`
|
||||
|
||||
---
|
||||
|
||||
### exit
|
||||
|
||||
Izađite iz OpenCode. _Aliases_: `/quit`, `/q`
|
||||
|
||||
```bash frame="none"
|
||||
/exit
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x q`
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Izvezite trenutni razgovor u Markdown i otvorite ga u zadanom uređivaču. Koristi editor postavljen u vašoj varijabli okruženja `EDITOR`. [Saznajte više](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/export
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x x`
|
||||
|
||||
---
|
||||
|
||||
### help
|
||||
|
||||
Prikaži dijalog pomoći.
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x h`
|
||||
|
||||
---
|
||||
|
||||
### init
|
||||
|
||||
Kreirajte ili ažurirajte datoteku `AGENTS.md`. [Saznajte više](/docs/rules).
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x i`
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Navedite dostupne modele.
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x m`
|
||||
|
||||
---
|
||||
|
||||
### new
|
||||
|
||||
Započnite novu sesiju. _Alias_: `/clear`
|
||||
|
||||
```bash frame="none"
|
||||
/new
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x n`
|
||||
|
||||
---
|
||||
|
||||
### redo
|
||||
|
||||
Ponovite prethodno poništenu poruku. Dostupno samo nakon korištenja `/undo`.
|
||||
|
||||
:::tip
|
||||
Sve promjene fajla će također biti vraćene.
|
||||
:::
|
||||
|
||||
Interno, ovo koristi Git za upravljanje promjenama datoteke. Dakle, vaš projekat **treba
|
||||
biti Git spremište**.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x r`
|
||||
|
||||
---
|
||||
|
||||
### sessions
|
||||
|
||||
Listanje i prebacivanje između sesija. _Aliases_: `/resume`, `/continue`
|
||||
|
||||
```bash frame="none"
|
||||
/sessions
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x l`
|
||||
|
||||
---
|
||||
|
||||
### share
|
||||
|
||||
Podijelite trenutnu sesiju. [Saznajte više](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x s`
|
||||
|
||||
---
|
||||
|
||||
### themes
|
||||
|
||||
Navedite dostupne teme.
|
||||
|
||||
```bash frame="none"
|
||||
/themes
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x t`
|
||||
|
||||
---
|
||||
|
||||
### thinking
|
||||
|
||||
Uključite/isključite vidljivost blokova razmišljanja/rezoniranja u razgovoru. Kada je omogućeno, možete vidjeti proces rezonovanja modela za modele koji podržavaju prošireno razmišljanje.
|
||||
|
||||
:::note
|
||||
Ova naredba samo kontrolira da li se blokovi razmišljanja **prikažu** - ne omogućava niti onemogućuje mogućnosti razmišljanja modela. Da biste uključili stvarne mogućnosti zaključivanja, koristite `ctrl+t` za kretanje kroz varijante modela.
|
||||
:::
|
||||
|
||||
```bash frame="none"
|
||||
/thinking
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### undo
|
||||
|
||||
Poništi posljednju poruku u razgovoru. Uklanja najnoviju korisničku poruku, sve naknadne odgovore i sve promjene datoteke.
|
||||
|
||||
:::tip
|
||||
Sve promjene u fajlu će također biti poništene.
|
||||
:::
|
||||
|
||||
Interno, ovo koristi Git za upravljanje promjenama datoteke. Dakle, vaš projekat **treba
|
||||
biti Git spremište**.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
**Tastatura:** `ctrl+x u`
|
||||
|
||||
---
|
||||
|
||||
### unshare
|
||||
|
||||
Poništi dijeljenje trenutne sesije. [Saznajte više](/docs/share#un-sharing).
|
||||
|
||||
```bash frame="none"
|
||||
/unshare
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Podešavanje uređivača
|
||||
|
||||
Obje naredbe `/editor` i `/export` koriste editor specificiran u vašoj varijabli okruženja `EDITOR`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Linux/macOS">
|
||||
|
||||
```bash
|
||||
# Example for nano or vim
|
||||
export EDITOR=nano
|
||||
export EDITOR=vim
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
export EDITOR="code --wait"
|
||||
```
|
||||
|
||||
Da biste ga učinili trajnim, dodajte ovo u svoj shell profil;
|
||||
`~/.bashrc`, `~/.zshrc`, itd.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (CMD)">
|
||||
|
||||
```bash
|
||||
set EDITOR=notepad
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
set EDITOR=code --wait
|
||||
```
|
||||
|
||||
Da biste ga učinili trajnim, koristite **Svojstva sistema** > **Okruženje
|
||||
Varijable**.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Windows (PowerShell)">
|
||||
|
||||
```powershell
|
||||
$env:EDITOR = "notepad"
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
$env:EDITOR = "code --wait"
|
||||
```
|
||||
|
||||
Da biste ga učinili trajnim, dodajte ovo u svoj PowerShell profil.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Popularne opcije uređivača uključuju:
|
||||
|
||||
- `code` - Visual Studio Code
|
||||
- `cursor` - Cursor
|
||||
- `windsurf` - Windsurf
|
||||
- `nvim` - Neovim editorom
|
||||
- `vim` - Vim editor
|
||||
- `nano` - Nano editor
|
||||
- `notepad` - Windows Notepad
|
||||
- `subl` - Sublime Text
|
||||
|
||||
:::note
|
||||
Neki uređivači kao što je VS Code moraju biti pokrenuti sa `--wait` zastavicom.
|
||||
:::
|
||||
|
||||
Nekim uređivačima su potrebni argumenti komandne linije da bi se pokrenuli u načinu blokiranja. Oznaka `--wait` blokira proces uređivača dok se ne zatvori.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete prilagoditi TUI ponašanje putem `tui.json` (ili `tui.jsonc`).
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"theme": "opencode",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x"
|
||||
},
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
Ovo je odvojeno od `opencode.json`, koji konfiguriše ponašanje servera/izvršavanja.
|
||||
|
||||
### Opcije
|
||||
|
||||
- `theme` - Postavlja vašu UI temu. [Saznajte više](/docs/themes).
|
||||
- `keybinds` - Prilagođava prečice na tastaturi. [Saznajte više](/docs/keybinds).
|
||||
- `scroll_acceleration.enabled` - Omogućite ubrzanje pomicanja u macOS stilu za glatko, prirodno pomicanje. Kada je omogućeno, brzina pomicanja se povećava brzim pokretima pomicanja i ostaje precizna za sporije pokrete. **Ova postavka ima prednost nad `scroll_speed` i nadjačava je kada je omogućena.**
|
||||
- `scroll_speed` - Kontrolira koliko brzo TUI skroluje kada se koriste komande za pomeranje (minimum: `0.001`, podržava decimalne vrijednosti). Podrazumevano je `3`. **Napomena: Ovo se zanemaruje ako je `scroll_acceleration.enabled` postavljeno na `true`.**
|
||||
- `diff_style` - Kontrolira prikazivanje razlike. `"auto"` se prilagođava širini terminala, `"stacked"` uvijek prikazuje raspored u jednoj koloni.
|
||||
|
||||
Koristite `OPENCODE_TUI_CONFIG` da učitate prilagođenu putanju TUI konfiguracije.
|
||||
|
||||
---
|
||||
|
||||
## Prilagođavanje
|
||||
|
||||
Možete prilagoditi različite aspekte TUI prikaza koristeći paletu komandi (`ctrl+x h` ili `/help`). Ove postavke traju i nakon ponovnog pokretanja.
|
||||
|
||||
---
|
||||
|
||||
#### Prikaz korisničkog imena
|
||||
|
||||
Uključite da li se vaše korisničko ime pojavljuje u porukama za ćaskanje. Pristupite ovome putem:
|
||||
|
||||
- Paleta naredbi: Potražite "korisničko ime" ili "sakrij korisničko ime"
|
||||
- Postavka se automatski nastavlja i pamtit će se tijekom TUI sesija
|
||||
142
qimingcode/packages/web/src/content/docs/bs/web.mdx
Normal file
142
qimingcode/packages/web/src/content/docs/bs/web.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: Web
|
||||
description: Korišćenje OpenCode u vašem pretraživaču.
|
||||
---
|
||||
|
||||
OpenCode može raditi kao web aplikacija u vašem pretraživaču, pružajući isto moćno iskustvo AI kodiranja bez potrebe za terminalom.
|
||||
|
||||

|
||||
|
||||
## Početak rada
|
||||
|
||||
Pokrenite web interfejs tako što ćete pokrenuti:
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Ovo pokreće lokalni server na `127.0.0.1` sa nasumičnim dostupnim portom i automatski otvara OpenCode u vašem podrazumevanom pretraživaču.
|
||||
|
||||
:::caution
|
||||
Ako `OPENCODE_SERVER_PASSWORD` nije postavljen, server će biti nezaštićen. Ovo je u redu za lokalnu upotrebu, ali bi trebalo biti postavljeno za pristup mreži.
|
||||
:::
|
||||
|
||||
:::tip[Windows korisnici]
|
||||
Za najbolje iskustvo, pokrenite `opencode web` iz [WSL](/docs/windows-wsl) umjesto PowerShell-a. Ovo osigurava pravilan pristup sistemu datoteka i integraciju terminala.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracija
|
||||
|
||||
Možete konfigurirati web server koristeći oznake komandne linije ili u vašoj [config file](/docs/config).
|
||||
|
||||
### Port
|
||||
|
||||
OpenCode podrazumevano bira dostupni port. Možete odrediti port:
|
||||
|
||||
```bash
|
||||
opencode web --port 4096
|
||||
```
|
||||
|
||||
### Ime hosta
|
||||
|
||||
Podrazumevano, server se vezuje za `127.0.0.1` (samo lokalni host). Da biste OpenCode učinili dostupnim na vašoj mreži:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
Kada koristite `0.0.0.0`, OpenCode će prikazati i lokalne i mrežne adrese:
|
||||
|
||||
```
|
||||
Local access: http://localhost:4096
|
||||
Network access: http://192.168.1.100:4096
|
||||
```
|
||||
|
||||
### mDNS Otkrivanje
|
||||
|
||||
Omogućite mDNS kako bi vaš server bio vidljiv na lokalnoj mreži:
|
||||
|
||||
```bash
|
||||
opencode web --mdns
|
||||
```
|
||||
|
||||
Ovo automatski postavlja ime hosta na `0.0.0.0` i oglašava server kao `opencode.local`.
|
||||
|
||||
Možete prilagoditi ime mDNS domene za pokretanje više instanci na istoj mreži:
|
||||
|
||||
```bash
|
||||
opencode web --mdns --mdns-domain myproject.local
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
Da biste omogućili dodatne domene za CORS (korisno za prilagođene frontendove):
|
||||
|
||||
```bash
|
||||
opencode web --cors https://example.com
|
||||
```
|
||||
|
||||
### Autentifikacija
|
||||
|
||||
Da biste zaštitili pristup, postavite lozinku koristeći varijablu okruženja `OPENCODE_SERVER_PASSWORD`:
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=secret opencode web
|
||||
```
|
||||
|
||||
Korisničko ime podrazumevano je `opencode`, ali se može promeniti sa `OPENCODE_SERVER_USERNAME`.
|
||||
|
||||
---
|
||||
|
||||
## Korištenje web sučelja
|
||||
|
||||
Jednom pokrenut, web sučelje pruža pristup vašim OpenCode sesijama.
|
||||
|
||||
### Sesije
|
||||
|
||||
Pregledajte i upravljajte svojim sesijama sa početne stranice. Možete vidjeti aktivne sesije i započeti nove.
|
||||
|
||||

|
||||
|
||||
### Status servera
|
||||
|
||||
Kliknite "Pogledajte servere" da vidite povezane servere i njihov status.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Povezivanje terminala
|
||||
|
||||
Možete priključiti TUI terminala na aktivni web server:
|
||||
|
||||
```bash
|
||||
# Start the web server
|
||||
opencode web --port 4096
|
||||
|
||||
# In another terminal, attach the TUI
|
||||
opencode attach http://localhost:4096
|
||||
```
|
||||
|
||||
Ovo vam omogućava da istovremeno koristite i web sučelje i terminal, dijeleći iste sesije i stanje.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguracioni fajl
|
||||
|
||||
Također možete konfigurirati postavke servera u svom `opencode.json` konfiguracijskom fajlu:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"cors": ["https://example.com"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Oznake komandne linije imaju prednost nad postavkama konfiguracione datoteke.
|
||||
113
qimingcode/packages/web/src/content/docs/bs/windows-wsl.mdx
Normal file
113
qimingcode/packages/web/src/content/docs/bs/windows-wsl.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Windows (WSL)
|
||||
description: Pokrenite OpenCode na Windowsu preko WSL-a.
|
||||
---
|
||||
|
||||
import { Steps } from "@astrojs/starlight/components"
|
||||
|
||||
Iako OpenCode moze raditi direktno na Windowsu, preporucujemo [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) za najbolje iskustvo. WSL daje Linux okruzenje koje glatko radi sa OpenCode funkcijama.
|
||||
|
||||
:::tip[Zašto WSL?]
|
||||
WSL nudi bolje performanse fajl sistema, punu terminalsku podrsku i kompatibilnost s razvojnim alatima na koje se OpenCode oslanja.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Postavljanje
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Instalirajte WSL**
|
||||
|
||||
Ako vec niste, [instalirajte WSL](https://learn.microsoft.com/en-us/windows/wsl/install) prema zvanicnom Microsoft vodicu.
|
||||
|
||||
2. **Instalirajte OpenCode u WSL-u**
|
||||
|
||||
Kad je WSL spreman, otvorite WSL terminal i instalirajte OpenCode jednom od [metoda instalacije](/docs/).
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
3. **Koristite OpenCode iz WSL-a**
|
||||
|
||||
Idite u direktorij projekta (Windows fajlovima pristupate preko `/mnt/c/`, `/mnt/d/` itd.) i pokrenite OpenCode.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/project
|
||||
opencode
|
||||
```
|
||||
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## Desktop aplikacija + WSL Server
|
||||
|
||||
Ako preferirate OpenCode Desktop aplikaciju, ali zelite da server radi u WSL-u:
|
||||
|
||||
1. **Pokrenite server u WSL-u** sa `--hostname 0.0.0.0` da dozvolite vanjske konekcije:
|
||||
|
||||
```bash
|
||||
opencode serve --hostname 0.0.0.0 --port 4096
|
||||
```
|
||||
|
||||
2. **Povezite Desktop aplikaciju** na `http://localhost:4096`
|
||||
|
||||
:::note
|
||||
Ako `localhost` ne radi u vasem setupu, povezte se preko WSL IP adrese (u WSL-u: `hostname -I`) i koristite `http://<wsl-ip>:4096`.
|
||||
:::
|
||||
|
||||
:::caution
|
||||
Kada koristite `--hostname 0.0.0.0`, postavite `OPENCODE_SERVER_PASSWORD` da zastitite server.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Web klijent + WSL
|
||||
|
||||
Za najbolje web iskustvo na Windowsu:
|
||||
|
||||
1. **Pokrenite `opencode web` u WSL terminalu** umjesto u PowerShell-u:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
2. **Otvorite iz Windows browsera** na `http://localhost:<port>` (OpenCode ispisuje URL)
|
||||
|
||||
Pokretanje `opencode web` iz WSL-a osigurava ispravan pristup fajl sistemu i terminalsku integraciju, a i dalje je dostupno iz Windows browsera.
|
||||
|
||||
---
|
||||
|
||||
## Pristup Windows fajlovima
|
||||
|
||||
WSL moze pristupiti svim Windows fajlovima kroz `/mnt/` direktorij:
|
||||
|
||||
- Disk `C:` → `/mnt/c/`
|
||||
- Disk `D:` → `/mnt/d/`
|
||||
- I tako dalje...
|
||||
|
||||
Primjer:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/Documents/project
|
||||
opencode
|
||||
```
|
||||
|
||||
:::tip
|
||||
Za najgladje iskustvo, razmislite da klonirate/kopirate repo u WSL fajl sistem (npr. pod `~/code/`) i tu pokrenete OpenCode.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Savjeti
|
||||
|
||||
- Drzite OpenCode u WSL-u za projekte na Windows diskovima - pristup fajlovima je jednostavan
|
||||
- Koristite VS Code [WSL ekstenziju](https://code.visualstudio.com/docs/remote/wsl) uz OpenCode za integrisan tok rada
|
||||
- Vase OpenCode konfiguracije i sesije cuvaju se u WSL okruzenju na `~/.local/share/opencode/`
|
||||
307
qimingcode/packages/web/src/content/docs/bs/zen.mdx
Normal file
307
qimingcode/packages/web/src/content/docs/bs/zen.mdx
Normal file
@@ -0,0 +1,307 @@
|
||||
---
|
||||
title: Zen
|
||||
description: Kurirana lista modela koje nudi OpenCode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Zen je lista testiranih i provjerenih modela koje pruža OpenCode tim.
|
||||
|
||||
:::note
|
||||
OpenCode Zen je trenutno u beta fazi.
|
||||
:::
|
||||
|
||||
Zen radi kao i svaki drugi provajder u OpenCode. Prijavite se na OpenCode Zen i
|
||||
preuzmete svoj API ključ. To je **potpuno opcionalno** i ne morate ga koristiti
|
||||
da biste koristili OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Pozadina
|
||||
|
||||
Postoji veliki broj modela, ali samo mali broj tih modela dobro funkcioniše kao
|
||||
coding agent. Osim toga, većina provajdera je konfigurisana veoma različito, pa
|
||||
zbog toga dobijate veoma različite performanse i kvalitet.
|
||||
|
||||
:::tip
|
||||
Testirali smo odabranu grupu modela i provajdera koji dobro rade s OpenCode.
|
||||
:::
|
||||
|
||||
Zato, ako model koristite preko nečega poput OpenRouter, nikada ne možete biti
|
||||
sigurni da dobijate najbolju verziju modela koji želite.
|
||||
|
||||
Da bismo to riješili, uradili smo nekoliko stvari:
|
||||
|
||||
1. Testirali smo odabranu grupu modela i razgovarali s njihovim timovima o tome
|
||||
kako ih najbolje pokretati.
|
||||
2. Zatim smo radili s nekoliko provajdera kako bismo bili sigurni da se ti
|
||||
modeli isporučuju ispravno.
|
||||
3. Na kraju smo benchmarkirali kombinacije model/provajder i sastavili listu
|
||||
koju s punim povjerenjem preporučujemo.
|
||||
|
||||
OpenCode Zen je AI gateway koji vam daje pristup tim modelima.
|
||||
|
||||
---
|
||||
|
||||
## Kako radi
|
||||
|
||||
OpenCode Zen radi kao i svaki drugi provajder u OpenCode.
|
||||
|
||||
1. Prijavite se na **<a href={console}>OpenCode Zen</a>**, dodajte podatke za
|
||||
naplatu i kopirajte svoj API ključ.
|
||||
2. Pokrenite komandu `/connect` u TUI, izaberite OpenCode Zen i zalijepite svoj API ključ.
|
||||
3. Pokrenite `/models` u TUI da vidite listu modela koje preporučujemo.
|
||||
|
||||
Naplata se vrši po zahtjevu i možete dodavati kredit na svoj račun.
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
Našim modelima možete pristupiti i preko sljedećih API endpointa.
|
||||
|
||||
| Model | Model ID | Endpoint | AI SDK Package |
|
||||
| --------------------- | --------------------- | -------------------------------------------------- | --------------------------- |
|
||||
| GPT 5.5 | gpt-5.5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.5 Pro | gpt-5.5-pro | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Pro | gpt-5.4-pro | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Mini | gpt-5.4-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.4 Nano | gpt-5.4-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.3 Codex Spark | gpt-5.3-codex-spark | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex | gpt-5.1-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Max | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| Claude Opus 4.7 | claude-opus-4-7 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4.6 | claude-sonnet-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4 | claude-sonnet-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Gemini 3.1 Pro | gemini-3.1-pro | `https://opencode.ai/zen/v1/models/gemini-3.1-pro` | `@ai-sdk/google` |
|
||||
| Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
|
||||
| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.5 Free | minimax-m2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 5.1 | glm-5.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 5 | glm-5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Ling 2.6 Flash | ling-2.6-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Hy3 Preview Free | hy3-preview-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Nemotron 3 Super Free | nemotron-3-super-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
|
||||
[model id](/docs/config/#models) u vašoj OpenCode konfiguraciji koristi format
|
||||
`opencode/<model-id>`. Na primjer, za GPT 5.5 u konfiguraciji biste
|
||||
koristili `opencode/gpt-5.5`.
|
||||
|
||||
---
|
||||
|
||||
### Modeli
|
||||
|
||||
Pun spisak dostupnih modela i njihovih metapodataka možete preuzeti na:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cijene
|
||||
|
||||
Podržavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**.
|
||||
|
||||
| Model | Input | Output | Cached Read | Cached Write |
|
||||
| --------------------------------- | ------ | ------- | ----------- | ------------ |
|
||||
| Big Pickle | Free | Free | Free | - |
|
||||
| MiniMax M2.5 Free | Free | Free | Free | - |
|
||||
| Ling 2.6 Flash Free | Free | Free | Free | - |
|
||||
| Hy3 Preview Free | Free | Free | Free | - |
|
||||
| Nemotron 3 Super Free | Free | Free | Free | - |
|
||||
| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||
| GLM 5.1 | $1.40 | $4.40 | $0.26 | - |
|
||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||
| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - |
|
||||
| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 |
|
||||
| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 |
|
||||
| Claude Opus 4.7 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.6 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.5 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.1 | $15.00 | $75.00 | $1.50 | $18.75 |
|
||||
| Claude Sonnet 4.6 | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Sonnet 4 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 |
|
||||
| Gemini 3.1 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||
| Gemini 3.1 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||
| GPT 5.5 (≤ 272K tokens) | $5.00 | $30.00 | $0.50 | - |
|
||||
| GPT 5.5 (> 272K tokens) | $10.00 | $45.00 | $1.00 | - |
|
||||
| GPT 5.5 Pro | $30.00 | $180.00 | $30.00 | - |
|
||||
| GPT 5.4 (≤ 272K tokens) | $2.50 | $15.00 | $0.25 | - |
|
||||
| GPT 5.4 (> 272K tokens) | $5.00 | $22.50 | $0.50 | - |
|
||||
| GPT 5.4 Pro | $30.00 | $180.00 | $30.00 | - |
|
||||
| GPT 5.4 Mini | $0.75 | $4.50 | $0.075 | - |
|
||||
| GPT 5.4 Nano | $0.20 | $1.25 | $0.02 | - |
|
||||
| GPT 5.3 Codex Spark | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.1 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex Max | $1.25 | $10.00 | $0.125 | - |
|
||||
| GPT 5.1 Codex Mini | $0.25 | $2.00 | $0.025 | - |
|
||||
| GPT 5 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Nano | Free | Free | Free | - |
|
||||
|
||||
Možda ćete primijetiti _Claude Haiku 3.5_ u historiji korištenja. To je [low cost model](/docs/config/#models) koji se koristi za generisanje naslova vaših sesija.
|
||||
|
||||
:::note
|
||||
Naknade za kreditne kartice prosljeđujemo po stvarnom trošku (4.4% + $0.30 po transakciji); ne naplaćujemo ništa preko toga.
|
||||
:::
|
||||
|
||||
Besplatni modeli:
|
||||
|
||||
- MiniMax M2.5 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model.
|
||||
- Ling 2.6 Flash Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model.
|
||||
- Hy3 Preview Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model.
|
||||
- Nemotron 3 Super Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model.
|
||||
- Big Pickle je stealth model koji je besplatan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model.
|
||||
|
||||
<a href={email}>Kontaktirajte nas</a> ako imate bilo kakvih pitanja.
|
||||
|
||||
---
|
||||
|
||||
### Auto-reload
|
||||
|
||||
Ako vam stanje padne ispod $5, Zen će automatski dopuniti $20.
|
||||
|
||||
Možete promijeniti iznos auto-reload dopune. Auto-reload možete i potpuno
|
||||
isključiti.
|
||||
|
||||
---
|
||||
|
||||
### Mjesečni limiti
|
||||
|
||||
Možete postaviti mjesečni limit korištenja za cijeli workspace i za svakog člana
|
||||
vašeg tima.
|
||||
|
||||
Na primjer, recimo da postavite mjesečni limit korištenja na $20 — Zen neće
|
||||
potrošiti više od $20 u toku mjeseca. Ali ako imate uključen auto-reload, Zen
|
||||
vam ipak može naplatiti više od $20 ako vam stanje padne ispod $5.
|
||||
|
||||
---
|
||||
|
||||
### Zastarjeli modeli
|
||||
|
||||
| Model | Datum zastarijevanja |
|
||||
| ------------------ | -------------------- |
|
||||
| GPT 5.2 Codex | July 23, 2026 |
|
||||
| GPT 5.1 Codex | July 23, 2026 |
|
||||
| GPT 5.1 Codex Max | July 23, 2026 |
|
||||
| GPT 5.1 Codex Mini | July 23, 2026 |
|
||||
| GPT 5 Codex | July 23, 2026 |
|
||||
| Claude Sonnet 4 | June 15, 2026 |
|
||||
| GLM 5 | May 14, 2026 |
|
||||
| MiniMax M2.1 | March 15, 2026 |
|
||||
| GLM 4.7 | March 15, 2026 |
|
||||
| GLM 4.6 | March 15, 2026 |
|
||||
| Gemini 3 Pro | March 9, 2026 |
|
||||
| Kimi K2 Thinking | March 6, 2026 |
|
||||
| Kimi K2 | March 6, 2026 |
|
||||
| Claude Haiku 3.5 | Feb 16, 2026 |
|
||||
| Qwen3 Coder 480B | Feb 6, 2026 |
|
||||
|
||||
---
|
||||
|
||||
## Privatnost
|
||||
|
||||
Svi naši modeli su hostovani u US. Naši provajderi prate zero-retention politiku
|
||||
i ne koriste vaše podatke za treniranje modela, uz sljedeće izuzetke:
|
||||
|
||||
- Big Pickle: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela.
|
||||
- MiniMax M2.5 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela.
|
||||
- Ling 2.6 Flash Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela.
|
||||
- Hy3 Preview Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela.
|
||||
- Nemotron 3 Super Free (besplatni NVIDIA endpointi): Dostupan je prema [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Samo za probnu upotrebu, nije za produkciju niti osjetljive podatke. NVIDIA bilježi promptove i izlaze radi poboljšanja svojih modela i usluga. Nemojte slati lične ili povjerljive podatke.
|
||||
- OpenAI APIs: Requests are retained for 30 days in accordance with [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data).
|
||||
- Anthropic APIs: Requests are retained for 30 days in accordance with [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||
|
||||
---
|
||||
|
||||
## Za timove
|
||||
|
||||
Zen odlično radi i za timove. Možete pozvati saigrače, dodijeliti uloge, birati
|
||||
modele koje vaš tim koristi i još mnogo toga.
|
||||
|
||||
:::note
|
||||
Workspaces su trenutno besplatni za timove kao dio beta faze.
|
||||
:::
|
||||
|
||||
Upravljanje vašim workspace-om je trenutno besplatno za timove kao dio beta
|
||||
faze. Uskoro ćemo podijeliti više detalja o cijenama.
|
||||
|
||||
---
|
||||
|
||||
### Uloge
|
||||
|
||||
Možete pozvati saigrače u svoj workspace i dodijeliti im uloge:
|
||||
|
||||
- **Admin**: Upravlja modelima, članovima, API ključevima i naplatom
|
||||
- **Member**: Upravlja samo vlastitim API ključevima
|
||||
|
||||
Admini mogu postaviti i mjesečne limite potrošnje za svakog člana kako bi držali
|
||||
troškove pod kontrolom.
|
||||
|
||||
---
|
||||
|
||||
### Pristup modelima
|
||||
|
||||
Admini mogu uključiti ili isključiti određene modele za workspace. Zahtjevi
|
||||
poslani prema isključenom modelu vratiće grešku.
|
||||
|
||||
Ovo je korisno u slučajevima kada želite onemogućiti korištenje modela koji
|
||||
prikuplja podatke.
|
||||
|
||||
---
|
||||
|
||||
### Donesite vlastiti ključ
|
||||
|
||||
Možete koristiti vlastite OpenAI ili Anthropic API ključeve dok i dalje imate
|
||||
pristup drugim modelima u Zen.
|
||||
|
||||
Kada koristite vlastite ključeve, tokene direktno naplaćuje provajder, a ne Zen.
|
||||
|
||||
Na primjer, vaša organizacija možda već ima OpenAI ili Anthropic ključ i želite
|
||||
koristiti njega umjesto onog koji pruža Zen.
|
||||
|
||||
---
|
||||
|
||||
## Ciljevi
|
||||
|
||||
OpenCode Zen smo napravili da:
|
||||
|
||||
1. **Benchmarkiramo** najbolje modele/provajdere za coding agente.
|
||||
2. Imamo pristup opcijama **najvišeg kvaliteta** bez snižavanja performansi ili preusmjeravanja na jeftinije provajdere.
|
||||
3. Prenesemo sva **sniženja cijena** prodajom po stvarnom trošku; tako da je jedini markup pokrivanje naših processing naknada.
|
||||
4. Obezbijedimo **bez lock-ina** time što vam omogućavamo da ga koristite s bilo kojim drugim coding agentom. I da vam uvijek omogućimo da koristite bilo koji drugi provajder i u OpenCode.
|
||||
617
qimingcode/packages/web/src/content/docs/cli.mdx
Normal file
617
qimingcode/packages/web/src/content/docs/cli.mdx
Normal file
@@ -0,0 +1,617 @@
|
||||
---
|
||||
title: CLI
|
||||
description: OpenCode CLI options and commands.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
The OpenCode CLI by default starts the [TUI](/docs/tui) when run without any arguments.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
But it also accepts commands as documented on this page. This allows you to interact with OpenCode programmatically.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
Start the OpenCode terminal user interface.
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Continue the last session |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
| `--fork` | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| `--prompt` | | Prompt to use |
|
||||
| `--model` | `-m` | Model to use in the form of provider/model |
|
||||
| `--agent` | | Agent to use |
|
||||
| `--port` | | Port to listen on |
|
||||
| `--hostname` | | Hostname to listen on |
|
||||
|
||||
---
|
||||
|
||||
## Commands
|
||||
|
||||
The OpenCode CLI also has the following commands.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
Manage agents for OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
Attach a terminal to an already running OpenCode backend server started via `serve` or `web` commands.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
This allows using the TUI with a remote OpenCode backend. For example:
|
||||
|
||||
```bash
|
||||
# Start the backend server for web/mobile access
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# In another terminal, attach the TUI to the running backend
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ----------- | ----- | --------------------------------- |
|
||||
| `--dir` | | Working directory to start TUI in |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
Create a new agent with custom configuration.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
This command will guide you through creating a new agent with a custom system prompt and permission configuration. Anything you don't allow is denied in the generated agent's frontmatter.
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--path` | Directory to write the agent file to (defaults to global or `.opencode/agent` based on the prompt) |
|
||||
| `--description` | What the agent should do |
|
||||
| `--mode` | Agent mode: `all`, `primary`, or `subagent` |
|
||||
| `--permissions` | Comma-separated list of permissions to allow (default: all). Available: `bash`, `read`, `edit`, `glob`, `grep`, `webfetch`, `task`, `todowrite`, `websearch`, `codesearch`, `lsp`, `skill`. Anything omitted is denied. Alias: `--tools` |
|
||||
| `--model`, `-m` | Model to use, in `provider/model` format |
|
||||
|
||||
Passing all of `--path`, `--description`, `--mode`, and `--permissions` runs the command non-interactively.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
List all available agents.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
Command to manage credentials and login for providers.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
OpenCode is powered by the provider list at [Models.dev](https://models.dev), so you can use `opencode auth login` to configure API keys for any provider you'd like to use. This is stored in `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
When OpenCode starts up it loads the providers from the credentials file. And if there are any keys defined in your environments or a `.env` file in your project.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Lists all the authenticated providers as stored in the credentials file.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
Or the short version.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Logs you out of a provider by clearing it from the credentials file.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
Manage the GitHub agent for repository automation.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
Install the GitHub agent in your repository.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
This sets up the necessary GitHub Actions workflow and guides you through the configuration process. [Learn more](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
Run the GitHub agent. This is typically used in GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| --------- | -------------------------------------- |
|
||||
| `--event` | GitHub mock event to run the agent for |
|
||||
| `--token` | GitHub personal access token |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
Manage Model Context Protocol servers.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
Add an MCP server to your configuration.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
This command will guide you through adding either a local or remote MCP server.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
List all configured MCP servers and their connection status.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Or use the short version.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
Authenticate with an OAuth-enabled MCP server.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
If you don't provide a server name, you'll be prompted to select from available OAuth-capable servers.
|
||||
|
||||
You can also list OAuth-capable servers and their authentication status.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
Or use the short version.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Remove OAuth credentials for an MCP server.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
Debug OAuth connection issues for an MCP server.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
List all available models from configured providers.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
This command displays all models available across your configured providers in the format `provider/model`.
|
||||
|
||||
This is useful for figuring out the exact model name to use in [your config](/docs/config/).
|
||||
|
||||
You can optionally pass a provider ID to filter models by that provider.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ----------- | ------------------------------------------------------------ |
|
||||
| `--refresh` | Refresh the models cache from models.dev |
|
||||
| `--verbose` | Use more verbose model output (includes metadata like costs) |
|
||||
|
||||
Use the `--refresh` flag to update the cached model list. This is useful when new models have been added to a provider and you want to see them in OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
Run opencode in non-interactive mode by passing a prompt directly.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
This is useful for scripting, automation, or when you want a quick answer without launching the full TUI. For example.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
You can also attach to a running `opencode serve` instance to avoid MCP server cold boot times on every run:
|
||||
|
||||
```bash
|
||||
# Start a headless server in one terminal
|
||||
opencode serve
|
||||
|
||||
# In another terminal, run commands that attach to it
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| -------------------------------- | ----- | ----------------------------------------------------------------------- |
|
||||
| `--command` | | The command to run, use message for args |
|
||||
| `--continue` | `-c` | Continue the last session |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
| `--fork` | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| `--share` | | Share the session |
|
||||
| `--model` | `-m` | Model to use in the form of provider/model |
|
||||
| `--agent` | | Agent to use |
|
||||
| `--file` | `-f` | File(s) to attach to message |
|
||||
| `--format` | | Format: default (formatted) or json (raw JSON events) |
|
||||
| `--title` | | Title for the session (uses truncated prompt if no value provided) |
|
||||
| `--attach` | | Attach to a running opencode server (e.g., http://localhost:4096) |
|
||||
| `--port` | | Port for the local server (defaults to random port) |
|
||||
| `--dangerously-skip-permissions` | | Auto-approve permissions that are not explicitly denied (dangerous!) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
Start a headless OpenCode server for API access. Check out the [server docs](/docs/server) for the full HTTP interface.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
This starts an HTTP server that provides API access to opencode functionality without the TUI interface. Set `OPENCODE_SERVER_PASSWORD` to enable HTTP basic auth (username defaults to `opencode`).
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
| `--mdns` | Enable mDNS discovery |
|
||||
| `--cors` | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
Manage OpenCode sessions.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
List all OpenCode sessions.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ------------- | ----- | ------------------------------------ |
|
||||
| `--max-count` | `-n` | Limit to N most recent sessions |
|
||||
| `--format` | | Output format: table or json (table) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
Show token usage and cost statistics for your OpenCode sessions.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--days` | Show stats for the last N days (all time) |
|
||||
| `--tools` | Number of tools to show (all) |
|
||||
| `--models` | Show model usage breakdown (hidden by default). Pass a number to show top N |
|
||||
| `--project` | Filter by project (all projects, empty string: current project) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Export session data as JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
If you don't provide a session ID, you'll be prompted to select from available sessions.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
Import session data from a JSON file or OpenCode share URL.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
You can import from a local file or an OpenCode share URL.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
Start a headless OpenCode server with a web interface.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
This starts an HTTP server and opens a web browser to access OpenCode through a web interface. Set `OPENCODE_SERVER_PASSWORD` to enable HTTP basic auth (username defaults to `opencode`).
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
| `--mdns` | Enable mDNS discovery |
|
||||
| `--cors` | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
Start an ACP (Agent Client Protocol) server.
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
This command starts an ACP server that communicates via stdin/stdout using nd-JSON.
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | --------------------- |
|
||||
| `--cwd` | Working directory |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
Uninstall OpenCode and remove all related files.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| --------------- | ----- | ------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Keep configuration files |
|
||||
| `--keep-data` | `-d` | Keep session data and snapshots |
|
||||
| `--dry-run` | | Show what would be removed without removing |
|
||||
| `--force` | `-f` | Skip confirmation prompts |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
Updates opencode to the latest version or a specific version.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
To upgrade to the latest version.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
To upgrade to a specific version.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ---------- | ----- | ----------------------------------------------------------------- |
|
||||
| `--method` | `-m` | The installation method that was used; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
## Global Flags
|
||||
|
||||
The opencode CLI takes the following global flags.
|
||||
|
||||
| Flag | Short | Description |
|
||||
| -------------- | ----- | ------------------------------------ |
|
||||
| `--help` | `-h` | Display help |
|
||||
| `--version` | `-v` | Print version number |
|
||||
| `--print-logs` | | Print logs to stderr |
|
||||
| `--log-level` | | Log level (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## Environment variables
|
||||
|
||||
OpenCode can be configured using environment variables.
|
||||
|
||||
| Variable | Type | Description |
|
||||
| ------------------------------------- | ------- | ------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | Automatically share sessions |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | Path to Git Bash executable on Windows |
|
||||
| `OPENCODE_CONFIG` | string | Path to config file |
|
||||
| `OPENCODE_TUI_CONFIG` | string | Path to TUI config file |
|
||||
| `OPENCODE_CONFIG_DIR` | string | Path to config directory |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | Inline json config content |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Disable automatic update checks |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | Disable pruning of old data |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Disable automatic terminal title updates |
|
||||
| `OPENCODE_PERMISSION` | string | Inlined json permissions config |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Disable default plugins |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Disable automatic LSP server downloads |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Enable experimental models |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Disable automatic context compaction |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Disable reading from `.claude` (prompt + skills) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Disable reading `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Disable loading `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Disable fetching models from remote sources |
|
||||
| `OPENCODE_DISABLE_MOUSE` | boolean | Disable mouse capture in the TUI |
|
||||
| `OPENCODE_FAKE_VCS` | string | Fake VCS provider for testing purposes |
|
||||
| `OPENCODE_CLIENT` | string | Client identifier (defaults to `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | Enable Exa web search tools |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | Enable basic auth for `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | Override basic auth username (default `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | Custom URL for fetching models configuration |
|
||||
|
||||
---
|
||||
|
||||
### Experimental
|
||||
|
||||
These environment variables enable experimental features that may change or be removed.
|
||||
|
||||
| Variable | Type | Description |
|
||||
| ----------------------------------------------- | ------- | --------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | Enable all experimental features |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Enable icon discovery |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Disable copy on select in TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Default timeout for bash commands in ms |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Max output tokens for LLM responses |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Enable file watcher for entire dir |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Enable oxfmt formatter |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Enable experimental LSP tool |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Disable file watcher |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Enable experimental Exa features |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Enable TY LSP for python files |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Enable experimental markdown features |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Enable plan mode |
|
||||
323
qimingcode/packages/web/src/content/docs/commands.mdx
Normal file
323
qimingcode/packages/web/src/content/docs/commands.mdx
Normal file
@@ -0,0 +1,323 @@
|
||||
---
|
||||
title: Commands
|
||||
description: Create custom commands for repetitive tasks.
|
||||
---
|
||||
|
||||
Custom commands let you specify a prompt you want to run when that command is executed in the TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
Custom commands are in addition to the built-in commands like `/init`, `/undo`, `/redo`, `/share`, `/help`. [Learn more](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## Create command files
|
||||
|
||||
Create markdown files in the `commands/` directory to define custom commands.
|
||||
|
||||
Create `.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.
|
||||
```
|
||||
|
||||
The frontmatter defines command properties. The content becomes the template.
|
||||
|
||||
Use the command by typing `/` followed by the command name.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configure
|
||||
|
||||
You can add custom commands through the OpenCode config or by creating markdown files in the `commands/` directory.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Use the `command` option in your OpenCode [config](/docs/config):
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Now you can run this command in the TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
You can also define commands using markdown files. Place them in:
|
||||
|
||||
- Global: `~/.config/opencode/commands/`
|
||||
- Per-project: `.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.
|
||||
```
|
||||
|
||||
The markdown file name becomes the command name. For example, `test.md` lets
|
||||
you run:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prompt config
|
||||
|
||||
The prompts for the custom commands support several special placeholders and syntax.
|
||||
|
||||
---
|
||||
|
||||
### Arguments
|
||||
|
||||
Pass arguments to commands using the `$ARGUMENTS` placeholder.
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Run the command with arguments:
|
||||
|
||||
```bash frame="none"
|
||||
/component Button
|
||||
```
|
||||
|
||||
And `$ARGUMENTS` will be replaced with `Button`.
|
||||
|
||||
You can also access individual arguments using positional parameters:
|
||||
|
||||
- `$1` - First argument
|
||||
- `$2` - Second argument
|
||||
- `$3` - Third argument
|
||||
- And so on...
|
||||
|
||||
For example:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Run the command:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
This replaces:
|
||||
|
||||
- `$1` with `config.json`
|
||||
- `$2` with `src`
|
||||
- `$3` with `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### Shell output
|
||||
|
||||
Use _!`command`_ to inject [bash command](/docs/tui#bash-commands) output into your prompt.
|
||||
|
||||
For example, to create a custom command that analyzes test coverage:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Or to review recent changes:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Commands run in your project's root directory and their output becomes part of the prompt.
|
||||
|
||||
---
|
||||
|
||||
### File references
|
||||
|
||||
Include files in your command using `@` followed by the filename.
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
The file content gets included in the prompt automatically.
|
||||
|
||||
---
|
||||
|
||||
## Options
|
||||
|
||||
Let's look at the configuration options in detail.
|
||||
|
||||
---
|
||||
|
||||
### Template
|
||||
|
||||
The `template` option defines the prompt that will be sent to the LLM when the command is executed.
|
||||
|
||||
```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."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is a **required** config option.
|
||||
|
||||
---
|
||||
|
||||
### Description
|
||||
|
||||
Use the `description` option to provide a brief description of what the command does.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Run tests with coverage"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is shown as the description in the TUI when you type in the command.
|
||||
|
||||
---
|
||||
|
||||
### Agent
|
||||
|
||||
Use the `agent` config to optionally specify which [agent](/docs/agents) should execute this command.
|
||||
If this is a [subagent](/docs/agents/#subagents) the command will trigger a subagent invocation by default.
|
||||
To disable this behavior, set `subtask` to `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is an **optional** config option. If not specified, defaults to your current agent.
|
||||
|
||||
---
|
||||
|
||||
### Subtask
|
||||
|
||||
Use the `subtask` boolean to force the command to trigger a [subagent](/docs/agents/#subagents) invocation.
|
||||
This is useful if you want the command to not pollute your primary context and will **force** the agent to act as a subagent,
|
||||
even if `mode` is set to `primary` on the [agent](/docs/agents) configuration.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is an **optional** config option.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Use the `model` config to override the default model for this command.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is an **optional** config option.
|
||||
|
||||
---
|
||||
|
||||
## Built-in
|
||||
|
||||
opencode includes several built-in commands like `/init`, `/undo`, `/redo`, `/share`, `/help`; [learn more](/docs/tui#commands).
|
||||
|
||||
:::note
|
||||
Custom commands can override built-in commands.
|
||||
:::
|
||||
|
||||
If you define a custom command with the same name, it will override the built-in command.
|
||||
825
qimingcode/packages/web/src/content/docs/config.mdx
Normal file
825
qimingcode/packages/web/src/content/docs/config.mdx
Normal file
@@ -0,0 +1,825 @@
|
||||
---
|
||||
title: Config
|
||||
description: Using the OpenCode JSON config.
|
||||
---
|
||||
|
||||
You can configure OpenCode using a JSON config file.
|
||||
|
||||
---
|
||||
|
||||
## Format
|
||||
|
||||
OpenCode supports both **JSON** and **JSONC** (JSON with Comments) formats.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
"server": {
|
||||
"port": 4096,
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Locations
|
||||
|
||||
You can place your config in a couple of different locations and they have a
|
||||
different order of precedence.
|
||||
|
||||
:::note
|
||||
Configuration files are **merged together**, not replaced.
|
||||
:::
|
||||
|
||||
Configuration files are merged together, not replaced. Settings from the following config locations are combined. Later configs override earlier ones only for conflicting keys. Non-conflicting settings from all configs are preserved.
|
||||
|
||||
For example, if your global config sets `autoupdate: true` and your project config sets `model: "anthropic/claude-sonnet-4-5"`, the final configuration will include both settings.
|
||||
|
||||
---
|
||||
|
||||
### Precedence order
|
||||
|
||||
Config sources are loaded in this order (later sources override earlier ones):
|
||||
|
||||
1. **Remote config** (from `.well-known/opencode`) - organizational defaults
|
||||
2. **Global config** (`~/.config/opencode/opencode.json`) - user preferences
|
||||
3. **Custom config** (`OPENCODE_CONFIG` env var) - custom overrides
|
||||
4. **Project config** (`opencode.json` in project) - project-specific settings
|
||||
5. **`.opencode` directories** - agents, commands, plugins
|
||||
6. **Inline config** (`OPENCODE_CONFIG_CONTENT` env var) - runtime overrides
|
||||
7. **Managed config files** (`/Library/Application Support/opencode/` on macOS) - admin-controlled
|
||||
8. **macOS managed preferences** (`.mobileconfig` via MDM) - highest priority, not user-overridable
|
||||
|
||||
This means project configs can override global defaults, and global configs can override remote organizational defaults. Managed settings override everything.
|
||||
|
||||
:::note
|
||||
The `.opencode` and `~/.config/opencode` directories use **plural names** for subdirectories: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/`, and `themes/`. Singular names (e.g., `agent/`) are also supported for backwards compatibility.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Remote
|
||||
|
||||
Organizations can provide default configuration via the `.well-known/opencode` endpoint. This is fetched automatically when you authenticate with a provider that supports it.
|
||||
|
||||
Remote config is loaded first, serving as the base layer. All other config sources (global, project) can override these defaults.
|
||||
|
||||
For example, if your organization provides MCP servers that are disabled by default:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can enable specific servers in your local config:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
Place your global OpenCode config in `~/.config/opencode/opencode.json`. Use global config for user-wide server/runtime preferences like providers, models, and permissions.
|
||||
|
||||
For TUI-specific settings, use `~/.config/opencode/tui.json`.
|
||||
|
||||
Global config overrides remote organizational defaults.
|
||||
|
||||
---
|
||||
|
||||
### Per project
|
||||
|
||||
Add `opencode.json` in your project root. Project config has the highest precedence among standard config files - it overrides both global and remote configs.
|
||||
|
||||
For project-specific TUI settings, add `tui.json` alongside it.
|
||||
|
||||
:::tip
|
||||
Place project specific config in the root of your project.
|
||||
:::
|
||||
|
||||
When OpenCode starts up, it looks for a config file in the current directory or traverse up to the nearest Git directory.
|
||||
|
||||
This is also safe to be checked into Git and uses the same schema as the global one.
|
||||
|
||||
---
|
||||
|
||||
### Custom path
|
||||
|
||||
Specify a custom config file path using the `OPENCODE_CONFIG` environment variable.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
Custom config is loaded between global and project configs in the precedence order.
|
||||
|
||||
---
|
||||
|
||||
### Custom directory
|
||||
|
||||
Specify a custom config directory using the `OPENCODE_CONFIG_DIR`
|
||||
environment variable. This directory will be searched for agents, commands,
|
||||
modes, and plugins just like the standard `.opencode` directory, and should
|
||||
follow the same structure.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
The custom directory is loaded after the global config and `.opencode` directories, so it **can override** their settings.
|
||||
|
||||
---
|
||||
|
||||
### Managed settings
|
||||
|
||||
Organizations can enforce configuration that users cannot override. Managed settings are loaded at the highest priority tier.
|
||||
|
||||
#### File-based
|
||||
|
||||
Drop an `opencode.json` or `opencode.jsonc` file in the system managed config directory:
|
||||
|
||||
| Platform | Path |
|
||||
| -------- | ---------------------------------------- |
|
||||
| macOS | `/Library/Application Support/opencode/` |
|
||||
| Linux | `/etc/opencode/` |
|
||||
| Windows | `%ProgramData%\opencode` |
|
||||
|
||||
These directories require admin/root access to write, so users cannot modify them.
|
||||
|
||||
#### macOS managed preferences
|
||||
|
||||
On macOS, OpenCode reads managed preferences from the `ai.opencode.managed` preference domain. Deploy a `.mobileconfig` via MDM (Jamf, Kandji, FleetDM) and the settings are enforced automatically.
|
||||
|
||||
OpenCode checks these paths:
|
||||
|
||||
1. `/Library/Managed Preferences/<user>/ai.opencode.managed.plist`
|
||||
2. `/Library/Managed Preferences/ai.opencode.managed.plist`
|
||||
|
||||
The plist keys map directly to `opencode.json` fields. MDM metadata keys (`PayloadUUID`, `PayloadType`, etc.) are stripped automatically.
|
||||
|
||||
**Creating a `.mobileconfig`**
|
||||
|
||||
Use the `ai.opencode.managed` PayloadType. The OpenCode config keys go directly in the payload dict:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PayloadContent</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>PayloadType</key>
|
||||
<string>ai.opencode.managed</string>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>com.example.opencode.config</string>
|
||||
<key>PayloadUUID</key>
|
||||
<string>GENERATE-YOUR-OWN-UUID</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>share</key>
|
||||
<string>disabled</string>
|
||||
<key>server</key>
|
||||
<dict>
|
||||
<key>hostname</key>
|
||||
<string>127.0.0.1</string>
|
||||
</dict>
|
||||
<key>permission</key>
|
||||
<dict>
|
||||
<key>*</key>
|
||||
<string>ask</string>
|
||||
<key>bash</key>
|
||||
<dict>
|
||||
<key>*</key>
|
||||
<string>ask</string>
|
||||
<key>rm -rf *</key>
|
||||
<string>deny</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>PayloadType</key>
|
||||
<string>Configuration</string>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>com.example.opencode</string>
|
||||
<key>PayloadUUID</key>
|
||||
<string>GENERATE-YOUR-OWN-UUID</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
|
||||
Generate unique UUIDs with `uuidgen`. Customize the settings to match your organization's requirements.
|
||||
|
||||
**Deploying via MDM**
|
||||
|
||||
- **Jamf Pro:** Computers > Configuration Profiles > Upload > scope to target devices or smart groups
|
||||
- **FleetDM:** Add the `.mobileconfig` to your gitops repo under `mdm.macos_settings.custom_settings` and run `fleetctl apply`
|
||||
|
||||
**Verifying on a device**
|
||||
|
||||
Double-click the `.mobileconfig` to install locally for testing (shows in System Settings > Privacy & Security > Profiles), then run:
|
||||
|
||||
```bash
|
||||
opencode debug config
|
||||
```
|
||||
|
||||
All managed preference keys appear in the resolved config and cannot be overridden by user or project configuration.
|
||||
|
||||
---
|
||||
|
||||
## Schema
|
||||
|
||||
The server/runtime config schema is defined in [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
TUI config uses [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json).
|
||||
|
||||
Your editor should be able to validate and autocomplete based on the schema.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
Use a dedicated `tui.json` (or `tui.jsonc`) file for TUI-specific settings.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto",
|
||||
"mouse": true
|
||||
}
|
||||
```
|
||||
|
||||
Use `OPENCODE_TUI_CONFIG` to point to a custom TUI config file.
|
||||
|
||||
Legacy `theme`, `keybinds`, and `tui` keys in `opencode.json` are deprecated and automatically migrated when possible.
|
||||
|
||||
---
|
||||
|
||||
### Server
|
||||
|
||||
You can configure server settings for the `opencode serve` and `opencode web` commands through the `server` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Available options:
|
||||
|
||||
- `port` - Port to listen on.
|
||||
- `hostname` - Hostname to listen on. When `mdns` is enabled and no hostname is set, defaults to `0.0.0.0`.
|
||||
- `mdns` - Enable mDNS service discovery. This allows other devices on the network to discover your OpenCode server.
|
||||
- `mdnsDomain` - Custom domain name for mDNS service. Defaults to `opencode.local`. Useful for running multiple instances on the same network.
|
||||
- `cors` - Additional origins to allow for CORS when using the HTTP server from a browser-based client. Values must be full origins (scheme + host + optional port), eg `https://app.example.com`.
|
||||
|
||||
[Learn more about the server here](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### Shell
|
||||
|
||||
You can configure the shell used for the interactive terminal using the `shell` option. Compatible shells are also used for agent tool calls.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"shell": "pwsh"
|
||||
}
|
||||
```
|
||||
|
||||
If not specified, OpenCode will automatically discover and use a sensible default based on your operating system (e.g. `pwsh` or `cmd.exe` on Windows, `/bin/zsh` or `/bin/bash` on macOS/Linux). You can provide an absolute path or a short name.
|
||||
|
||||
---
|
||||
|
||||
### Tools
|
||||
|
||||
You can manage the tools an LLM can use through the `tools` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about tools here](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Models
|
||||
|
||||
You can configure the providers and models you want to use in your OpenCode config through the `provider`, `model` and `small_model` options.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
The `small_model` option configures a separate model for lightweight tasks like title generation. By default, OpenCode tries to use a cheaper model if one is available from your provider, otherwise it falls back to your main model.
|
||||
|
||||
Provider options can include `timeout`, `chunkTimeout`, and `setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"chunkTimeout": 30000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - Request timeout in milliseconds (default: 300000). Set to `false` to disable.
|
||||
- `chunkTimeout` - Timeout in milliseconds between streamed response chunks. If no chunk arrives in time, the request is aborted.
|
||||
- `setCacheKey` - Ensure a cache key is always set for designated provider.
|
||||
|
||||
You can also configure [local models](/docs/models#local). [Learn more](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### Provider-Specific Options
|
||||
|
||||
Some providers support additional configuration options beyond the generic `timeout` and `apiKey` settings.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
Amazon Bedrock supports AWS-specific configuration:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - AWS region for Bedrock (defaults to `AWS_REGION` env var or `us-east-1`)
|
||||
- `profile` - AWS named profile from `~/.aws/credentials` (defaults to `AWS_PROFILE` env var)
|
||||
- `endpoint` - Custom endpoint URL for VPC endpoints. This is an alias for the generic `baseURL` option using AWS-specific terminology. If both are specified, `endpoint` takes precedence.
|
||||
|
||||
:::note
|
||||
Bearer tokens (`AWS_BEARER_TOKEN_BEDROCK` or `/connect`) take precedence over profile-based authentication. See [authentication precedence](/docs/providers#authentication-precedence) for details.
|
||||
:::
|
||||
|
||||
[Learn more about Amazon Bedrock configuration](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### Themes
|
||||
|
||||
Set your UI theme in `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### Agents
|
||||
|
||||
You can configure specialized agents for specific tasks through the `agent` option.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// Disable file modification tools for review-only agent
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
You can also define agents using markdown files in `~/.config/opencode/agents/` or `.opencode/agents/`. [Learn more here](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### Default agent
|
||||
|
||||
You can set the default agent using the `default_agent` option. This determines which agent is used when none is explicitly specified.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
The default agent must be a primary agent (not a subagent). This can be a built-in agent like `"build"` or `"plan"`, or a [custom agent](/docs/agents) you've defined. If the specified agent doesn't exist or is a subagent, OpenCode will fall back to `"build"` with a warning.
|
||||
|
||||
This setting applies across all interfaces: TUI, CLI (`opencode run`), desktop app, and GitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### Sharing
|
||||
|
||||
You can configure the [share](/docs/share) feature through the `share` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
This takes:
|
||||
|
||||
- `"manual"` - Allow manual sharing via commands (default)
|
||||
- `"auto"` - Automatically share new conversations
|
||||
- `"disabled"` - Disable sharing entirely
|
||||
|
||||
By default, sharing is set to manual mode where you need to explicitly share conversations using the `/share` command.
|
||||
|
||||
---
|
||||
|
||||
### Commands
|
||||
|
||||
You can configure custom commands for repetitive tasks through the `command` option.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.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": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
You can also define commands using markdown files in `~/.config/opencode/commands/` or `.opencode/commands/`. [Learn more here](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### Keybinds
|
||||
|
||||
Customize keybinds in `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### Snapshot
|
||||
|
||||
OpenCode uses snapshots to track file changes during agent operations, enabling you to undo and revert changes within a session. Snapshots are enabled by default.
|
||||
|
||||
For large repositories or projects with many submodules, the snapshot system can cause slow indexing and significant disk usage as it tracks all changes using an internal git repository. You can disable snapshots using the `snapshot` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"snapshot": false
|
||||
}
|
||||
```
|
||||
|
||||
Note that disabling snapshots means changes made by the agent cannot be rolled back through the UI.
|
||||
|
||||
---
|
||||
|
||||
### Autoupdate
|
||||
|
||||
OpenCode will automatically download any new updates when it starts up. You can disable this with the `autoupdate` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
If you don't want updates but want to be notified when a new version is available, set `autoupdate` to `"notify"`.
|
||||
Notice that this only works if it was not installed using a package manager such as Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### Formatters
|
||||
|
||||
You can configure code formatters through the `formatter` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about formatters here](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### Permissions
|
||||
|
||||
By default, opencode **allows all operations** without requiring explicit approval. You can change this using the `permission` option.
|
||||
|
||||
For example, to ensure that the `edit` and `bash` tools require user approval:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about permissions here](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Compaction
|
||||
|
||||
You can control context compaction behavior through the `compaction` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true,
|
||||
"reserved": 10000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - Automatically compact the session when context is full (default: `true`).
|
||||
- `prune` - Remove old tool outputs to save tokens (default: `true`).
|
||||
- `reserved` - Token buffer for compaction. Leaves enough window to avoid overflow during compaction
|
||||
|
||||
---
|
||||
|
||||
### Watcher
|
||||
|
||||
You can configure file watcher ignore patterns through the `watcher` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Patterns follow glob syntax. Use this to exclude noisy directories from file watching.
|
||||
|
||||
---
|
||||
|
||||
### MCP servers
|
||||
|
||||
You can configure MCP servers you want to use through the `mcp` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### Plugins
|
||||
|
||||
[Plugins](/docs/plugins) extend OpenCode with custom tools, hooks, and integrations.
|
||||
|
||||
Place plugin files in `.opencode/plugins/` or `~/.config/opencode/plugins/`. You can also load plugins from npm through the `plugin` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### Instructions
|
||||
|
||||
You can configure the instructions for the model you're using through the `instructions` option.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
This takes an array of paths and glob patterns to instruction files. [Learn more
|
||||
about rules here](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### Disabled providers
|
||||
|
||||
You can disable providers that are loaded automatically through the `disabled_providers` option. This is useful when you want to prevent certain providers from being loaded even if their credentials are available.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
The `disabled_providers` takes priority over `enabled_providers`.
|
||||
:::
|
||||
|
||||
The `disabled_providers` option accepts an array of provider IDs. When a provider is disabled:
|
||||
|
||||
- It won't be loaded even if environment variables are set.
|
||||
- It won't be loaded even if API keys are configured through the `/connect` command.
|
||||
- The provider's models won't appear in the model selection list.
|
||||
|
||||
---
|
||||
|
||||
### Enabled providers
|
||||
|
||||
You can specify an allowlist of providers through the `enabled_providers` option. When set, only the specified providers will be enabled and all others will be ignored.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
This is useful when you want to restrict OpenCode to only use specific providers rather than disabling them one by one.
|
||||
|
||||
:::note
|
||||
The `disabled_providers` takes priority over `enabled_providers`.
|
||||
:::
|
||||
|
||||
If a provider appears in both `enabled_providers` and `disabled_providers`, the `disabled_providers` takes priority for backwards compatibility.
|
||||
|
||||
---
|
||||
|
||||
### Experimental
|
||||
|
||||
The `experimental` key contains options that are under active development.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
Experimental options are not stable. They may change or be removed without notice.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Variables
|
||||
|
||||
You can use variable substitution in your config files to reference environment variables and file contents.
|
||||
|
||||
---
|
||||
|
||||
### Env vars
|
||||
|
||||
Use `{env:VARIABLE_NAME}` to substitute environment variables:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If the environment variable is not set, it will be replaced with an empty string.
|
||||
|
||||
---
|
||||
|
||||
### Files
|
||||
|
||||
Use `{file:path/to/file}` to substitute the contents of a file:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
File paths can be:
|
||||
|
||||
- Relative to the config file directory
|
||||
- Or absolute paths starting with `/` or `~`
|
||||
|
||||
These are useful for:
|
||||
|
||||
- Keeping sensitive data like API keys in separate files.
|
||||
- Including large instruction files without cluttering your config.
|
||||
- Sharing common configuration snippets across multiple config files.
|
||||
196
qimingcode/packages/web/src/content/docs/custom-tools.mdx
Normal file
196
qimingcode/packages/web/src/content/docs/custom-tools.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: Custom Tools
|
||||
description: Create tools the LLM can call in opencode.
|
||||
---
|
||||
|
||||
Custom tools are functions you create that the LLM can call during conversations. They work alongside opencode's [built-in tools](/docs/tools) like `read`, `write`, and `bash`.
|
||||
|
||||
---
|
||||
|
||||
## Creating a tool
|
||||
|
||||
Tools are defined as **TypeScript** or **JavaScript** files. However, the tool definition can invoke scripts written in **any language** — TypeScript or JavaScript is only used for the tool definition itself.
|
||||
|
||||
---
|
||||
|
||||
### Location
|
||||
|
||||
They can be defined:
|
||||
|
||||
- Locally by placing them in the `.opencode/tools/` directory of your project.
|
||||
- Or globally, by placing them in `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### Structure
|
||||
|
||||
The easiest way to create tools is using the `tool()` helper which provides type-safety and validation.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
The **filename** becomes the **tool name**. The above creates a `database` tool.
|
||||
|
||||
---
|
||||
|
||||
#### Multiple tools per file
|
||||
|
||||
You can also export multiple tools from a single file. Each export becomes **a separate tool** with the name **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
This creates two tools: `math_add` and `math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
#### Name collisions with built-in tools
|
||||
|
||||
Custom tools are keyed by tool name. If a custom tool uses the same name as a built-in tool, the custom tool takes precedence.
|
||||
|
||||
For example, this file replaces the built-in `bash` tool:
|
||||
|
||||
```ts title=".opencode/tools/bash.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Restricted bash wrapper",
|
||||
args: {
|
||||
command: tool.schema.string(),
|
||||
},
|
||||
async execute(args) {
|
||||
return `blocked: ${args.command}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
:::note
|
||||
Prefer unique names unless you intentionally want to replace a built-in tool. If you want to disable a built in tool but not override it, use [permissions](/docs/permissions).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Arguments
|
||||
|
||||
You can use `tool.schema`, which is just [Zod](https://zod.dev), to define argument types.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
You can also import [Zod](https://zod.dev) directly and return a plain object:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context
|
||||
|
||||
Tools receive context about the current session:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Use `context.directory` for the session working directory.
|
||||
Use `context.worktree` for the git worktree root.
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
### Write a tool in Python
|
||||
|
||||
You can write your tools in any language you want. Here's an example that adds two numbers using Python.
|
||||
|
||||
First, create the tool as a Python script:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
Then create the tool definition that invokes it:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Here we are using the [`Bun.$`](https://bun.com/docs/runtime/shell) utility to run the Python script.
|
||||
156
qimingcode/packages/web/src/content/docs/da/acp.mdx
Normal file
156
qimingcode/packages/web/src/content/docs/da/acp.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: ACP-understøttelse
|
||||
description: Brug OpenCode i enhver ACP-kompatibel editor.
|
||||
---
|
||||
|
||||
OpenCode understøtter [Agent Client Protocol](https://agentclientprotocol.com) eller (ACP), så du kan bruge det direkte i kompatible editorer og IDE'er.
|
||||
|
||||
:::tip
|
||||
For en liste over editorer og værktøjer, der understøtter ACP, tjek [ACP fremskridtsrapport](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP er en åben protokol, der standardiserer kommunikation mellem kodeeditorer og AI-kodningsagenter.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
For at bruge OpenCode via ACP, konfigurer din editor til at køre kommandoen `opencode acp`.
|
||||
|
||||
Kommandoen starter OpenCode som en ACP-kompatibel underproces, der kommunikerer med din editor over JSON-RPC via stdio.
|
||||
|
||||
Nedenfor er eksempler på populære editorer, der understøtter ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
Føj til din [Zed](https://zed.dev)-konfiguration (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For at åbne den skal du bruge handlingen `agent: new thread` i **Kommandopaletten**.
|
||||
|
||||
Du kan også binde en tastaturgenvej ved at redigere din `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDE'er
|
||||
|
||||
Tilføj til din [JetBrains IDE](https://www.jetbrains.com/) acp.json i henhold til [dokumentationen](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For at åbne den skal du bruge den nye 'OpenCode'-agent i AI Chat-agentvælgeren.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
Føj til din [Avante.nvim](https://github.com/yetone/avante.nvim)-konfiguration:
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis du har brug for at videregive miljøvariabler:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
For at bruge OpenCode som en ACP-agent i [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), skal du tilføje følgende til din Neovim-konfiguration:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Denne konfiguration sætter CodeCompanion til at bruge OpenCode som ACP-agent til chat.
|
||||
|
||||
Hvis du har brug for at sende miljøvariabler (som `OPENCODE_API_KEY`), henvises til [Konfiguration af adaptere: Miljøvariabler](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) i CodeCompanion.nvim-dokumentationen for alle detaljer.
|
||||
|
||||
## Understøttelse
|
||||
|
||||
OpenCode fungerer på samme måde via ACP som i terminalen. Alle funktioner understøtter:
|
||||
|
||||
:::note
|
||||
Nogle indbyggede slash-kommandoer som `/undo` og `/redo` er i øjeblikket ikke understøttet.
|
||||
:::
|
||||
|
||||
- Indbyggede værktøjer (filoperationer, terminalkommandoer osv.)
|
||||
- Brugerdefinerede værktøjer og slash-kommandoer
|
||||
- MCP-servere konfigureret i din OpenCode-konfiguration
|
||||
- Projektspecifikke regler fra `AGENTS.md`
|
||||
- Brugerdefinerede formatere og linters
|
||||
- Agenter og tilladelsessystem
|
||||
747
qimingcode/packages/web/src/content/docs/da/agents.mdx
Normal file
747
qimingcode/packages/web/src/content/docs/da/agents.mdx
Normal file
@@ -0,0 +1,747 @@
|
||||
---
|
||||
title: Agenter
|
||||
description: Konfigurer og brug specialiserede agenter.
|
||||
---
|
||||
|
||||
Agenter er specialiserede AI-assistenter, der kan konfigureres til specifikke opgaver og arbejdsgange. De giver dig mulighed for at oprette en central værktøj med brugerdefinerede prompter, modeller og værktøjsadgang.
|
||||
|
||||
:::tip
|
||||
Brug planagenten til at analysere kode og gennemgå forslag uden at foretage nogen kodeændringer.
|
||||
:::
|
||||
|
||||
Du kan skifte mellem agenter under en session eller kalde dem med `@`-omtalen.
|
||||
|
||||
---
|
||||
|
||||
## Typer
|
||||
|
||||
Der er to typer agenter i OpenCode; primære agenter og subagenter.
|
||||
|
||||
---
|
||||
|
||||
### Primær agent
|
||||
|
||||
Primære agenter er de vigtigste assistenter, du interagerer direkte med. Du kan bladre gennem dem ved at bruge **Tab**-tasten eller din konfigurerede `switch_agent`-tastebinding. Disse agenter håndterer din hovedsamtale. Værktøjsadgang konfigureres via tilladelser - for eksempel har Build alle aktiveret, mens Plan er begrænset.
|
||||
|
||||
:::tip
|
||||
Du kan bruge **Tab**-tasten til at skifte mellem primære agenter under en session.
|
||||
:::
|
||||
|
||||
OpenCode leveres med indbyggede primære agenter, **Build** og **Plan**. Vi vil
|
||||
se på disse nedenfor.
|
||||
|
||||
---
|
||||
|
||||
### Subagent
|
||||
|
||||
Subagenter er specialiserede assistenter, som primære agenter kan påbegynde sig til specifikke opgaver. Du kan også kalde dem manuelt ved at **@ nævne** dem i dine beskeder.
|
||||
|
||||
OpenCode leveres med to indbyggede underagenter, **Generelt** og **Udforsk**. Vi vil se på dette nedenfor.
|
||||
|
||||
---
|
||||
|
||||
## Indbyggede
|
||||
|
||||
OpenCode leveres med to indbyggede primære agenter og to indbyggede subagenter.
|
||||
|
||||
---
|
||||
|
||||
### Build-agenten
|
||||
|
||||
_Tilstand_: `primary`
|
||||
|
||||
Byg er den **standard** primære agent med alle aktiveret. Dette er standardagenten til udviklingsarbejde, hvor du har brug for fuld adgang til filhandlinger og systemkommandoer.
|
||||
|
||||
---
|
||||
|
||||
### Plan-agenten
|
||||
|
||||
_Tilstand_: `primary`
|
||||
|
||||
En begrænset agent designet til planlægning og analyse. Vi bruger et tilladelsessystem til at give dig mere kontrol og forhindre utilsigtede ændringer.
|
||||
Som standard er alle følgende indstillet til `ask`:
|
||||
|
||||
- `file edits`: Alle skrivninger, patches og redigeringer
|
||||
- `bash`: Alle bash-kommandoer
|
||||
|
||||
Denne agent er nyttig, når du vil have LLM til at analysere kode, foreslå ændringer eller oprette planer uden at foretage egentlige ændringer af din kodebase.
|
||||
|
||||
---
|
||||
|
||||
### General-agenten
|
||||
|
||||
_Tilstand_: `subagent`
|
||||
|
||||
En agent til generelt formål at undersøge komplekse spørgsmål og udføre opgaver i flere trin. Har fuld værktøjsadgang (undtagen todo), så den kan foretage filændringer, når det er nødvendigt. Brug dette til at køre flere arbejdsenheder parallelt.
|
||||
|
||||
---
|
||||
|
||||
### Explore-agenten
|
||||
|
||||
_Tilstand_: `subagent`
|
||||
|
||||
En hurtig, skrivebeskyttet agent til at udforske kodebaser. Kan ikke ændre filer. Brug dette, når du hurtigt skal finde filer efter mønstre, søge kode efter nøgleord eller besvare spørgsmål om kodebasen.
|
||||
|
||||
---
|
||||
|
||||
### Compact-agenten
|
||||
|
||||
_Tilstand_: `primary`
|
||||
|
||||
Skjult systemagent, der komprimerer lang kontekst til et mindre resumé. Det kører automatisk, når det er nødvendigt og ikke kan vælges i brugergrænsefladen.
|
||||
|
||||
---
|
||||
|
||||
### Title-agenten
|
||||
|
||||
_Tilstand_: `primary`
|
||||
|
||||
Skjult systemagent, der genererer korte sessionstitler. Den kører automatisk og kan ikke vælges i brugergrænsefladen.
|
||||
|
||||
---
|
||||
|
||||
### Resume-agenten
|
||||
|
||||
_Tilstand_: `primary`
|
||||
|
||||
Skjult systemagent, der opretter sessionsoversigter. Den kører automatisk og kan ikke vælges i brugergrænsefladen.
|
||||
|
||||
---
|
||||
|
||||
## Anvendelse
|
||||
|
||||
1. For primære agenter skal du bruge tasten **Tab** til at bladre gennem dem under en session. Du kan også bruge din konfigurerede `switch_agent` nøglebinding.
|
||||
|
||||
2. Subagenter kan påberåbes:
|
||||
- **Automatisk** af primære agenter til specialiserede opgaver baseret på deres beskrivelser.
|
||||
- Manuelt ved at **@ nævne** en underagent i din besked. F.eks.
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **Navigation mellem sessioner**: Når underagenter opretter deres egne underordnede sessioner, kan du navigere mellem den overordnede session og alle underordnede sessioner ved hjælp af:
|
||||
- **\<Leader>+Højre** (eller din konfigurerede `session_child_cycle`-tastebinding) for at cykle fremad gennem forælder → barn1 → barn2 →... → forælder
|
||||
- **\<Leader>+Venstre** (eller din konfigurerede `session_child_cycle_reverse`-tastebinding) for at cykle baglæns gennem forælder ← barn1 ← barn2 ←... ← forælder
|
||||
|
||||
Dette giver dig mulighed for problemfrit at skifte mellem hovedsamtalen og specialiseret subagent arbejde.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan tilpasse de indbyggede agenter eller oprette dine egne gennem konfiguration. Agenter kan konfigureres på følgende måder:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Konfigurer agent i din `opencode.json`-konfigurationsfil:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Du kan også definere agenter ved hjælp af markdown-filer. Placer dem i:
|
||||
|
||||
- Globalt: `~/.config/opencode/agents/`
|
||||
- Pr. projekt: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Markdown-filnavnet bliver agentnavnet. For eksempel opretter `review.md` og `review`-agent.
|
||||
|
||||
---
|
||||
|
||||
## Indstillinger
|
||||
|
||||
Lad os se nærmere på disse konfigurationsmuligheder.
|
||||
|
||||
---
|
||||
|
||||
### Beskrivelse (`description`)
|
||||
|
||||
Brug indstillingen `description` til at give en kort beskrivelse af, hvad agenten gør, og hvornår den skal bruges.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette er en **påkrævet** konfigurationsindstilling.
|
||||
|
||||
---
|
||||
|
||||
### Temperatur (`temperature`)
|
||||
|
||||
Styr tilfældigheden og kreativiteten af LLMs svar med `temperature`-konfigurationen.
|
||||
|
||||
Lavere værdier gør svar mere fokuserede og deterministiske, mens højere værdier øger kreativitet og variabilitet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Temperaturværdier typisk fra 0,0 til 1,0:
|
||||
|
||||
- **0.0-0.2**: Meget fokuseret og deterministisk svar, ideel til kodeanalyse og planlægning
|
||||
- **0,3-0,5**: Afbalancerede svar med en vis kreativitet, god til generelle udviklingsopgaver
|
||||
- **0.6-1.0**: Mere kreative og varierede svar, nyttige til brainstorming og udforskning
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis ingen temperatur er angivet, bruger OpenCode modelspecifikke standardindstillinger; typisk 0 for de fleste modeller, 0,55 for Qwen-modeller.
|
||||
|
||||
---
|
||||
|
||||
### Trin (`steps`)
|
||||
|
||||
Kontrollerer det maksimale antal agent-gentagelser, som en agent kan udføre, før han bliver tvunget til kun at svare med tekst. Dette giver brugere, der ønsker at kontrollere, mulighed for at sætte en grænse for agenthandlinger.
|
||||
|
||||
Hvis dette ikke er indstillet, vil agenten fortsætte med at iterere, indtil modellen vælger at stoppe, eller brugeren afbryder sessionen.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Når grænsen er nået, modtager agenten en speciel systemprompt, der instruerer den om at svare med en opsummering af sit arbejde og anbefalede resterende opgaver.
|
||||
|
||||
:::caution
|
||||
Det gamle `maxSteps`-felt er forældet. Brug `steps` i stedet.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Deaktivering (`disable`)
|
||||
|
||||
Indstil til `true` for at deaktivere agenten.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Prompt (`prompt`)
|
||||
|
||||
Angiv en brugerdefineret systempromptfil for denne agent med `prompt`-konfigurationen. Promptfilen skal indeholde instruktioner, der er specifikke for agentens formål.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Denne sti er i forhold til, hvor konfigurationsfilen er placeret. Så dette virker både for den globale OpenCode-konfiguration og den projektspecifikke konfiguration.
|
||||
|
||||
---
|
||||
|
||||
### Model (`model`)
|
||||
|
||||
Brug `model`-konfigurationen til at tilsidesætte modeller for denne agent. Nyttigt til brug af forskellige modeller optimeret til forskellige opgaver. For eksempel en hurtigere model til planlægning, en dygtig model til implementering.
|
||||
|
||||
:::tip
|
||||
Hvis du ikke angiver en model, bruger primære agenter [model konfigureret globalt](/docs/config#models), mens subagenter vil bruge modeller for den primære agent, der påkaldte subagenten.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Model-id'et i din OpenCode-konfiguration brugerformatet `provider/model-id`. For eksempel, hvis du bruger [OpenCode Zen](/docs/zen), vil du bruge `opencode/gpt-5.1-codex` til GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### Værktøjer (`tools`)
|
||||
|
||||
Kontroller, hvilke værktøjer der er tilgængelige i denne agent med `tools`-konfigurationen. Du kan aktivere eller deaktivere specifikke redskaber ved at indstille dem til `true` eller `false`.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
Den agentspecifikke konfiguration tilsidesætter den globale konfiguration.
|
||||
:::
|
||||
|
||||
Du kan også bruge jokertegn til at styre flere værktøjer på én gang. For eksempel, for at deaktivere alle værktøjer fra en MCP-server:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Læs mere om værktøjer](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Tilladelser (`permission`)
|
||||
|
||||
Du kan konfigurere tilladelser til at administrere, hvilke handlinger og agenter kan udføre. I øjeblikket kan tilladelserne til værktøjerne `edit`, `bash` og `webfetch` konfigureres til:
|
||||
|
||||
- `"ask"` — Bed om godkendelse, før du kører værktøjet
|
||||
- `"allow"` — Tillad alle operationer uden godkendelse
|
||||
- `"deny"` — Deaktiver værktøjet
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Du kan tilsidesætte disse tilladelser pr. agent.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også angive tilladelser i Markdown-agenter.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
Du kan indstille tilladelser til specifikke bash-kommandoer.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette kan tage et globmønster.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Og du kan også bruge jokertegnet `*` til at administrere tilladelser for alle kommandoer.
|
||||
Da den sidste matchningsregel har forrang, skal du sætte jokertegnet `*` først og specifikke regler efter.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Læs mere om tilladelser](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Tilstand (`mode`)
|
||||
|
||||
Styr agentens tilstand med `mode`-konfigurationen. Indstillingen `mode` bruges til at bestemme, hvordan agenten kan bruges.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Indstillingen `mode` kan indstilles til `primary`, `subagent` eller `all`. Hvis der ikke er angivet nogen `mode`, er den som standard `all`.
|
||||
|
||||
---
|
||||
|
||||
### Skjult (`hidden`)
|
||||
|
||||
Skjul en underagent fra `@` autofuldførelsesmenuen med `hidden: true`. Nyttigt for interne underagenter, der kun bør startes programmatisk af andre agenter via opgaveværktøjet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette påvirker kun brugerens synlighed i autofuldførelsesmenuen. Skjulte agenter kan stadig påkaldes af modellen via opgaveværktøjet, hvis tilladelser tillader det.
|
||||
|
||||
:::note
|
||||
Gælder kun for `mode: subagent`-agent.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Opgavetilladelser (`permission.task`)
|
||||
|
||||
Kontroller, hvilke subagenter en agent kan påkalde via opgaveværktøjet med `permission.task`. Bruger glob-mønstre til fleksibel matchning.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Når den er indstillet til `deny`, fjernes subagenten helt fra opgaveværktøjsbeskrivelsen, så modeller vil ikke forsøge at starte den.
|
||||
|
||||
:::tip
|
||||
Reglerne vurderer i rækkefølge, og den **sidste matchende regel vinder**. I eksemplet ovenfor matcher `orchestrator-planner` både `*` (afvis) og `orchestrator-*` (tillad), men da `orchestrator-*` kommer efter `*`, er resultatet `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Brugere kan altid påkalde enhver underagent direkte via `@` autofuldførelsesmenuen, nægt agentens opgavetilladelser ville det.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Farve (`color`)
|
||||
|
||||
Tilpas agentens visuelle udseende i brugergrænsefladen med muligheden `color`. Dette påvirker, hvordan agenter vises i grænsefladen.
|
||||
|
||||
Brug en gyldig hex-farve (f.eks. `#FF5733`) eller temafarve: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
Styr responsdiversiteten med `top_p`-muligheden. Alternativ til temperatur for at kontrollere tilfældighed.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Værdier spænder fra 0,0 til 1,0. Lavere værdier er mere fokuserede, højere værdier mere forskelligartede.
|
||||
|
||||
---
|
||||
|
||||
### Yderligere
|
||||
|
||||
Alle andre muligheder, du angiver i din agentkonfiguration, vil blive **overført direkte** til udbyderen som modelvalg. Dette giver dig mulighed for at bruge udbyderspecifikke funktioner og parametre.
|
||||
|
||||
For eksempel, med OpenAIs ræsoneringsmodeller kan du styre ræsonnementindsatsen:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Disse yderligere muligheder er model- og udbyderspecifikke. Tjek din udbyders dokumentation for tilgængelige parametre.
|
||||
|
||||
:::tip
|
||||
Kør `opencode models` for at se en liste over de tilgængelige modeller.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Oprettelse af agent
|
||||
|
||||
Du kan oprette nye agenter ved hjælp af følgende kommando:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Denne interaktive kommando vil:
|
||||
|
||||
1. Spørg, hvor agenten skal gemmes; globalt eller projektspecifikt.
|
||||
2. Beskrivelse af, hvad agenten skal gøre.
|
||||
3. Generer en passende systemprompt og identifikator.
|
||||
4. Lad dig vælge, hvilke værktøjer agenter har adgang til.
|
||||
5. Til sidst skal du oprette en markdown-fil med agentkonfigurationen.
|
||||
|
||||
---
|
||||
|
||||
## Anvendelsesmuligheder
|
||||
|
||||
Her er nogle almindelige use cases for forskellige agenter.
|
||||
|
||||
- **Byggeagent**: Fuldt udviklingsarbejde med alle aktiveret
|
||||
- **Planagent**: Analyse og planlægning uden ændringer
|
||||
- **Anmeldelsesagent**: Kodegennemgang med skrivebeskyttet adgang plus dokumentationsværktøjer
|
||||
- **Debug agent**: Fokuseret på undersøgelse med bash og læseværktøjer aktiveret
|
||||
- **Docs-agent**: Dokumentationsskrivning med filhandlinger, men ingen systemkommandoer
|
||||
|
||||
---
|
||||
|
||||
## Eksempler
|
||||
|
||||
Her er nogle eksempler på agenter, du kan finde nyttige.
|
||||
|
||||
:::tip
|
||||
Har du en agent, du gerne vil dele? [Send en PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Dokumentations-agent
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sikkerheds-agent
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
603
qimingcode/packages/web/src/content/docs/da/cli.mdx
Normal file
603
qimingcode/packages/web/src/content/docs/da/cli.mdx
Normal file
@@ -0,0 +1,603 @@
|
||||
---
|
||||
title: CLI
|
||||
description: OpenCode CLI muligheder og kommandoer.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
OpenCode CLI starter som standard [TUI](/docs/tui), når den kører uden nogen argumenter.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Men den accepterer også kommandoer som dokumenteret på denne side. Dette giver dig mulighed for at interagere med OpenCode programmatisk.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
Start OpenCode terminalbrugergrænsefladen.
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Fortsæt sidste session |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
| `--fork` | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| `--prompt` | | Spørg om at bruge |
|
||||
| `--model` | `-m` | Model til brug i form af provider/model |
|
||||
| `--agent` | | Agent hos bruge |
|
||||
| `--port` | | Port at lytte på |
|
||||
| `--hostname` | | Værtsnavn at lytte på |
|
||||
|
||||
---
|
||||
|
||||
## Kommandoer
|
||||
|
||||
OpenCode CLI har også følgende kommandoer.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
Administrer agenter i OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
Tilslut en terminal til en allerede kørende OpenCode backend-server startet via `serve` eller `web` kommandoer.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
Dette gør det muligt at bruge TUI med en ekstern OpenCode backend. For eksempel:
|
||||
|
||||
```bash
|
||||
# Start the backend server for web/mobile access
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# In another terminal, attach the TUI to the running backend
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ----------- | ---- | -------------------------------- |
|
||||
| `--dir` | | Arbejdsmappe til at starte TUI i |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
Opret en ny agent med brugerdefineret konfiguration.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
Denne kommando vil guide dig gennem oprettelse af en ny agent med en brugerdefineret systemprompt og værktøjskonfiguration.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste over alle tilgængelige agenter.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
Kommando til at administrere legitimationsoplysninger og login for udbydere.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
OpenCode drives af udbyderlisten på [Models.dev](https://models.dev), så du kan bruge `opencode auth login` til at konfigurere API-nøgler for enhver udbyder, du vil bruge. Dette er gemt i `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
Når OpenCode starter op, indlæser den udbyderne fra legitimationsfilen. Og hvis der er nogen nøgler defineret i dine miljøer eller en `.env` fil i dit projekt.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Viser alle de godkendte udbydere som gemt i legitimationsfilen.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
Eller den korte version.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Logger dig ud af en udbyder ved at rydde den fra legitimationsfilen.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
Administrator GitHub-agenten til lagerautomatisering.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
Installatør GitHub-agenten i dit lager.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Dette opsætter det nødvendige GitHub Actions workflow og guider dig gennem konfigurationsprocessen. [Learn more](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
Kør GitHub-agenten. Dette bruges typisk i GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| --------- | ---------------------------------------------- |
|
||||
| `--event` | GitHub mock begivenhed for at køre agenten for |
|
||||
| `--token` | GitHub personlig adgangstoken |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
Administrator Model Context Protocol-servere.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
Tilføj en MCP-server til din konfiguration.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
Denne kommando vil guide dig gennem tilføjelse af enten en lokal eller ekstern MCP-server.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste over alle konfigurerede MCP-servere og deres forbindelsesstatus.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Eller brug den korte version.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
Godkendt med en OAuth-aktiveret MCP-server.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
Hvis du ikke angiver et servernavn, bliver du bedt om at vælge blandt tilgængelige OAuth-kompatible servere.
|
||||
|
||||
Du kan også angive OAuth-kompatible servere og deres godkendelsesstatus.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
Eller brug den korte version.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
Fjern OAuth-legitimationsoplysninger for en MCP-server.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
Fejlfinding af OAuth-forbindelsesproblemer for en MCP-server.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
Liste over alle tilgængelige modeller fra konfigurerede udbydere.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
Denne kommando viser alle tilgængelige modeller på tværs af dine konfigurerede udbydere i formatet `provider/model`.
|
||||
|
||||
Dette er nyttigt til at finde ud af det nøjagtige modelnavn, der skal bruges i [your config](/docs/config/).
|
||||
|
||||
Du kan eventuelt videregive et udbyder-id for at filtrere modeller efter den udbyder.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ----------- | ----------------------------------------------------------------------- |
|
||||
| `--refresh` | Opdater modelcachen fra models.dev |
|
||||
| `--verbose` | Brug mere detaljeret modeloutput (inkluderer metadata som omkostninger) |
|
||||
|
||||
Brug flaget `--refresh` til at opdatere den cachelagrede modelliste. Dette er nyttigt, når nye modeller er blevet tilføjet til en udbyder, og du vil se dem i OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
Kør opencode i ikke-interaktiv tilstand ved at sende en prompt direkte.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
Dette er nyttigt til scripting, automatisering, eller når du vil have et hurtigt svar uden at starte hele TUI. F.eks.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
Du kan også vedhæfte til en kørende `opencode serve`-instans for at undgå MCP serverens kolde opstartstider ved hver kørsel:
|
||||
|
||||
```bash
|
||||
# Start a headless server in one terminal
|
||||
opencode serve
|
||||
|
||||
# In another terminal, run commands that attach to it
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ----------------------------------------------------------------------------------- |
|
||||
| `--command` | | Kommandoen til at køre, brug besked til args |
|
||||
| `--continue` | `-c` | Fortsæt sidste session |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
| `--fork` | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| `--share` | | Del sessionen |
|
||||
| `--model` | `-m` | Model til brug i form af provider/model |
|
||||
| `--agent` | | Agent til brug |
|
||||
| `--file` | `-f` | Fil(er), der skal vedhæftes til meddelelsen |
|
||||
| `--format` | | Format: standard (formateret) eller json (rå JSON hændelser) |
|
||||
| `--title` | | Titel for sessionen (bruger trunkeret prompt, hvis der ikke er angivet nogen værdi) |
|
||||
| `--attach` | | Tilslut til en kørende opencode-server (f.eks. http://localhost:4096) |
|
||||
| `--port` | | Port til den lokale server (standard til vilkårlig port) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
Start en hovedløs OpenCode-server til API-adgang. Tjek [server docs](/docs/server) for den fulde HTTP-grænseflade.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
Dette starter en HTTP-server, der giver API-adgang til opencode-funktionalitet uden TUI-grænsefladen. Indstil `OPENCODE_SERVER_PASSWORD` for at aktivere HTTP grundlæggende godkendelse (brugernavn er standard til `opencode`).
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | ------------------------------------------------ |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
| `--mdns` | Aktiver mDNS-opdagelse |
|
||||
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
Administrator OpenCode sessionsholder.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
Liste over alle OpenCode sessioner.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------- | ---- | -------------------------------------- |
|
||||
| `--max-count` | `-n` | Begræns til N seneste sessioner |
|
||||
| `--format` | | Outputformat: tabel eller json (tabel) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
Vis tokenbrug og omkostningsstatistikker for dine OpenCode-sessioner.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--days` | Vis statistik for de sidste N dage (hele tiden) |
|
||||
| `--tools` | Antal værktøjer, der skal vises (alle) |
|
||||
| `--models` | Vis modelbrugsopdeling (skjult som standard). Send et tal for at vise top N |
|
||||
| `--project` | Filtre efter projekt (alle projekter, tom streng: nuværende projekt) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
Eksporter sessionsdata som JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
Hvis du ikke angiver et sessions-id, bliver du bedt om at vælge mellem tilgængelige sessioner.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
Importer sessionsdata fra en JSON fil eller OpenCode del URL.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
Du kan importere fra en lokal fil eller en OpenCode share URL.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
Start en hovedløs OpenCode-server med en webgrænseflade.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
Dette starter en HTTP-server og åbner en webbrowser for at få adgang til OpenCode via en webgrænseflade. Indstil `OPENCODE_SERVER_PASSWORD` for at aktivere HTTP grundlæggende godkendelse (brugernavn er standard til `opencode`).
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | ------------------------------------------------ |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
| `--mdns` | Aktiver mDNS-opdagelse |
|
||||
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
Start en ACP-server (Agent Client Protocol).
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
Denne kommando starter en ACP-server, der kommunikerer via stdin/stdout ved hjælp af nd-JSON.
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | --------------------- |
|
||||
| `--cwd` | Arbejdsmappe |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
Afinstaller OpenCode og fjern alle relaterede filer.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| --------------- | ---- | ------------------------------------------------ |
|
||||
| `--keep-config` | `-c` | Se konfigurationsfiler |
|
||||
| `--keep-data` | `-d` | Gem sessionsdata og snapshots |
|
||||
| `--dry-run` | | Vis, hvad der ville blive fjernet uden at fjerne |
|
||||
| `--force` | `-f` | Spring bekræftelsesspørgsmål over |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
Opdaterer OpenCode til den nyeste version eller en specifik version.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
For at opgradere til den nyeste version.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
For at opgradere til en bestemt version.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### upgrade
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ---------- | ---- | ---------------------------------------------------------------- |
|
||||
| `--method` | `-m` | Installationsmetoden, der blev brugt; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
## Globale flag
|
||||
|
||||
opencode CLI tager følgende globale flag.
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| -------------- | ---- | ------------------------------------ |
|
||||
| `--help` | `-h` | Vis hjælp |
|
||||
| `--version` | `-v` | Udskriftsversionsnummer |
|
||||
| `--print-logs` | | Udskriv logfiler til stderr |
|
||||
| `--log-level` | | Logniveau (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## Miljøvariabler
|
||||
|
||||
OpenCode kan konfigureres ved hjælp af miljøvariabler.
|
||||
|
||||
| Variabel | Skriv | Beskrivelse |
|
||||
| ------------------------------------- | ------- | --------------------------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | Del automatisk session |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | Sti til Git Bash eksekverbar på Windows |
|
||||
| `OPENCODE_CONFIG` | string | Sti til konfigurationsfil |
|
||||
| `OPENCODE_TUI_CONFIG` | string | Sti til TUI-konfigurationsfil |
|
||||
| `OPENCODE_CONFIG_DIR` | string | Sti til konfigurationsmappe |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | Indbygget json-konfigurationsindhold |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Deaktiver automatisk opdateringskontrol |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | Deaktiver beskæring af gamle data |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Deaktiver automatisk opdatering af terminaltitel |
|
||||
| `OPENCODE_PERMISSION` | string | Indbygget json-tilladelseskonfiguration |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Deaktiver standard plugins |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Deaktiver automatisk LSP-serverdownloads |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Aktive eksperimentelle modeller |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Deaktiver automatisk kontekstkomprimering |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Deaktiver læsning fra `.claude` (prompt + færdigheder) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Deaktiver læsning `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Deaktiver indlæsning af `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Deaktivering af modeller fra eksterne kilder |
|
||||
| `OPENCODE_FAKE_VCS` | string | Falsk VCS-udbyder til testformål |
|
||||
| `OPENCODE_CLIENT` | string | Klient-id (standard til `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | Aktiver Exa-websøgeværktøjer |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | Aktiver grundlæggende godkendelse for `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | Tilsidesæt grundlæggende godkendelsesbrugernavn (standard `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | Brugerdefineret URL til hentning af modelkonfiguration |
|
||||
|
||||
---
|
||||
|
||||
### Eksperimentel
|
||||
|
||||
Disse miljøvariabler muliggør eksperimentelle funktioner, der kan ændres eller fjernes.
|
||||
|
||||
| Variabel | Skriv | Beskrivelse |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------------ |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | Aktiver alle eksperimentelle funktioner |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Aktiver ikonopdagelse |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Deaktiver kopi ved valg i TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | nummer | Standard timeout for bash-kommandoer i ms |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | nummer | Maks. output-tokens for LLM-svar |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Aktiver filovervågning for hele dir |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Aktiver oxfmt formatter |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Aktive eksperimenter LSP værktøj |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Deaktiver filovervågning |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Aktive eksperimenter Exa-funktioner |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Aktiver TY LSP for python-filer |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Aktive eksperimentelle markdown-funktioner |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Aktiver plantilstand |
|
||||
323
qimingcode/packages/web/src/content/docs/da/commands.mdx
Normal file
323
qimingcode/packages/web/src/content/docs/da/commands.mdx
Normal file
@@ -0,0 +1,323 @@
|
||||
---
|
||||
title: Kommandoer
|
||||
description: Opret brugerdefinerede kommandoer til gentagne opgaver.
|
||||
---
|
||||
|
||||
Brugerdefinerede kommandoer giver mulighed for at angive en prompt, du vil køre, når denne kommando udføres i TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
Brugerdefinerede kommandoer er ud over de indbyggede kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`. [Learn more](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## Oprettelse af kommandofiler
|
||||
|
||||
Opret markdown-filer i mappen `commands/` for at definere brugerdefinerede kommandoer.
|
||||
|
||||
Opret `.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 definerer kommandoegenskaber. Indholdet bliver skabelonen.
|
||||
|
||||
Brug kommandoen ved at skrive `/` efterfulgt af kommandonavnet.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan tilføje brugerdefinerede kommandoer gennem OpenCode-konfigurationen eller ved at oprette markdown-filer i `commands/`-mappen.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
Brug indstillingerne `command` i din OpenCode [config](/docs/config):
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Nu kan du køre denne kommando i TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
Du kan også definere kommandoer ved hjælp af markdown-filer. Placer dem i:
|
||||
|
||||
- Globalt: `~/.config/opencode/commands/`
|
||||
- Pr. projekt: `.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-filnavnet bliver kommandonavnet. For eksempel lader `test.md`
|
||||
du løber:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prompt-konfiguration
|
||||
|
||||
Spørgsmålene til de brugerdefinerede kommandoer understøtter flere specielle pladsholdere og syntaks.
|
||||
|
||||
---
|
||||
|
||||
### Argumenter
|
||||
|
||||
Send argumenter til kommandoer ved hjælp af pladsholderen `$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.
|
||||
```
|
||||
|
||||
Kør kommandoen med argumenter:
|
||||
|
||||
```bash frame="none"
|
||||
/component Button
|
||||
```
|
||||
|
||||
Og `$ARGUMENTS` vil blive erstattet med `Button`.
|
||||
|
||||
Du kan også få adgang til individuelle argumenter ved hjælp af positionelle parametre:
|
||||
|
||||
- `$1` - Første argument
|
||||
- `$2` - Andet argument
|
||||
- `$3` - Tredje argument
|
||||
- Og så videre...
|
||||
|
||||
For eksempel:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Kør kommandoen:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
Dette erstatter:
|
||||
|
||||
- `$1` med `config.json`
|
||||
- `$2` med `src`
|
||||
- `$3` med `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### Shell-output
|
||||
|
||||
Brug _!`command`_ til at injicere [bash command](/docs/tui#bash-commands) output i din prompt.
|
||||
|
||||
For eksempel, for at oprette en brugerdefineret kommando, der analyserer testdækning:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Eller for at gennemgå de seneste ændringer:
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Kommandoer kører i dit projekts rodmappe, og deres output bliver en del af prompten.
|
||||
|
||||
---
|
||||
|
||||
### Fil-referencer
|
||||
|
||||
Inkluder filer i din kommando ved hjælp af `@` efterfulgt af filnavnet.
|
||||
|
||||
```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.
|
||||
```
|
||||
|
||||
Filindholdet bliver automatisk integreret i prompten.
|
||||
|
||||
---
|
||||
|
||||
## Indstillinger
|
||||
|
||||
Lad os se nærmere på konfigurationsmulighederne.
|
||||
|
||||
---
|
||||
|
||||
### Skabelon (`template`)
|
||||
|
||||
Indstillingen `template` definerer den prompt, der sendes til LLM, når kommandoen udføres.
|
||||
|
||||
```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."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette er en **påkrævet** konfigurationsindstilling.
|
||||
|
||||
---
|
||||
|
||||
### Beskrivelse (`description`)
|
||||
|
||||
Brug indstillingen `description` til at give en kort beskrivelse af, hvad kommandoen gør.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Run tests with coverage"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette vises som beskrivelsen i TUI, når du indtaster kommandoen.
|
||||
|
||||
---
|
||||
|
||||
### Agent
|
||||
|
||||
Brug `agent`-konfigurationen til valgfrit at angive, hvilken [agent](/docs/agents) der skal udføre denne kommando.
|
||||
Hvis dette er en [subagent](/docs/agents/#subagents), vil kommandoen som standard udløse en subagent påkaldelse.
|
||||
For at deaktivere denne adfærd skal du indstille `subtask` til `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette er en **valgfri** konfigurationsindstilling. Hvis det ikke er angivet, er standarden din nuværende agent.
|
||||
|
||||
---
|
||||
|
||||
### Underopgave (`subtask`)
|
||||
|
||||
Brug `subtask` boolean til at tvinge kommandoen til at udløse en [subagent](/docs/agents/#subagents) påkaldelse.
|
||||
Dette er nyttigt, hvis du ønsker, at kommandoen ikke skal forurene din primære kontekst og vil **tvinge** agenten til at fungere som en underagent,
|
||||
øjeblikkelig `mode` er sat til `primary` på [agent](/docs/agents) konfigurationen.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette er en **valgfri** konfigurationsindstilling.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Brug `model`-konfigurationen til at tilsidesætte standardmodellen for denne kommando.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dette er en **valgfri** konfigurationsindstilling.
|
||||
|
||||
---
|
||||
|
||||
## Indbyggede kommandoer
|
||||
|
||||
opencode indeholder flere indbyggede kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`; [learn more](/docs/tui#commands).
|
||||
|
||||
:::note
|
||||
Brugerdefinerede kommandoer kan tilsidesætte indbyggede kommandoer.
|
||||
:::
|
||||
|
||||
Hvis du definerer en brugerdefineret kommando med samme navn, vil den tilsidesætte den indbyggede kommando.
|
||||
688
qimingcode/packages/web/src/content/docs/da/config.mdx
Normal file
688
qimingcode/packages/web/src/content/docs/da/config.mdx
Normal file
@@ -0,0 +1,688 @@
|
||||
---
|
||||
title: Konfiguration
|
||||
description: Ved at bruge OpenCode JSON konfig.
|
||||
---
|
||||
|
||||
Du kan konfigurere OpenCode ved hjælp af en JSON-konfigurationsfil.
|
||||
|
||||
---
|
||||
|
||||
## Format
|
||||
|
||||
OpenCode understøtter både **JSON** og **JSONC** (JSON med kommentarer) formater.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
"server": {
|
||||
"port": 4096,
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Placeringer
|
||||
|
||||
Du kan placere din konfiguration et par forskellige steder, og de har en
|
||||
forskellig rækkefølge.
|
||||
|
||||
:::note
|
||||
Konfigurationsfiler **flettes sammen**, erstattes ikke.
|
||||
:::
|
||||
|
||||
Konfigurationsfiler flettes sammen, erstattes ikke. Indstillinger fra følgende konfigurationssteder kombineret. Senere konfigurationer tilsidesætter kun tidligere konfigurationer for modstridende nøgler. Ikke-modstridende indstillinger fra alle konfigurationer bevares.
|
||||
|
||||
For eksempel, hvis dine globale konfigurationssæt `autoupdate: true`, og dine projektkonfigurationssæt `model: "anthropic/claude-sonnet-4-5"`, vil den endelige konfiguration integrere begge indstillinger.
|
||||
|
||||
---
|
||||
|
||||
### Prioritetsrækkefølge
|
||||
|
||||
Konfigurationskilder indlæses i denne rækkefølge (senere kilder tilsidesætter tidligere):
|
||||
|
||||
1. **Fjernkonfiguration** (fra `.well-known/opencode`) - organisatoriske standardindstillinger
|
||||
2. **Global config** (`~/.config/opencode/opencode.json`) - brugerpræferencer
|
||||
3. **Tilpasset konfiguration** (`OPENCODE_CONFIG` env var) - tilpassede tilsidesættelser
|
||||
4. **Project config** (`opencode.json` i projekt) - projektspecifikke indstillinger
|
||||
5. **`.opencode` mapper** - agent, kommandoer, plugins
|
||||
6. **Inline config** (`OPENCODE_CONFIG_CONTENT` env var) - runtime tilsidesættelser
|
||||
|
||||
Dette betyder, at projektkonfigurationer kan tilsidesætte globale standardindstillinger, og globale konfigurationer kan tilsidesætte eksterne organisatoriske standarder.
|
||||
|
||||
:::note
|
||||
`.opencode` og `~/.config/opencode` mapperne bruger **flertalsnavne** for undermapper: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` og `themes/`. Enkelte navne (f.eks. `agent/`) understøtter også bagudkompatibilitet.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Ekstern konfiguration
|
||||
|
||||
Organisationer kan levere standardkonfiguration via `.well-known/opencode`-slutpunktet. Dette hentes automatisk, når du godkender med en udbyder, der understøtter det.
|
||||
|
||||
Remote config indlæses først og fungerer som basislaget. Alle andre konfigurationskilder (global, projekt) kan tilsidesætte disse standardindstillinger.
|
||||
|
||||
Hvis din organisation f.eks. leverer MCP-servere, der er deaktiveret som standard:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Du kan aktivere specifikke servere i din lokale konfiguration:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
Placer din globale OpenCode-konfiguration i `~/.config/opencode/opencode.json`. Brug global konfiguration til brugerdækkende præferencer som temaer, udbydere eller nøglebindinger.
|
||||
|
||||
Global config tilsidesætter eksterne organisatoriske standarder.
|
||||
|
||||
---
|
||||
|
||||
### Projekt-niveau
|
||||
|
||||
Tilføj `opencode.json` i dit projektrod. Project config har den højeste forrang blandt standard config-filer - den tilsidesætter både globale og eksterne config.
|
||||
|
||||
:::tip
|
||||
Placer projektspecifik konfiguration i roden af dit projekt.
|
||||
:::
|
||||
|
||||
Når OpenCode starter op, søger den efter en konfigurationsfil i den aktuelle mappe eller går op til den nærmeste Git-mappe.
|
||||
|
||||
Dette er også sikkert at blive tjekket ind i Git og bruger det samme skema som det globale.
|
||||
|
||||
---
|
||||
|
||||
### Brugerdefineret sti
|
||||
|
||||
Angiv en brugerdefineret konfigurationsfilsti ved hjælp af miljøvariablen `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
Brugerdefineret konfigurationsindlæses mellem globale konfigurationer og projektkonfigurationer i prioriteret rækkefølge.
|
||||
|
||||
---
|
||||
|
||||
### Brugerdefineret mappe
|
||||
|
||||
Angiv en brugerdefineret konfigurationsmappe ved hjælp af `OPENCODE_CONFIG_DIR`
|
||||
miljøvariabel. Dette kort vil blive søgt efter agenter, kommandoer,
|
||||
modes og plugins ligesom standard `.opencode` mappen, og bør
|
||||
følge samme struktur.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
Den brugerdefinerede mappe indlæses efter den globale konfig og `.opencode` mapper, så den **kan tilsidesætte** deres indstillinger.
|
||||
|
||||
---
|
||||
|
||||
## Skema
|
||||
|
||||
Konfigurationsfilen har et skema, der defineres i [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
Din editor skal være i stand til at validere og autofuldføre baseret på skemaet.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
Du kan konfigurere TUI-specifikke indstillinger gennem indstillingen `tui`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Tilgængelige muligheder:
|
||||
|
||||
- `scroll_acceleration.enabled` - Aktiver macOS-stil rulleacceleration. **Har forrang frem for `scroll_speed`.**
|
||||
- `scroll_speed` - Brugerdefineret rullehastighedsmultiplikator (standard: `3`, minimum: `1`). Ignoreres, hvis `scroll_acceleration.enabled` er `true`.
|
||||
- `diff_style` - Kontroller diff-gengivelse. `"auto"` tilpasser sig terminalbredden, `"stacked"` viser altid en enkelt kolonne.
|
||||
|
||||
[Learn more about using the TUI here](/docs/tui).
|
||||
|
||||
---
|
||||
|
||||
### Server
|
||||
|
||||
Du kan konfigurere serverindstillinger for kommandoerne `opencode serve` og `opencode web` gennem indstillingen `server`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Tilgængelige muligheder:
|
||||
|
||||
- `port` - Port til at lytte på.
|
||||
- `hostname` - Værtsnavn at lytte på. Når `mdns` er aktiveret, og der ikke er angivet noget værtsnavn, er standarden `0.0.0.0`.
|
||||
- `mdns` - Aktiver mDNS-tjenesteopdagelse. Dette gør det muligt for andre enheder på netværket at opdage din OpenCode-server.
|
||||
- `mdnsDomain` - Brugerdefineret domænenavn til mDNS-tjeneste. Som standard er `opencode.local`. Nyttigt til at køre flere forekomster på det samme netværk.
|
||||
- `cors` - Yderligere oprindelser for at tillade CORS ved brug af HTTP-serveren fra en browserbaseret klient. Værdier skal være fulde oprindelser (skema + vært + valgfri port), f.eks. `https://app.example.com`.
|
||||
|
||||
[Learn more about the server here](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### Værktøjer (`tools`)
|
||||
|
||||
Du kan administrere de værktøjer, en LLM kan bruge, gennem indstillingen `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about tools here](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### Modeller (`models`)
|
||||
|
||||
Du kan konfigurere de udbydere og modeller, du vil bruge i din OpenCode-konfiguration, gennem mulighederne `provider`, `model` og `small_model`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
Indstillingen `small_model` konfigurerer en separat model til lette opgaver som titelgenerering. Som standard forsøger OpenCode at bruge en billigere model, hvis en er tilgængelig fra din udbyder, ellers falder den tilbage til din hovedmodel.
|
||||
|
||||
Udbydermuligheder kan omfatte `timeout` og `setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - Anmodningstimeout i millisekunder (standard: 300000). Indstil til `false` for at deaktivere.
|
||||
- `setCacheKey` - Sørg for, at en cache-nøgle altid er indstillet til den udpegede udbyder.
|
||||
|
||||
Du kan også konfigurere [local models](/docs/models#local). [Learn more](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### Udbyder-specifikke muligheder
|
||||
|
||||
Nogle udbydere understøtter yderligere konfigurationsmuligheder ud over de generiske `timeout` og `apiKey` indstillinger.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
Amazon Bedrock understøtter AWS-specifik konfiguration:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - AWS region for Bedrock (standard til `AWS_REGION` env var eller `us-east-1`)
|
||||
- `profile` - AWS navngivet profil fra `~/.aws/credentials` (standard til `AWS_PROFILE` env var)
|
||||
- `endpoint` - Brugerdefineret slutpunkt URL for VPC-endepunkter. Dette er et alias for den generiske `baseURL`-indstilling, der bruger AWS-specifik terminologi. Hvis begge er angivet, har `endpoint` forrang.
|
||||
|
||||
:::note
|
||||
Bearer tokens (`AWS_BEARER_TOKEN_BEDROCK` eller `/connect`) har forrang over profilbaseret godkendelse. Se [authentication precedence](/docs/providers#authentication-precedence) for detaljer.
|
||||
:::
|
||||
|
||||
[Learn more about Amazon Bedrock configuration](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### Temaer (`themes`)
|
||||
|
||||
Du kan konfigurere det tema, du vil bruge i din OpenCode-konfiguration, gennem indstillingen `theme`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": ""
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### Agent
|
||||
|
||||
Du kan konfigurere opgaver specialiserede agenter til specifikke indstillinger gennem indstillingen `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// Disable file modification tools for review-only agent
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også definere agenter ved at bruge markdown-filer i `~/.config/opencode/agents/` eller `.opencode/agents/`. [Learn more here](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### Standardagent (`default_agent`)
|
||||
|
||||
Du kan indstille standardagenten ved at bruge indstillingen `default_agent`. Dette bestemmer, hvilken agent der bruges, når ingen er eksplicit angivet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
Standardagenten skal være en primær agent (ikke en subagent). Dette kan være en indbygget agent som `"build"` eller `"plan"`, eller en [custom agent](/docs/agents), du har defineret. Hvis den angivne agent ikke eksisterer eller er en underagent, vil OpenCode falde tilbage til `"build"` med en advarsel.
|
||||
|
||||
Denne indstilling gælder på tværs af alle grænseflader: TUI, CLI (`opencode run`), desktop-app og GitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### Deling (`share`)
|
||||
|
||||
Du kan konfigurere funktionen [share](/docs/share) gennem indstillingen `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
Dette kræver:
|
||||
|
||||
- `"manual"` - Tillad manuel deling via kommandoer (standard)
|
||||
- `"auto"` - Del automatisk nye samtaler
|
||||
- `"disabled"` - Deaktiver deling helt
|
||||
|
||||
Som standard er deling indstillet til manuel tilstand, hvor du eksplicit skal dele samtaler ved hjælp af kommandoen `/share`.
|
||||
|
||||
---
|
||||
|
||||
### Kommandoer (`command`)
|
||||
|
||||
Du kan konfigurere brugerdefinerede kommandoer til gentagne opgaver gennem indstillingen `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.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": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også definere kommandoer ved hjælp af markdown-filer i `~/.config/opencode/commands/` eller `.opencode/commands/`. [Learn more here](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### Tastebindinger (`keybinds`)
|
||||
|
||||
Du kan tilpasse dine nøglebindinger gennem indstillingen `keybinds`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### Auto-opdatering (`autoupdate`)
|
||||
|
||||
OpenCode vil automatisk downloade alle nye opdateringer, når den starter op. Du kan deaktivere dette med indstillingen `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
Hvis du ikke ønsker opdatering, men ønsker at blive underrettet, når en ny version er tilgængelig, skal du indstille `autoupdate` til `"notify"`.
|
||||
Bemærk, at dette kun virker, hvis det ikke blev installeret ved hjælp af en pakkehåndtering såsom Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### Formater (`formatter`)
|
||||
|
||||
Du kan konfigurere kodeformatere gennem indstillingen `formatter`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about formatters here](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### Tilladelse (`permission`)
|
||||
|
||||
Som standard opencode **tillader alle operationer** uden at kræve eksplicit godkendelse. Du kan ændre dette ved at bruge indstillingen `permission`.
|
||||
|
||||
For at sikre, at værktøjerne `edit` og `bash` for eksempel kræver brugergodkendelse:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about permissions here](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### Komprimering (`compaction`)
|
||||
|
||||
Du kan styre kontekstkomprimeringsadfærd gennem indstillingen `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true,
|
||||
"reserved": 10000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - Komprimer automatisk sessionen, når konteksten er fuld (standard: `true`).
|
||||
- `prune` - Fjern gamle værktøjsudgange for at gemme tokens (standard: `true`).
|
||||
- `reserved` - Tokenbuffer til komprimering. Efterlader nok vindue til at undgå overløb under komprimering
|
||||
|
||||
---
|
||||
|
||||
### Overvågning (`watcher`)
|
||||
|
||||
Du kan konfigurere ignoreringsmønstre for filovervåger gennem indstillingen `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Mønstre følger glob-syntaks. Brug dette til at udelukke støjende mapper fra filvisning.
|
||||
|
||||
---
|
||||
|
||||
### MCP
|
||||
|
||||
Du kan konfigurere MCP-servere, som du vil bruge, gennem indstillingen `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### Plugin
|
||||
|
||||
[Plugins](/docs/plugins) udvide OpenCode med brugerdefinerede værktøjer, kroge og integrationer.
|
||||
|
||||
Placer plugin-filer i `.opencode/plugins/` eller `~/.config/opencode/plugins/`. Du kan også indlæse plugins fra npm gennem indstillingen `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more here](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### Instruktioner (`instructions`)
|
||||
|
||||
Du kan konfigurere brugervejledningen til den model, du kan gennem indstillingen `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Dette kræver en række stier og globmønstre til instruktionsfiler. [Læs mere
|
||||
om regler her](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### Deaktiverede udbydere (`disabled_providers`)
|
||||
|
||||
Du kan deaktivere udbydere, der indlæses automatisk gennem `disabled_providers`-indstillingen. Dette er nyttigt, når du vil forhindre visse udbydere i at blive indlæst, deres legitimationsoplysninger er tilgængelige.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
`disabled_providers` har prioritet over `enabled_providers`.
|
||||
:::
|
||||
|
||||
Indstillingen `disabled_providers` accepterer en række udbyder-id'er. Når en udbyder er deaktiveret:
|
||||
|
||||
- Den vil ikke blive indlæst, selvom miljøvariabler er indstillet.
|
||||
- Den vil ikke blive indlæst, selvom API-nøgler er konfigureret via `/connect`-kommandoen.
|
||||
- Udbyderens modeller vises ikke på modelvalgslisten.
|
||||
|
||||
---
|
||||
|
||||
### Aktiverede udbydere (`enabled_providers`)
|
||||
|
||||
Du kan angive en tilladelsesliste over udbydere gennem muligheden `enabled_providers`. Når den er indstillet, vil kun de angivne udbydere blive aktiveret, og alle andre vil blive ignoreret.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
Dette er nyttigt, når du vil begrænse OpenCode til kun at bruge specifikke udbydere i stedet for at deaktivere dem én efter én.
|
||||
|
||||
:::note
|
||||
`disabled_providers` har prioritet over `enabled_providers`.
|
||||
:::
|
||||
|
||||
Hvis en udbyder optræder i både `enabled_providers` og `disabled_providers`, har `disabled_providers` prioritet for bagudkompatibilitet.
|
||||
|
||||
---
|
||||
|
||||
### Eksperimentel (`experimental`)
|
||||
|
||||
Nøglen `experimental` indeholder muligheder, der er under aktiv udvikling.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
Eksperimentelle muligheder er ikke stabile. De kan ændres eller fjernes uden varsel.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Variabler
|
||||
|
||||
Du kan bruge variabelsubstitution i dine konfigurationsfiler til at referere til miljøvariabler og filindhold.
|
||||
|
||||
---
|
||||
|
||||
### Miljøvariabler
|
||||
|
||||
Brug `{env:VARIABLE_NAME}` til at erstatte miljøvariabler:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis miljøvariablen ikke er indstillet, vil den blive erstattet med en tom streng.
|
||||
|
||||
---
|
||||
|
||||
### Filer
|
||||
|
||||
Brug `{file:path/to/file}` til at erstatte indholdet af en fil:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Filstier kan være:
|
||||
|
||||
- I forhold til konfigurationsfilbiblioteket
|
||||
- Eller absolutte stier, der starter med `/` eller `~`
|
||||
|
||||
Disse er nyttige til:
|
||||
|
||||
- Opbevaring af følsomme data som API-nøgler i separate filer.
|
||||
- Inklusiv store instruktionsfiler uden at rode i din konfiguration.
|
||||
- Deling af fælles konfigurationsuddrag på tværs af flere konfigurationsfiler.
|
||||
196
qimingcode/packages/web/src/content/docs/da/custom-tools.mdx
Normal file
196
qimingcode/packages/web/src/content/docs/da/custom-tools.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: Brugerdefinerede værktøjer
|
||||
description: Opret værktøjer, som LLM kan kalde opencode ind.
|
||||
---
|
||||
|
||||
Brugerdefinerede værktøjer er funktioner, du opretter, som LLM kan kalde under samtaler. De arbejder sammen med opencodes [built-in tools](/docs/tools) som `read`, `write` og `bash`.
|
||||
|
||||
---
|
||||
|
||||
## Oprettelse af et værktøj
|
||||
|
||||
Værktøjer er defineret som **TypeScript**- eller **JavaScript**-filer. Værktøjsdefinitionen kan dog kalde scripts skrevet på **alle sprog** - TypeScript eller JavaScript bruges kun til selve værktøjsdefinitionen.
|
||||
|
||||
---
|
||||
|
||||
### Placering
|
||||
|
||||
De kan definere:
|
||||
|
||||
- Lokalt ved at placere dem i biblioteket `.opencode/tools/` i dit projekt.
|
||||
- Eller globalt ved at placere dem i `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### Struktur
|
||||
|
||||
Den nemmeste måde at oprette værktøjer på er at bruge `tool()`-hjælperen, som giver typesikkerhed og validering.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
**filnavnet** bliver **værktøjsnavnet**. Ovenstående opretter et `database` værktøj.
|
||||
|
||||
---
|
||||
|
||||
#### Flere værktøjer pr. fil
|
||||
|
||||
Du kan også eksportere flere værktøjer fra en enkelt fil. Hver eksport bliver **et separat værktøj** med navnet **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Dette skaber værktøjer: `math_add` og `math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
#### Navnekollisioner med indbyggede værktøjer
|
||||
|
||||
Brugerdefinerede værktøjer er identificeret ved værktøjsnavn. Hvis et brugerdefineret værktøj bruger samme navn som et indbygget værktøj, har det brugerdefinerede værktøj forrang.
|
||||
|
||||
For eksempel erstatter denne fil det indbyggede `bash` værktøj:
|
||||
|
||||
```ts title=".opencode/tools/bash.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Restricted bash wrapper",
|
||||
args: {
|
||||
command: tool.schema.string(),
|
||||
},
|
||||
async execute(args) {
|
||||
return `blocked: ${args.command}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
:::note
|
||||
Foretræk unikke navne, medmindre du bevidst ønsker at erstatte et indbygget værktøj. Hvis du vil deaktivere et indbygget værktøj, men ikke overskrive det, skal du bruge [tilladelser](/docs/permissions).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Argumenter
|
||||
|
||||
Du kan bruge `tool.schema`, som kun er [Zod](https://zod.dev), til at definere argumenttyper.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også importere [Zod](https://zod.dev) direkte og returnere et almindeligt objekt:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Kontekst
|
||||
|
||||
Værktøjer modtager kontekst om den aktuelle session:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Brug `context.directory` til sessionens arbejdsmappe.
|
||||
Brug `context.worktree` til git-arbejdstræets rod.
|
||||
|
||||
---
|
||||
|
||||
## Eksempler
|
||||
|
||||
### Skriv et værktøj i Python
|
||||
|
||||
Du kan skrive dine værktøjer på et hvilket som helst sprog, du ønsker. Her er et eksempel, der tilføjer til tal ved hjælp af Python.
|
||||
|
||||
Først skal du oprette værktøjet som et Python-script:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
Opret derefter værktøjsdefinitionen, der kalder den:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Her bruger vi [`Bun.$`](https://bun.com/docs/runtime/shell)-værktøjet til at køre Python-scriptet.
|
||||
78
qimingcode/packages/web/src/content/docs/da/ecosystem.mdx
Normal file
78
qimingcode/packages/web/src/content/docs/da/ecosystem.mdx
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
title: Økosystem
|
||||
description: Projekter og integrationer bygget med OpenCode.
|
||||
---
|
||||
|
||||
En samling af samfundsprojekter bygget på OpenCode.
|
||||
|
||||
:::note
|
||||
Vil du tilføje dit OpenCode-relaterede projekt til denne liste? Send en PR.
|
||||
:::
|
||||
|
||||
Du kan også tjekke [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) og [opencode.cafe](https://opencode.cafe), et fællesskab, der samler økosystemet og fællesskabet.
|
||||
|
||||
---
|
||||
|
||||
## Plugins
|
||||
|
||||
| Navn | Beskrivelse |
|
||||
| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Kør automatisk OpenCode-sessioner i isolerede Daytona-sandkasser med git-synkronisering og live forhåndsvisninger |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injicer automatisk Helicone-sessionsoverskrifter til anmodningsgruppering |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Autoinjicer TypeScript/Svelte-typer i fillæsninger med opslagsværktøjer |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Brug dit ChatGPT Plus/Pro abonnement i stedet for API kreditter |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Brug din eksisterende Gemini-plan i stedet for API fakturering |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Brug Antigravitys gratis modeller i stedet for API fakturering |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Multi-branch devcontainer isolation med lavvandede kloner og automatisk tildelte porte |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth Plugin, med understøttelse af Google søgning og mere robust API håndtering |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimer tokenbrug ved at beskære forældede værktøjsoutput |
|
||||
| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Masker hemmeligheder/PII til pladsholdere i VibeGuard-stil før LLM-kald; gendan lokalt |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Tilføj native websearch-understøttelse for understøttede udbydere med Google jordet stil |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Gør det muligt for AI-agenter at køre baggrundsprocesser i en PTY, send interaktive input til dem. |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruktioner til ikke-interaktive shell-kommandoer - forhindrer hænger fra TTY-afhængige operationer |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Spor OpenCode brug med Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Ryd op afmærkningstabeller produceret af LLMs |
|
||||
| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply-redigering, WarpGrep-kodesøgning og kontekstkomprimering via Morph |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Baggrundsagenter, præbyggede LSP/AST/MCP værktøjer, kuraterede agenter, Claude Kodekompatibel |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Skrivebordsmeddelelser og lydadvarsler for OpenCode-sessioner |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Skrivebordsmeddelelser og lydadvarsler for tilladelser, fuldførelse og fejlhændelser |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | AI-drevet automatisk Zellij-sessionsnavngivning baseret på OpenCode-kontekst |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Tillad OpenCode-agenter til dovne load-prompter på efterspørgsel med færdighedsopdagelse og -injektion |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Vedvarende hukommelse på tværs af sessioner ved hjælp af Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktiv plangennemgang med visuel annotering og private/offline deling |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Udvid opencode /commands til et kraftfuldt orkestreringssystem med granulær flowkontrol |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planlæg tilbagevendende job ved hjælp af launchd (Mac) eller systemd (Linux) med cron-syntaks |
|
||||
| [micode](https://github.com/vtemian/micode) | Struktureret brainstorm → Plan → Implementer workflow med session kontinuitet |
|
||||
| [octto](https://github.com/vtemian/octto) | Interaktiv browser-UI til AI-brainstorming med formularer med flere spørgsmål |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Claude Baggrundsagenter i kodestil med asynkron-delegering og kontekstvedholdenhed |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Native OS-meddelelser for OpenCode – ved, hvornår opgaver er fuldført |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Bundled multi-agent orkestreringssele – 16 komponenter, én installation |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Nulfriktions git-arbejdstræer for OpenCode |
|
||||
| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Spor og fejlfind dine AI-agenter med Sentry AI Monitoring |
|
||||
|
||||
---
|
||||
|
||||
## Projekter
|
||||
|
||||
| Navn | Beskrivelse |
|
||||
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | Discord-bot til at styre OpenCode-sessioner, bygget på SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim-plugin til redaktør-bevidste prompter, bygget på API |
|
||||
| [portal](https://github.com/hosenur/portal) | Mobile-first web UI til OpenCode over Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Skabelon til at bygge OpenCode plugins |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim-frontend til opencode - en terminalbaseret AI-kodningsagent |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK udbyder til brug af OpenCode via @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web / Desktop App og VS Code udvidelse til OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian plugin, der integrerer OpenCode i Obsidians brugergrænseflade |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | Et open source-alternativ til Claude Cowork, drevet af OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | OpenCode udvidelsesmanager med bærbare, isolerede profiler. |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop-, web-, mobil- og fjernklientapp til OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## Agenter
|
||||
|
||||
| Navn | Beskrivelse |
|
||||
| ----------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | Modulære AI-agenter og -kommandoer til struktureret udvikling |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfigurationer, prompter, agenter og plugins til forbedrede arbejdsgange |
|
||||
170
qimingcode/packages/web/src/content/docs/da/enterprise.mdx
Normal file
170
qimingcode/packages/web/src/content/docs/da/enterprise.mdx
Normal file
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: Enterprise
|
||||
description: Brug af OpenCode sikkert i din organisation.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise er for organisationer, der ønsker at sikre, at deres kode og data aldrig forlader deres infrastruktur. Det kan gøre dette ved at bruge en centraliseret konfiguration, der integreres med din SSO og interne AI-gateway.
|
||||
|
||||
:::note
|
||||
OpenCode gemmer ingen af din kode eller kontekstdata.
|
||||
:::
|
||||
|
||||
Sådan kommer du i gang med OpenCode Enterprise:
|
||||
|
||||
1. Lav en prøvetur internt med dit team.
|
||||
2. **<a href={email}>Kontakt os</a>** for at diskutere priser og implementeringsmuligheder.
|
||||
|
||||
---
|
||||
|
||||
## Prøveperiode
|
||||
|
||||
OpenCode er open source og gemmer ingen af din kode eller kontekstdata, så dine udviklere kan simpelthen [get started](/docs/) og udføre en prøveversion.
|
||||
|
||||
---
|
||||
|
||||
### Datahåndtering
|
||||
|
||||
**OpenCode gemmer ikke din kode eller kontekstdata.** Al behandling sker lokalt eller gennem direkte API-opkald til din AI-udbyder.
|
||||
|
||||
Det betyder, at så længe du bruger en udbyder, du stoler på, eller en intern
|
||||
AI-gateway, du kan bruge OpenCode sikkert.
|
||||
|
||||
Den eneste advarsel her er den valgfrie `/share`-funktion.
|
||||
|
||||
---
|
||||
|
||||
#### Deling af samtaler
|
||||
|
||||
Hvis en bruger aktiverer funktionen `/share`, sender samtalen og de data, der er knyttet til den, til den tjeneste, vi bruger til at hoste disse delesider på opencode.ai.
|
||||
|
||||
Dataene serveres i øjeblikket gennem vores CDN's edge-netværk og cachelagres på kanten nær dine brugere.
|
||||
|
||||
Vi anbefaler, at du deaktiverer dette for din prøveperiode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[Learn more about sharing](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### Kodeejerskab
|
||||
|
||||
**Du ejer al kode produceret af OpenCode.** Der er ingen licensbegrænsninger eller ejerskabskrav.
|
||||
|
||||
---
|
||||
|
||||
## Priser
|
||||
|
||||
Vi bruger en per-sæde-model til OpenCode Enterprise. Hvis du har din egen LLM-gateway, kræver vi ikke betaling for brugte tokens. For yderligere oplysninger om priser og implementeringsmuligheder, **<a href={email}>kontakt os</a>**.
|
||||
|
||||
---
|
||||
|
||||
## Implementering
|
||||
|
||||
Når du har afsluttet din prøveperiode, og du er klar til at bruge OpenCode kl
|
||||
din organisation, kan du **<a href={email}>kontakte os</a>** for at diskutere
|
||||
prissætning og implementeringsmuligheder.
|
||||
|
||||
---
|
||||
|
||||
### Central konfiguration
|
||||
|
||||
Vi kan konfigurere OpenCode til at bruge en enkelt central konfiguration for hele din organisation.
|
||||
|
||||
Denne centraliserede konfiguration kan integreres med din SSO-udbyder og sikrer, at alle brugere kan få adgang til din interne AI-gateway.
|
||||
|
||||
---
|
||||
|
||||
### SSO-integration
|
||||
|
||||
Gennem den centrale konfiguration kan OpenCode integreres med din organisationer SSO-udbyder til godkendelse.
|
||||
|
||||
Denne giver OpenCode mulighed for at få legitimationsoplysninger til din interne AI-gateway gennem dette eksisterende identitetsadministrationssystem.
|
||||
|
||||
---
|
||||
|
||||
### Intern AI-gateway
|
||||
|
||||
Med den centrale konfiguration kan OpenCode også konfigureres til kun at bruge din interne AI-gateway.
|
||||
|
||||
Du kan også deaktivere alle andre AI-udbydere og sikre, at alle anmodninger går gennem din organisations godkendte infrastruktur.
|
||||
|
||||
---
|
||||
|
||||
### Selv-hosting
|
||||
|
||||
Selvom vi anbefaler at deaktivere delesiderne for at sikre, at dine data aldrig forsvinder
|
||||
din organisation, kan vi også hjælpe dig med at selv hoste dem på din infrastruktur.
|
||||
|
||||
Dette er i øjeblikket på vores køreplan. Hvis du er interesseret, **<a href={email}>giv os besked</a>**.
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
<details>
|
||||
<summary>Hvad er OpenCode Enterprise?</summary>
|
||||
|
||||
OpenCode Enterprise er for organisationer, der ønsker at sikre, at deres kode og data aldrig forlader deres infrastruktur. Det kan gøre dette ved at bruge en centraliseret konfiguration, der integreres med din SSO og interne AI-gateway.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Hvordan kommer jeg i gang med OpenCode Enterprise?</summary>
|
||||
|
||||
Du skal blot starte med en intern prøveperiode med dit team. OpenCode gemmer som standard ikke din kode eller kontekstdata, hvilket gør det nemt at komme i gang.
|
||||
|
||||
Så **<a href={email}>kontakt os</a>** for at diskutere priser og implementeringsmuligheder.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Hvordan fungerer virksomhedspriser?</summary>
|
||||
|
||||
Vi tilbyder virksomhedspriser pr. sæde. Hvis du har din egen LLM-gateway, kræver vi ikke betaling for brugte tokens. For yderligere detaljer, **<a href={email}>kontakt os</a>** for et brugerdefineret tilbud baseret på din organisations behov.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Er mine data sikret med OpenCode Enterprise?</summary>
|
||||
|
||||
Ja. OpenCode gemmer ikke din kode eller kontekstdata. Al behandling sker lokalt eller gennem direkte API-opkald til din AI-udbyder. Med central konfiguration og SSO-integration forbliver dine data sikre i din organisationers infrastruktur.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Kan vi bruge vores eget private NPM-register?</summary>
|
||||
|
||||
OpenCode understøtter private npm registre gennem Buns oprindelige `.npmrc` filunderstøttelse. Hvis din organisation bruger et privat register, såsom JFrog Artifactory, Nexus eller lignende, skal du sikre dig, at udviklerne er godkendt, før de kører OpenCode.
|
||||
|
||||
Sådan konfigurerer du godkendelse med dit private register:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
Dette opretter `~/.npmrc` med godkendelsesdetaljer. OpenCode vil automatisk
|
||||
samle dette op.
|
||||
|
||||
:::caution
|
||||
Du skal være logget ind i det private register, før du kører OpenCode.
|
||||
:::
|
||||
|
||||
Alternativt kan du manuelt konfigurere en `.npmrc` fil:
|
||||
|
||||
```bash title="~/.npmrc"
|
||||
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
|
||||
```
|
||||
|
||||
Udviklere skal være logget ind på det private register, før de kører OpenCode for at sikre, at pakker kan installeres fra din virksomhedsregistrering.
|
||||
|
||||
</details>
|
||||
131
qimingcode/packages/web/src/content/docs/da/formatters.mdx
Normal file
131
qimingcode/packages/web/src/content/docs/da/formatters.mdx
Normal file
@@ -0,0 +1,131 @@
|
||||
---
|
||||
title: Formatere
|
||||
description: OpenCode bruger sprogspecifikke formatere.
|
||||
---
|
||||
|
||||
OpenCode formaterer automatisk filer, efter de er skrevet eller redigeret ved hjælp af sprogspecifikke formatere. Dette sikrer, at den kode, der genereres, følger kodestilene for dit projekt.
|
||||
|
||||
---
|
||||
|
||||
## Indbyggede
|
||||
|
||||
OpenCode leveres med flere indbyggede formatere til populære sprog og rammer. Nedenfor er en liste over de formatere, understøttede filtypenavne og kommandoer eller konfigurationsmuligheder, der har brug for.
|
||||
|
||||
| Formater | Udvidelser | Krav |
|
||||
| --------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | `gofmt` kommando tilgængelig |
|
||||
| blande | .ex,.exs,.eex,.heex,.leex,.neex,.sface | `mix` kommando tilgængelig |
|
||||
| smukkere | .js,.jsx,.ts,.tsx,.html,.css,.md,.json,.yaml og [more](https://prettier.io/docs/en/index.html) | `prettier` afhængighed i `package.json` |
|
||||
| biome | .js,.jsx,.ts,.tsx,.html,.css,.md,.json,.yaml og [more](https://biomejs.dev/) | `biome.json(c)` konfigurationsfil |
|
||||
| zig | .zig,.zon | `zig` kommando tilgængelig |
|
||||
| klang-format | .c,.cpp,.h,.hpp,.ino og [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` konfigurationsfil |
|
||||
| ktlint | .kt,.kts | `ktlint` kommando tilgængelig |
|
||||
| ruff | .py,.pyi | `ruff` kommando tilgængelig med konfiguration |
|
||||
| rustfmt | .rs | `rustfmt` kommando tilgængelig |
|
||||
| cargofmt | .rs | `cargo fmt` kommando tilgængelig |
|
||||
| uv | .py,.pyi | `uv` kommando tilgængelig |
|
||||
| rubocop | .rb,.rake,.gemspec,.ru | `rubocop` kommando tilgængelig |
|
||||
| standardrb | .rb,.rake,.gemspec,.ru | `standardrb` kommando tilgængelig |
|
||||
| htmlbeautifier | .erb,.html.erb | `htmlbeautifier` kommando tilgængelig |
|
||||
| luft | .R | `air` kommando tilgængelig |
|
||||
| dart | .dart | `dart` kommando tilgængelig |
|
||||
| dfmt | .d | `dfmt` kommando tilgængelig |
|
||||
| ocamlformat | .ml,.mli | `ocamlformat` kommando tilgængelig og `.ocamlformat` config fil |
|
||||
| terraform | .tf,.tfvars | `terraform` kommando tilgængelig |
|
||||
| glimt | .glimt | `gleam` kommando tilgængelig |
|
||||
| nixfmt | .nix | `nixfmt` kommando tilgængelig |
|
||||
| shfmt | .sh,.bash | `shfmt` kommando tilgængelig |
|
||||
| pint | .php | `laravel/pint` afhængighed i `composer.json` |
|
||||
| oxfmt (Eksperimentel) | .js,.jsx,.ts,.tsx | `oxfmt` afhængighed i `package.json` og en [experimental env variable flag](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | `ormolu` kommando tilgængelig |
|
||||
|
||||
Så hvis dit projekt har `prettier` i din `package.json`, vil OpenCode automatisk bruge det.
|
||||
|
||||
---
|
||||
|
||||
## Sådan fungerer det
|
||||
|
||||
Når OpenCode skriver eller redigerer en fil, vil det:
|
||||
|
||||
1. Kontrollerer filtypenavnet mod alle aktiverede formatere.
|
||||
2. Kører den relevante formateringskommando på filen.
|
||||
3. Anvender formateringsændringerne automatisk.
|
||||
|
||||
Denne proces sker i baggrunden, hvilket sikrer, at dine kodestile vedligeholdes uden nogen manuelle trin.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan tilpasse formatere gennem afsnittet `formatter` i din OpenCode-konfiguration.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
Hver formateringskonfiguration understøtter følgende:
|
||||
|
||||
| Ejendom | Skriv | Beskrivelse |
|
||||
| ------------- | -------- | -------------------------------------------------------------------- |
|
||||
| `disabled` | boolean | Indstil dette til `true` for at deaktivere formateringsværktøjet |
|
||||
| `command` | string[] | Kommandoen til at køre for formatering |
|
||||
| `environment` | object | Miljøvariabler, der skal indstilles, når formateringsværktøjet køres |
|
||||
| `extensions` | string[] | Filtypenavne, som denne formaterer skal håndtere |
|
||||
|
||||
Lad os se på nogle eksempler.
|
||||
|
||||
---
|
||||
|
||||
### Deaktivering af formatere
|
||||
|
||||
For at deaktivere **alle** formatere globalt, skal du indstille `formatter` til `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
For at deaktivere en **specifik** formatter, skal du indstille `disabled` til `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Brugerdefinerede formatere
|
||||
|
||||
Du kan tilsidesætte de indbyggede formattere eller tilføje nye ved at angive kommandoen, miljøvariabler og filtypenavne:
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
},
|
||||
"custom-markdown-formatter": {
|
||||
"command": ["deno", "fmt", "$FILE"],
|
||||
"extensions": [".md"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**`$FILE` pladsholderen** i kommandoen vil blive erstattet med stien til filen, der formateres.
|
||||
321
qimingcode/packages/web/src/content/docs/da/github.mdx
Normal file
321
qimingcode/packages/web/src/content/docs/da/github.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: Brug OpenCode i GitHub-problemer og Pull Requests.
|
||||
---
|
||||
|
||||
OpenCode integreres med din GitHub arbejdsgang. Nævn `/opencode` eller `/oc` i din kommentar, og OpenCode vil udføre opgaver i din GitHub Actions-løber.
|
||||
|
||||
---
|
||||
|
||||
## Funktioner
|
||||
|
||||
- **Triageproblemer**: Bed OpenCode om at undersøge et problem og forklare dig det.
|
||||
- **Ret og implementer**: Bed OpenCode om at løse et problem eller implementere en funktion. Og det vil fungere i en ny branch og indsende en PR med alle ændringerne.
|
||||
- **Sikker**: OpenCode løber inde i din GitHubs løbere.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
Kør følgende kommando i et projekt, der er i en GitHub repo:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
Dette vil lede dig gennem installation af GitHub-appen, oprettelse af arbejdsgangen og opsætning af hemmeligheder.
|
||||
|
||||
---
|
||||
|
||||
### Manuel opsætning
|
||||
|
||||
Eller du kan indstille det manuelt.
|
||||
|
||||
1. **Installationsprogrammet GitHub-appen**
|
||||
|
||||
Gå over til [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Sørg for, at det er installeret på mållageret.
|
||||
|
||||
2. **Tilføj arbejdsgangen**
|
||||
|
||||
Tilføj følgende workflow-fil til `.github/workflows/opencode.yml` i din repo. Sørg for at indstille de relevante `model` og nødvendige API-nøgler i `env`.
|
||||
|
||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
||||
name: opencode
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
if: |
|
||||
contains(github.event.comment.body, '/oc') ||
|
||||
contains(github.event.comment.body, '/opencode')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
# share: true
|
||||
# github_token: xxxx
|
||||
```
|
||||
|
||||
3. **Opbevar API-nøglerne i hemmeligheder**
|
||||
|
||||
I din organisation eller dit projekt **indstillinger** skal du udvide **Hemmeligheder og variabler** til venstre og vælge **Handlinger**. Og tilføj de nødvendige API-nøgler.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
- `model`: Den model, der skal bruges med OpenCode. Antager formatet `provider/model`. Dette er **påkrævet**.
|
||||
- `agent`: Agenten, der skal bruges. Skal være en primær agent. Falder tilbage til `default_agent` fra config eller `"build"`, hvis den ikke findes.
|
||||
- `share`: Om OpenCode-sessionen skal dele. Standard er **true** for offentlige arkiver.
|
||||
- `prompt`: Valgfri brugerdefineret prompt for at tilsidesætte standardadfærden. Brug dette til at tilpasse, hvordan OpenCode behandler anmodninger.
|
||||
- `token`: Valgfrit GitHub adgangstoken til at udføre operationer såsom oprettelse af kommentarer, begå ændringer og åbning af Pull Requests. Som standard bruger OpenCode installationsadgangstokenet fra OpenCode GitHub-appen, så commits, kommentarer og Pull Requests ser ud til at komme fra appen.
|
||||
|
||||
Alternativt kan du bruge GitHub Action runners [built-in `GITHUB_TOKEN`](OpenCode) uden at installere OpenCode GitHub appen. Bare sørg for at give de nødvendige tilladelser i dit workflow:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
Du kan også bruge en [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT), hvis det foretrækkes.
|
||||
|
||||
---
|
||||
|
||||
## Understøttede begivenheder
|
||||
|
||||
OpenCode kan udløses af følgende GitHub hændelser:
|
||||
|
||||
| Begivenhedstype | Udløst af | Detaljer |
|
||||
| ----------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | Kommentarer og problemer eller PR | Nævn `/opencode` eller `/oc` i din kommentar. OpenCode læser kontekst og kan oprette brancher, åbne PR'er eller svare. |
|
||||
| `pull_request_review_comment` | Kommenter specifikke kodelinjer i en PR | Nævn `/opencode` eller `/oc`, mens du gennemgår koden. OpenCode modtager filsti, linjenumre og diff-kontekst. |
|
||||
| `issues` | Udgave åbnet eller redigeret | Udløs automatisk OpenCode, når problemer oprettes eller ændres. Kræver `prompt` input. |
|
||||
| `pull_request` | PR åbnet eller opdateret | Udløs automatisk OpenCode, når PR'er åbnes, synkroniseres eller genåbnes. Nyttigt til automatiserede kodegennemgange. |
|
||||
| `schedule` | Cron-baseret tidsplan | Kør OpenCode efter en tidsplan. Kræver `prompt` input. Output går til logfiler og PR'er (intet problem ved kommentere). |
|
||||
| `workflow_dispatch` | Manuel trigger fra GitHub UI | Udløs OpenCode efter behov via fanen Handlinger. Kræver `prompt` input. Output går til logfiler og PR'er. |
|
||||
|
||||
### Tidsplan eksempel
|
||||
|
||||
Kør OpenCode efter en tidsplan for at udføre automatiske opgaver:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Scheduled OpenCode Task
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Every Monday at 9am UTC
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review the codebase for any TODO comments and create a summary.
|
||||
If you find issues worth addressing, open an issue to track them.
|
||||
```
|
||||
|
||||
For planlagte begivenheder er `prompt` input **påkrævet**, da der ikke er nogen kommentarer at udtrække instruktioner fra. Planlagte arbejdsgange kører uden en brugerkontekst til kontrol af tilladelser, så arbejdsgangen skal give `contents: write` og `pull-requests: write`, hvis du forventer, at OpenCode skal oprette brancher eller PR'er.
|
||||
|
||||
---
|
||||
|
||||
### Pull Request eksempel
|
||||
|
||||
Gennemgå automatisk PR'er, når de åbnes eller opdateres:
|
||||
|
||||
```yaml title=".github/workflows/opencode-review.yml"
|
||||
name: opencode-review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
use_github_token: true
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
For `pull_request` hændelser, hvis der ikke er angivet nogen `prompt`, vil OpenCode som standard gennemgå Pull Requesten.
|
||||
|
||||
---
|
||||
|
||||
### Issues Triage eksempel
|
||||
|
||||
Triage automatisk nye problemer. Dette eksempel filtrerer til konti ældre end 30 dage for at reducere spam:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Issue Triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Check account age
|
||||
id: check
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const user = await github.rest.users.getByUsername({
|
||||
username: context.payload.issue.user.login
|
||||
});
|
||||
const created = new Date(user.data.created_at);
|
||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
||||
return days >= 30;
|
||||
result-encoding: string
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
if: steps.check.outputs.result == 'true'
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
if: steps.check.outputs.result == 'true'
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review this issue. If there's a clear fix or relevant docs:
|
||||
- Provide documentation links
|
||||
- Add error handling guidance for code examples
|
||||
Otherwise, do not comment.
|
||||
```
|
||||
|
||||
For `issues` begivenheder er `prompt` input **påkrævet**, da der ikke er nogen kommentarer at udtrække instruktioner fra.
|
||||
|
||||
---
|
||||
|
||||
## Brugerdefinerede prompter
|
||||
|
||||
Tilsidesæt standardprompten for at tilpasse OpenCodes adfærd til din arbejdsgang.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
Dette er nyttigt til at håndhæve specifikke gennemgangskriterier, kodningsstandarder eller fokusområder, der er relevante for dit projekt.
|
||||
|
||||
---
|
||||
|
||||
## Eksempler
|
||||
|
||||
Her er nogle eksempler på, hvordan du kan bruge OpenCode i GitHub.
|
||||
|
||||
- **Forklar et problem**
|
||||
|
||||
Tilføj denne kommentar i et GitHub-nummer.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode vil læse hele tråden, inklusive alle kommentarer, og svare med en klar forklaring.
|
||||
|
||||
- **Løs et problem**
|
||||
|
||||
I et GitHub-problem skal du sige:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
Og OpenCode vil oprette en ny branch, implementere ændringer og åbne en PR med ændringer.
|
||||
|
||||
- **Gennemgå PR'er og foretag ændringer**
|
||||
|
||||
Efterlad følgende kommentar på en GitHub PR.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
OpenCode vil implementere den ønskede ændring og forpligtelse til den samme PR.
|
||||
|
||||
- **Gennemgå specifikke kodelinjer**
|
||||
|
||||
Efterlad en kommentar direkte på kodelinjer i PR's faneblad "Filer". OpenCode detekterer automatisk filer, linjenumrene og diff-konteksten for at give præcise svar.
|
||||
|
||||
```
|
||||
[Comment on specific lines in Files tab]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
Når du kommenterer på specifikke linjer, modtager OpenCode:
|
||||
- Den nøjagtige fil bliver gennemgået
|
||||
- De specifikke kodelinjer
|
||||
- Den omgivende forskellig kontekst
|
||||
- Linjenummeroplysninger
|
||||
|
||||
Dette giver mulighed for mere målrettede anmodninger uden at skulle angive filstier eller linjenumre manuelt.
|
||||
195
qimingcode/packages/web/src/content/docs/da/gitlab.mdx
Normal file
195
qimingcode/packages/web/src/content/docs/da/gitlab.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: Brug OpenCode i GitLab-problemer og Merge Requests.
|
||||
---
|
||||
|
||||
OpenCode integreres med din GitLab-arbejdsgang gennem din GitLab CI/CD-pipeline eller med GitLab Duo.
|
||||
|
||||
I begge tilfælde vil OpenCode køre på dine GitLab-løbere.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
OpenCode fungerer i en almindelig GitLab-pipeline. Du kan bygge det ind i en pipeline som en [CI component](https://docs.gitlab.com/ee/ci/components/)
|
||||
|
||||
Her bruger vi en community-skabt CI/CD-komponent til OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### Funktioner
|
||||
|
||||
- **Brug brugerdefineret konfiguration pr. job**: Konfigurer OpenCode med en brugerdefineret konfigurationsmappe, for eksempel `./config/#custom-directory` for at aktivere eller deaktivere funktionalitet pr. OpenCode påkald.
|
||||
- **Minimal opsætning**: CI-komponenten sætter OpenCode op i baggrunden, du behøver kun at oprette OpenCode-konfigurationen og den indledende prompt.
|
||||
- **Fleksibel**: CI-komponenten understøtter flere input til at tilpasse dens adfærd
|
||||
|
||||
---
|
||||
|
||||
### Opsætning
|
||||
|
||||
1. Gem din OpenCode-autentificering JSON som en filtype CI-miljøvariabel under **Indstillinger** > **CI/CD** > **Variabler**. Sørg for at markere dem som "Maskede og skjulte".
|
||||
2. Tilføj følgende til din `.gitlab-ci.yml` fil.
|
||||
|
||||
```yaml title=".gitlab-ci.yml"
|
||||
include:
|
||||
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
|
||||
inputs:
|
||||
config_dir: ${CI_PROJECT_DIR}/opencode-config
|
||||
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
|
||||
command: optional-custom-command
|
||||
message: "Your prompt here"
|
||||
```
|
||||
|
||||
For flere input og use cases [check out the docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) for denne komponent.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
OpenCode integreres med din GitLab-arbejdsgang.
|
||||
Nævn `@opencode` i en kommentar, og OpenCode vil udføre opgaver i din GitLab CI-pipeline.
|
||||
|
||||
---
|
||||
|
||||
### Funktioner
|
||||
|
||||
- **Triageproblemer**: Bed OpenCode om at undersøge et problem og forklare dig det.
|
||||
- **Ret og implementer**: Bed OpenCode om at løse et problem eller implementere en funktion.
|
||||
Det vil oprette en ny branch og rejse en Merge Request med ændringer.
|
||||
- **Sikker**: OpenCode kører på dine GitLab-løbere.
|
||||
|
||||
---
|
||||
|
||||
### Opsætning
|
||||
|
||||
OpenCode kører i din GitLab CI/CD pipeline, her er hvad du skal bruge for at konfigurere det:
|
||||
|
||||
:::tip
|
||||
Tjek [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for opdaterede instruktioner.
|
||||
:::
|
||||
|
||||
1. Konfigurer dit GitLab-miljø
|
||||
2. Konfigurer CI/CD
|
||||
3. Få en API-nøgle til en AI-modeludbyder
|
||||
4. Opret en servicekonto
|
||||
5. Konfigurer CI/CD variabler
|
||||
6. Opret en flow-konfigurationsfil, her er et eksempel:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Flowkonfiguration</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Installing opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Installing glab"
|
||||
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
|
||||
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
|
||||
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
|
||||
- apt-get install --yes glab
|
||||
- echo "Configuring glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Creating OpenCode auth configuration"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configuring git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testing glab"
|
||||
- glab issue list
|
||||
- echo "Running OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
You are an AI assistant helping with GitLab operations.
|
||||
|
||||
Context: $AI_FLOW_CONTEXT
|
||||
Task: $AI_FLOW_INPUT
|
||||
Event: $AI_FLOW_EVENT
|
||||
|
||||
Please execute the requested task using the available GitLab tools.
|
||||
Be thorough in your analysis and provide clear explanations.
|
||||
|
||||
<important>
|
||||
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
|
||||
|
||||
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
|
||||
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Checking for git changes and pushing if any exist"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Git changes detected, adding and pushing..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "No staged changes to commit"
|
||||
else
|
||||
echo "Committing changes to branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Codex changes"
|
||||
echo "Pushing changes up to $CI_WORKLOAD_REF"
|
||||
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
|
||||
echo "Changes successfully pushed"
|
||||
fi
|
||||
else
|
||||
echo "No git changes detected, skipping push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Du kan henvise til [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for detaljerede instruktioner.
|
||||
|
||||
---
|
||||
|
||||
### Eksempler
|
||||
|
||||
Her er nogle eksempler på, hvordan du kan bruge OpenCode i GitLab.
|
||||
|
||||
:::tip
|
||||
Du kan konfigurere til at bruge en anden udløsersætning end `@opencode`.
|
||||
:::
|
||||
|
||||
- **Forklar et problem**
|
||||
|
||||
Tilføj denne kommentar i et GitLab-problem.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
OpenCode vil læse spørgsmålet og svare med en klar forklaring.
|
||||
|
||||
- **Løs et problem**
|
||||
|
||||
I et GitLab-nummer skal du sige:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
OpenCode vil oprette en ny branch, implementere ændringer og åbne en Merge Request med ændringer.
|
||||
|
||||
- **Gennemgå Merge Requests**
|
||||
|
||||
Efterlad følgende kommentar til en GitLab-Merge Request.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
OpenCode vil gennemgå din Merge Request og give feedback.
|
||||
196
qimingcode/packages/web/src/content/docs/da/go.mdx
Normal file
196
qimingcode/packages/web/src/content/docs/da/go.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: Go
|
||||
description: Lavprisabonnement til åbne kodningsmodeller.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Go er et lavprisabonnement — **$5 for din første måned**, derefter **$10/måned** — der giver dig pålidelig adgang til populære åbne kodningsmodeller.
|
||||
|
||||
:::note
|
||||
OpenCode Go er i øjeblikket i beta.
|
||||
:::
|
||||
|
||||
Go fungerer som enhver anden udbyder i OpenCode. Du abonnerer på OpenCode Go og
|
||||
får din API-nøgle. Det er **helt valgfrit**, og du behøver ikke at bruge det for at
|
||||
bruge OpenCode.
|
||||
|
||||
Det er primært designet til internationale brugere, med modeller hostet i USA, EU og Singapore for at sikre stabil global adgang.
|
||||
|
||||
---
|
||||
|
||||
## Baggrund
|
||||
|
||||
Åbne modeller er blevet rigtig gode. De opnår nu en ydeevne, der er tæt på
|
||||
proprietære modeller til kodningsopgaver. Og fordi mange udbydere kan levere dem
|
||||
konkurrencedygtigt, er de som regel langt billigere.
|
||||
|
||||
Det kan dog være svært at få pålidelig adgang til dem med lav latenstid. Udbydere
|
||||
varierer i kvalitet og tilgængelighed.
|
||||
|
||||
:::tip
|
||||
Vi testede en udvalgt gruppe af modeller og udbydere, der fungerer godt med OpenCode.
|
||||
:::
|
||||
|
||||
For at løse dette, gjorde vi et par ting:
|
||||
|
||||
1. Vi testede en udvalgt gruppe af åbne modeller og talte med deres teams om, hvordan man
|
||||
bedst kører dem.
|
||||
2. Derefter arbejdede vi med nogle få udbydere for at sikre, at disse blev leveret
|
||||
korrekt.
|
||||
3. Til sidst benchmarkede vi kombinationen af model og udbyder, og kom frem til
|
||||
en liste, som vi trygt kan anbefale.
|
||||
|
||||
OpenCode Go giver dig adgang til disse modeller for **$5 for din første måned**, derefter **$10/måned**.
|
||||
|
||||
---
|
||||
|
||||
## Sådan fungerer det
|
||||
|
||||
OpenCode Go fungerer som enhver anden udbyder i OpenCode.
|
||||
|
||||
1. Du logger ind på **<a href={console}>OpenCode Zen</a>**, abonnerer på Go, og
|
||||
kopierer din API-nøgle.
|
||||
2. Du kører kommandoen `/connect` i TUI'en, vælger `OpenCode Go`, og indsætter
|
||||
din API-nøgle.
|
||||
3. Kør `/models` i TUI'en for at se listen over tilgængelige modeller gennem Go.
|
||||
|
||||
:::note
|
||||
Kun ét medlem per arbejdsområde kan abonnere på OpenCode Go.
|
||||
:::
|
||||
|
||||
Den nuværende liste over modeller inkluderer:
|
||||
|
||||
- **GLM-5**
|
||||
- **GLM-5.1**
|
||||
- **Kimi K2.5**
|
||||
- **Kimi K2.6**
|
||||
- **MiMo-V2-Pro**
|
||||
- **MiMo-V2-Omni**
|
||||
- **MiMo-V2.5-Pro**
|
||||
- **MiMo-V2.5**
|
||||
- **MiniMax M2.5**
|
||||
- **Qwen3.5 Plus**
|
||||
- **Qwen3.6 Plus**
|
||||
- **MiniMax M2.7**
|
||||
- **DeepSeek V4 Pro**
|
||||
- **DeepSeek V4 Flash**
|
||||
|
||||
Listen over modeller kan ændre sig, efterhånden som vi tester og tilføjer nye.
|
||||
|
||||
---
|
||||
|
||||
## Forbrugsgrænser
|
||||
|
||||
OpenCode Go inkluderer følgende grænser:
|
||||
|
||||
- **5-timers grænse** — forbrug for $12
|
||||
- **Ugentlig grænse** — forbrug for $30
|
||||
- **Månedlig grænse** — forbrug for $60
|
||||
|
||||
Grænserne er defineret i dollarværdi. Det betyder, at dit faktiske antal anmodninger afhænger af den model, du bruger. Billigere modeller som MiniMax M2.5 tillader flere anmodninger, mens dyrere modeller som GLM-5.1 tillader færre.
|
||||
|
||||
Tabellen nedenfor giver et estimeret antal anmodninger baseret på typiske Go-forbrugsmønstre:
|
||||
|
||||
| Model | anmodninger pr. 5 timer | anmodninger pr. uge | anmodninger pr. måned |
|
||||
| ------------------ | ----------------------- | ------------------- | --------------------- |
|
||||
| GLM-5.1 | 880 | 2,150 | 4,300 |
|
||||
| GLM-5 | 1,150 | 2,880 | 5,750 |
|
||||
| Kimi K2.5 | 1,850 | 4,630 | 9,250 |
|
||||
| Kimi K2.6 | 1,150 | 2,880 | 5,750 |
|
||||
| MiMo-V2-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2-Omni | 2,150 | 5,450 | 10,900 |
|
||||
| MiMo-V2.5-Pro | 1,290 | 3,225 | 6,450 |
|
||||
| MiMo-V2.5 (≤ 256K) | 2,150 | 5,450 | 10,900 |
|
||||
| MiniMax M2.7 | 3,400 | 8,500 | 17,000 |
|
||||
| MiniMax M2.5 | 6,300 | 15,900 | 31,800 |
|
||||
| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 |
|
||||
| Qwen3.5 Plus | 10,200 | 25,200 | 50,500 |
|
||||
| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 |
|
||||
| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 |
|
||||
|
||||
Estimaterne er baseret på observerede gennemsnitlige anmodningsmønstre:
|
||||
|
||||
- GLM-5/5.1 — 700 input, 52.000 cachelagrede, 150 output-tokens pr. anmodning
|
||||
- Kimi K2.5/K2.6 — 870 input, 55.000 cachelagrede, 200 output-tokens pr. anmodning
|
||||
- DeepSeek V4 Pro — 750 input, 82.000 cachelagrede, 290 output-tokens pr. anmodning
|
||||
- DeepSeek V4 Flash — 790 input, 68.000 cachelagrede, 280 output-tokens pr. anmodning
|
||||
- MiniMax M2.7/M2.5 — 300 input, 55.000 cachelagrede, 125 output-tokens pr. anmodning
|
||||
- Qwen3.5 Plus — 410 input, 47.000 cachelagrede, 140 output-tokens pr. anmodning
|
||||
- Qwen3.6 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning
|
||||
- MiMo-V2-Pro — 350 input, 41.000 cachelagrede, 250 output-tokens pr. anmodning
|
||||
- MiMo-V2-Omni — 1000 input, 60.000 cachelagrede, 140 output-tokens pr. anmodning
|
||||
- MiMo-V2.5-Pro — 350 input, 41.000 cachelagrede, 250 output-tokens pr. anmodning
|
||||
- MiMo-V2.5 — 1000 input, 60.000 cachelagrede, 140 output-tokens pr. anmodning
|
||||
|
||||
Du kan spore dit nuværende forbrug i **<a href={console}>konsollen</a>**.
|
||||
|
||||
:::tip
|
||||
Hvis du når forbrugsgrænsen, kan du fortsætte med at bruge de gratis modeller.
|
||||
:::
|
||||
|
||||
Forbrugsgrænser kan ændre sig, efterhånden som vi lærer af tidlig brug og feedback.
|
||||
|
||||
---
|
||||
|
||||
### Forbrug ud over grænserne
|
||||
|
||||
Hvis du også har kredit på din Zen-saldo, kan du aktivere indstillingen **Use balance**
|
||||
i konsollen. Når den er aktiveret, vil Go falde tilbage på din Zen-saldo,
|
||||
når du har nået dine forbrugsgrænser, i stedet for at blokere anmodninger.
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
Du kan også få adgang til Go-modeller gennem følgende API-endpoints.
|
||||
|
||||
| Model | Model ID | Endpoint | AI SDK Package |
|
||||
| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- |
|
||||
| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM-5 | glm-5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.6 | kimi-k2.6 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Pro | mimo-v2-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2-Omni | mimo-v2-omni | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5-Pro | mimo-v2.5-pro | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiMo-V2.5 | mimo-v2.5 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.7 | minimax-m2.7 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/alibaba` |
|
||||
|
||||
Dit [model id](/docs/config/#models) i din OpenCode config
|
||||
bruger formatet `opencode-go/<model-id>`. For eksempel for Kimi K2.6, vil du
|
||||
bruge `opencode-go/kimi-k2.6` i din config.
|
||||
|
||||
---
|
||||
|
||||
### Modeller
|
||||
|
||||
Du kan hente den fulde liste over tilgængelige modeller og deres metadata fra:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/go/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Privatliv
|
||||
|
||||
Planen er primært designet til internationale brugere med modeller hostet i US, EU og Singapore for stabil global adgang. Vores udbydere følger en zero-retention-policy og bruger ikke dine data til modeltræning.
|
||||
|
||||
---
|
||||
|
||||
## Mål
|
||||
|
||||
Vi skabte OpenCode Go for at:
|
||||
|
||||
1. Gøre AI-kodning **tilgængelig** for flere mennesker med et lavprisabonnement.
|
||||
2. Give **pålidelig** adgang til de bedste åbne kodningsmodeller.
|
||||
3. Kuratere modeller, der er **testet og benchmarkede** til brug med kodningsagenter.
|
||||
4. Undgå **lock-in** ved også at lade dig bruge enhver anden udbyder med OpenCode.
|
||||
48
qimingcode/packages/web/src/content/docs/da/ide.mdx
Normal file
48
qimingcode/packages/web/src/content/docs/da/ide.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: IDE
|
||||
description: OpenCode-udvidelsen til VS Code, Cursor og andre IDE'er
|
||||
---
|
||||
|
||||
OpenCode integreres med VS Code, Cursor eller enhver IDE, der understøtter en terminal. Bare kør `opencode` i terminalen for at komme i gang.
|
||||
|
||||
---
|
||||
|
||||
## Brug
|
||||
|
||||
- **Hurtig start**: Brug `Cmd+Esc` (Mac) eller `Ctrl+Esc` (Windows/Linux) til at åbne OpenCode i en delt terminalvisning, eller fokuser en eksisterende terminalsession, hvis en allerede kører.
|
||||
- **Ny session**: Brug `Cmd+Shift+Esc` (Mac) eller `Ctrl+Shift+Esc` (Windows/Linux) til at starte en ny OpenCode terminalsession, mulighed en allerede er åben. Du kan også klikke på knappen OpenCode i brugergrænsefladen.
|
||||
- **Kontekstbevidsthed**: Del automatisk dit nuværende valg eller din fane med OpenCode.
|
||||
- **Filreferencegenveje**: Brug `Cmd+Option+K` (Mac) eller `Alt+Ctrl+K` (Linux/Windows) til at indsætte filreferencer. For eksempel `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
Sådan installeres OpenCode på VS Code og populære gafler som Cursor, Windsurf, VSCodium:
|
||||
|
||||
1. Åbn VS Code
|
||||
2. Åbn den integrerede terminal
|
||||
3. Kør `opencode` - udvidelsen installeres automatisk
|
||||
|
||||
Hvis du på den anden side vil bruge din egen IDE, når du kører `/editor` eller `/export` fra TUI, skal du indstille `export EDITOR="code --wait"`. [Learn more](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### Manuel installation
|
||||
|
||||
Søg efter **OpenCode** i Extension Marketplace, og klik på **Installer**.
|
||||
|
||||
---
|
||||
|
||||
### Fejlfinding
|
||||
|
||||
Hvis udvidelsen ikke kan installeres automatisk:
|
||||
|
||||
- Sørg for, at du kører `opencode` i den integrerede terminal.
|
||||
- Bekræft, at CLI for din IDE er installeret:
|
||||
- For VS Code: `code` kommando
|
||||
- For Cursor: `cursor` kommando
|
||||
- For Windsurf: `windsurf` kommando
|
||||
- For VSCodium: `codium` kommando
|
||||
- Hvis ikke, så kør `Cmd+Shift+P` (Mac) eller `Ctrl+Shift+P` (Windows/Linux) og søg efter "Shell Command: Install 'code' command in PATH" (eller tilsvarende for din IDE)
|
||||
- Sørg for, at VS Code har tilladelse til at installere udvidelser
|
||||
360
qimingcode/packages/web/src/content/docs/da/index.mdx
Normal file
360
qimingcode/packages/web/src/content/docs/da/index.mdx
Normal file
@@ -0,0 +1,360 @@
|
||||
---
|
||||
title: Introduktion
|
||||
description: Kom godt i gang med OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) er en open source AI-kodningsagent. Den er tilgængelig som en terminalbaseret grænseflade, desktop-app eller IDE-udvidelse.
|
||||
|
||||

|
||||
|
||||
Lad os komme i gang.
|
||||
|
||||
---
|
||||
|
||||
#### Forudsætninger
|
||||
|
||||
For at bruge OpenCode i din terminal skal du bruge:
|
||||
|
||||
1. En moderne terminalemulator som:
|
||||
- [WezTerm](https://wezterm.org), på tværs af platforme
|
||||
- [Alacritty](https://alacritty.org), på tværs af platforme
|
||||
- [Ghostty](https://ghostty.org), Linux og macOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux og macOS
|
||||
|
||||
2. API-nøgler til de LLM udbydere, du vil bruge.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
Den nemmeste måde at installere OpenCode på er gennem installationsscriptet.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
Du kan også installere det med følgende kommandoer:
|
||||
|
||||
- **Bruger Node.js**
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem label="npm">
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Bun">
|
||||
```bash
|
||||
bun install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="pnpm">
|
||||
```bash
|
||||
pnpm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Yarn">
|
||||
```bash
|
||||
yarn global add opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
- **Brug af Homebrew på macOS og Linux**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> Vi anbefaler at bruge OpenCode-tap for at få de mest opdaterede udgivelser. Den officielle `brew install opencode`-formel vedligeholdes af Homebrew-teamet og opdateret sjældnere.
|
||||
|
||||
- **Brug af Paru på Arch Linux**
|
||||
|
||||
```bash
|
||||
sudo pacman -S opencode # Arch Linux (Stable)
|
||||
paru -S opencode-bin # Arch Linux (Latest from AUR)
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[Anbefalet: Brug WSL]
|
||||
For at få den bedste oplevelse på Windows anbefaler vi at bruge [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Det giver bedre ydeevne og fuld kompatibilitet med OpenCodes funktioner.
|
||||
:::
|
||||
|
||||
- **Brug af Chocolatey**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **Brug af Scoop**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **Bruger NPM**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **Brug af Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **Brug af Docker**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
Support til installation af OpenCode på Windows ved hjælp af Bun er i gang.
|
||||
|
||||
Du kan også få fat i binæren fra [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Med OpenCode kan du bruge enhver LLM udbyder ved at konfigurere deres API-nøgler.
|
||||
|
||||
Hvis du er ny til at bruge LLM-udbydere, anbefaler vi at bruge [OpenCode Zen](/docs/zen).
|
||||
Det er en udvalgt liste over modeller, der er blevet testet og verificeret af OpenCode
|
||||
holde.
|
||||
|
||||
1. Kør kommandoen `/connect` i TUI, vælg opencode, og gå til [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. Log ind, tilføj dine faktureringsoplysninger, og kopier din API-nøgle.
|
||||
|
||||
3. Indsæt din API-nøgle.
|
||||
|
||||
```txt
|
||||
┌ API key
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
Alternativt kan du vælge en af de andre udbydere. [Læs mere](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## Initialisering
|
||||
|
||||
Nu hvor du har konfigureret en udbyder, kan du navigere til et projekt, der
|
||||
du vil arbejde på.
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
```
|
||||
|
||||
Og kør OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
Derefter initialiseres OpenCode for projektet ved at køre følgende kommando.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
Dette får OpenCode til at analysere dit projekt og oprette en `AGENTS.md` fil i
|
||||
projektets rod.
|
||||
|
||||
:::tip
|
||||
Du bør overgive dit projekter `AGENTS.md` fil til Git.
|
||||
:::
|
||||
|
||||
Dette hjælper OpenCode med at forstå projektstrukturen og kodningsmønstrene
|
||||
brugt.
|
||||
|
||||
---
|
||||
|
||||
## Brug
|
||||
|
||||
Du er nu klar til at bruge OpenCode til at arbejde på dit projekt. Spørg det gerne
|
||||
noget!
|
||||
|
||||
Hvis du er ny til at bruge en AI-kodningsagent, er her nogle eksempler, der evt
|
||||
hjælp.
|
||||
|
||||
---
|
||||
|
||||
### Stil spørgsmål
|
||||
|
||||
Du kan bede OpenCode om at forklare kodebasen for dig.
|
||||
|
||||
:::tip
|
||||
Brug `@`-tasten til at søge efter filer i projektet.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
How is authentication handled in @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
Dette er nyttigt, hvis der er en del af kodebasen, som du ikke har arbejdet på.
|
||||
|
||||
---
|
||||
|
||||
### Tilføj funktioner
|
||||
|
||||
Du kan bede OpenCode om at tilføje nye funktioner til dit projekt. Selvom vi først anbefaler, at du beder den om at lave en plan.
|
||||
|
||||
1. **Opret en plan**
|
||||
|
||||
OpenCode har en _Plan mode_, der deaktiverer dens evne til at foretage ændringer og
|
||||
foreslå i stedet _hvordan_ det vil implementere funktionen.
|
||||
|
||||
Skift til det ved hjælp af **Tab**-tasten. Du vil se en indikator for dette i nederste højre hjørne.
|
||||
|
||||
```bash frame="none" title="Skift til Plan-tilstand"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
Lad os nu beskrive, hvad vi vil have den til at gøre.
|
||||
|
||||
```txt frame="none"
|
||||
When a user deletes a note, we'd like to flag it as deleted in the database.
|
||||
Then create a screen that shows all the recently deleted notes.
|
||||
From this screen, the user can undelete a note or permanently delete it.
|
||||
```
|
||||
|
||||
Du vil give OpenCode nok detaljer til at forstå, hvad du ønsker. Det hjælper
|
||||
at tale med det, som om du taler med en juniorudvikler på dit team.
|
||||
|
||||
:::tip
|
||||
Giv OpenCode masser af kontekst og eksempler for at hjælpe den med at forstå, hvad du
|
||||
ønsker.
|
||||
:::
|
||||
|
||||
2. **Gentag om planen**
|
||||
|
||||
Når det giver dig en plan, kan du give den feedback eller tilføje flere detaljer.
|
||||
|
||||
```txt frame="none"
|
||||
We'd like to design this new screen using a design I've used before.
|
||||
[Image #1] Take a look at this image and use it as a reference.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Træk og slip billeder i terminalen for at tilføje dem til prompten.
|
||||
:::
|
||||
|
||||
OpenCode kan scanne alle billeder, du giver dem og tilføje dem til prompten. Det kan du
|
||||
gør dette ved at trække og slippe et billede ind i terminalen.
|
||||
|
||||
3. **Byg funktionen**
|
||||
|
||||
Når du føler dig godt tilpas med planen, skal du skifte tilbage til _Byggetilstand_ ved
|
||||
trykke på **Tab**-tasten igen.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
Og beder den om at foretage ændringerne.
|
||||
|
||||
```bash frame="none"
|
||||
Sounds good! Go ahead and make the changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Foretag ændringer
|
||||
|
||||
For mere ligetil ændringer kan du bede OpenCode om at bygge den direkte
|
||||
uden at skulle gennemgå planen først.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
We need to add authentication to the /settings route. Take a look at how this is
|
||||
handled in the /notes route in @packages/functions/src/notes.ts and implement
|
||||
the same logic in @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
Du vil sikre dig, at du giver en god mængde detaljer, så OpenCode gør det rigtige
|
||||
ændringer.
|
||||
|
||||
---
|
||||
|
||||
### Fortryd ændringer
|
||||
|
||||
Lad os sige, at du beder OpenCode om at foretage nogle ændringer.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Men du indser, at det ikke er, hvad du ønskede. Du **kan fortryde** ændringerne
|
||||
ved hjælp af kommandoen `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
OpenCode vil nu vende tilbage til ændringerne, du har foretaget, og vise din oprindelige besked
|
||||
igen.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
Herfra kan du justere prompten og bede OpenCode om at prøve igen.
|
||||
|
||||
:::tip
|
||||
Du kan køre `/undo` flere gange for at fortryde flere ændringer.
|
||||
:::
|
||||
|
||||
Eller du **kan gentage** ændringerne ved hjælp af kommandoen `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deling
|
||||
|
||||
De samtaler, du har med OpenCode, kan [deles med din
|
||||
team](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
Dette vil oprette et link til den aktuelle samtale og kopiere det til denne udklipsholder.
|
||||
|
||||
:::note
|
||||
Samtaler dele ikke som standard.
|
||||
:::
|
||||
|
||||
Her er en [eksempelsamtale](https://opencode.ai/s/4XP1fce5) med OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## Tilpasning
|
||||
|
||||
Og det er det! Du er nu en professionel i at bruge OpenCode.
|
||||
|
||||
For at gøre det til dit eget, anbefaler vi [at vælge et tema](/docs/themes), [tilpasse genvejstaster](/docs/keybinds), [konfigurere kodeformater](/docs/formatters), [oprette brugerdefinerede kommandoer](/docs/commands) eller at lege med [OpenCode-konfiguration](/docs/config).
|
||||
194
qimingcode/packages/web/src/content/docs/da/keybinds.mdx
Normal file
194
qimingcode/packages/web/src/content/docs/da/keybinds.mdx
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
title: Tastebindinger
|
||||
description: Tilpas dine nøglebindinger.
|
||||
---
|
||||
|
||||
OpenCode har en liste over nøglebindinger, som du kan tilpasse gennem `tui.json`.
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x",
|
||||
"app_exit": "ctrl+c,ctrl+d,<leader>q",
|
||||
"editor_open": "<leader>e",
|
||||
"theme_list": "<leader>t",
|
||||
"sidebar_toggle": "<leader>b",
|
||||
"scrollbar_toggle": "none",
|
||||
"username_toggle": "none",
|
||||
"status_view": "<leader>s",
|
||||
"tool_details": "none",
|
||||
"session_export": "<leader>x",
|
||||
"session_new": "<leader>n",
|
||||
"session_list": "<leader>l",
|
||||
"session_timeline": "<leader>g",
|
||||
"session_fork": "none",
|
||||
"session_rename": "none",
|
||||
"session_share": "none",
|
||||
"session_unshare": "none",
|
||||
"session_interrupt": "escape",
|
||||
"session_compact": "<leader>c",
|
||||
"session_child_first": "<leader>down",
|
||||
"session_child_cycle": "<leader>right",
|
||||
"session_child_cycle_reverse": "<leader>left",
|
||||
"session_parent": "<leader>up",
|
||||
"messages_page_up": "pageup,ctrl+alt+b",
|
||||
"messages_page_down": "pagedown,ctrl+alt+f",
|
||||
"messages_line_up": "ctrl+alt+y",
|
||||
"messages_line_down": "ctrl+alt+e",
|
||||
"messages_half_page_up": "ctrl+alt+u",
|
||||
"messages_half_page_down": "ctrl+alt+d",
|
||||
"messages_first": "ctrl+g,home",
|
||||
"messages_last": "ctrl+alt+g,end",
|
||||
"messages_next": "none",
|
||||
"messages_previous": "none",
|
||||
"messages_copy": "<leader>y",
|
||||
"messages_undo": "<leader>u",
|
||||
"messages_redo": "<leader>r",
|
||||
"messages_last_user": "none",
|
||||
"messages_toggle_conceal": "<leader>h",
|
||||
"model_list": "<leader>m",
|
||||
"model_cycle_recent": "f2",
|
||||
"model_cycle_recent_reverse": "shift+f2",
|
||||
"model_cycle_favorite": "none",
|
||||
"model_cycle_favorite_reverse": "none",
|
||||
"variant_cycle": "ctrl+t",
|
||||
"variant_list": "none",
|
||||
"command_list": "ctrl+p",
|
||||
"agent_list": "<leader>a",
|
||||
"agent_cycle": "tab",
|
||||
"agent_cycle_reverse": "shift+tab",
|
||||
"input_clear": "ctrl+c",
|
||||
"input_paste": "ctrl+v",
|
||||
"input_submit": "return",
|
||||
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
|
||||
"input_move_left": "left,ctrl+b",
|
||||
"input_move_right": "right,ctrl+f",
|
||||
"input_move_up": "up",
|
||||
"input_move_down": "down",
|
||||
"input_select_left": "shift+left",
|
||||
"input_select_right": "shift+right",
|
||||
"input_select_up": "shift+up",
|
||||
"input_select_down": "shift+down",
|
||||
"input_line_home": "ctrl+a",
|
||||
"input_line_end": "ctrl+e",
|
||||
"input_select_line_home": "ctrl+shift+a",
|
||||
"input_select_line_end": "ctrl+shift+e",
|
||||
"input_visual_line_home": "alt+a",
|
||||
"input_visual_line_end": "alt+e",
|
||||
"input_select_visual_line_home": "alt+shift+a",
|
||||
"input_select_visual_line_end": "alt+shift+e",
|
||||
"input_buffer_home": "home",
|
||||
"input_buffer_end": "end",
|
||||
"input_select_buffer_home": "shift+home",
|
||||
"input_select_buffer_end": "shift+end",
|
||||
"input_delete_line": "ctrl+shift+d",
|
||||
"input_delete_to_line_end": "ctrl+k",
|
||||
"input_delete_to_line_start": "ctrl+u",
|
||||
"input_backspace": "backspace,shift+backspace",
|
||||
"input_delete": "ctrl+d,delete,shift+delete",
|
||||
"input_undo": "ctrl+-,super+z",
|
||||
"input_redo": "ctrl+.,super+shift+z",
|
||||
"input_word_forward": "alt+f,alt+right,ctrl+right",
|
||||
"input_word_backward": "alt+b,alt+left,ctrl+left",
|
||||
"input_select_word_forward": "alt+shift+f,alt+shift+right",
|
||||
"input_select_word_backward": "alt+shift+b,alt+shift+left",
|
||||
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
|
||||
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
|
||||
"history_previous": "up",
|
||||
"history_next": "down",
|
||||
"terminal_suspend": "ctrl+z",
|
||||
"terminal_title_toggle": "none",
|
||||
"tips_toggle": "<leader>h",
|
||||
"display_thinking": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ledertast
|
||||
|
||||
OpenCode bruger en `leader` nøgle til de fleste smagsbindinger. Dette undgår konflikter i din terminal.
|
||||
|
||||
Som standard er `ctrl+x` ledertasten, og de fleste handlinger kræver, at du først trykker på ledertasten og derefter genvejen. For eksempel, for at starte en ny session, skal du først trykke på `ctrl+x` og derefter trykke på `n`.
|
||||
|
||||
Du behøver ikke bruge en ledernøgle til dine nøglebindinger, men vi anbefaler at du gør det.
|
||||
|
||||
---
|
||||
|
||||
## Deaktiver tastebinding
|
||||
|
||||
Du kan deaktivere en nøglebinding ved at tilføje nøglen til `tui.json` med værdien "none".
|
||||
|
||||
```json title="tui.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/tui.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Genveje til skrivebordsprompt
|
||||
|
||||
OpenCode desktop app prompt input understøtter almindelige Readline/Emacs-style genveje til redigering af tekst. Disse er indbyggede og i øjeblikket ikke konfigurerede via `opencode.json`.
|
||||
|
||||
| Genvej | Håndtering |
|
||||
| -------- | ------------------------------------------- |
|
||||
| `ctrl+a` | Flyt til starten af den aktuelle linje |
|
||||
| `ctrl+e` | Flyt til slutningen af den aktuelle linje |
|
||||
| `ctrl+b` | Flyt markøren et tegn tilbage |
|
||||
| `ctrl+f` | Flyt markøren et tegn frem |
|
||||
| `alt+b` | Flyt markøren et ord tilbage |
|
||||
| `alt+f` | Flyt markøren et ord frem |
|
||||
| `ctrl+d` | Slet tegn under markøren |
|
||||
| `ctrl+k` | Dræb til slutningen af linjen |
|
||||
| `ctrl+u` | Dræb til starten af linjen |
|
||||
| `ctrl+w` | Dræb forrige ord |
|
||||
| `alt+d` | Dræb næste ord |
|
||||
| `ctrl+t` | Transponer tegn |
|
||||
| `ctrl+g` | Annuller popovers / afbryd kørsel af svar |
|
||||
|
||||
---
|
||||
|
||||
## Shift+Enter
|
||||
|
||||
Nogle terminaler sender ikke modifikationsnøgler med Enter som standard. Du skal muligvis konfigurere din terminal til at sende `Shift+Enter` som en escape-sekvens.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
Åbn din `settings.json` på:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
Føj dette til `actions`-arrayet på rodniveau:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Føj dette til `keybindings`-arrayet på rodniveau:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Gem fil og genstart Windows Terminal eller åbn en ny fane.
|
||||
189
qimingcode/packages/web/src/content/docs/da/lsp.mdx
Normal file
189
qimingcode/packages/web/src/content/docs/da/lsp.mdx
Normal file
@@ -0,0 +1,189 @@
|
||||
---
|
||||
title: LSP-servere
|
||||
description: OpenCode integreres med dine LSP-servere.
|
||||
---
|
||||
|
||||
OpenCode integreres med Language Server Protocol (LSP) for at hjælpe LLM med at interagere med din kodebase. Den bruger diagnostik til at give feedback til LLM.
|
||||
|
||||
---
|
||||
|
||||
## Indbyggede
|
||||
|
||||
OpenCode leveres med flere indbyggede LSP-servere til populære sprog:
|
||||
|
||||
| LSP Server | Udvidelser | Krav |
|
||||
| ------------------ | --------------------------------------------------------- | --------------------------------------------------------------- |
|
||||
| astro | .astro | Autoinstallationer til Astro-projekter |
|
||||
| bash | .sh,.bash,.zsh,.ksh | Autoinstallerer bash-language-server |
|
||||
| clangd | .c,.cpp,.cc,.cxx,.c++,.h,.hpp,.hh,.hxx,.h++ | Autoinstallationer for C/C++ projekter |
|
||||
| csharp | .cs | `.NET SDK` installere |
|
||||
| clojure-lsp | .clj,.cljs,.cljc,.edn | `clojure-lsp` kommando tilgængelig |
|
||||
| dart | .dart | `dart` kommando tilgængelig |
|
||||
| deno | .ts,.tsx,.js,.jsx,.mjs | `deno` kommando tilgængelig (auto-detects deno.json/deno.jsonc) |
|
||||
| elixir-ls | .ex,.exs | `elixir` kommando tilgængelig |
|
||||
| eslint | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue | `eslint` afhængighed i projekt |
|
||||
| fsharp | .fs,.fsi,.fsx,.fsscript | `.NET SDK` installere |
|
||||
| gleam | .gleam | `gleam` kommando tilgængelig |
|
||||
| gopls | .go | `go` kommando tilgængelig |
|
||||
| hls | .hs,.lhs | `haskell-language-server-wrapper` kommando tilgængelig |
|
||||
| jdtls | .java | `Java SDK (version 21+)` installere |
|
||||
| julials | .jl | `julia` og `LanguageServer.jl` installeret |
|
||||
| kotlin-ls | .kt,.kts | Autoinstallationer til Kotlin-projekter |
|
||||
| lua-ls | .lua | Autoinstallationer til Lua-projekter |
|
||||
| nixd | .nix | `nixd` kommando tilgængelig |
|
||||
| ocaml-lsp | .ml,.mli | `ocamllsp` kommando tilgængelig |
|
||||
| oxlint | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue,.astro,.svelte | `oxlint` afhængighed i projekt |
|
||||
| php intelephense | .php | Automatiske installationer til PHP-projekter |
|
||||
| prisma | .prisma | `prisma` kommando tilgængelig |
|
||||
| pyright | .py,.pyi | `pyright` afhængig installeret |
|
||||
| ruby-lsp (rubocop) | .rb,.rake,.gemspec,.ru | `ruby` og `gem` kommandoer tilgængelige |
|
||||
| rust | .rs | `rust-analyzer` kommando tilgængelig |
|
||||
| sourcekit-lsp | .swift,.objc,.objcpp | `swift` installere (`xcode` på macOS) |
|
||||
| svelte | .svelte | Autoinstallationer til Svelte-projekter |
|
||||
| terraform | .tf,.tfvars | Automatiske installationer fra GitHub-udgivelser |
|
||||
| tinymist | .typ,.typc | Automatiske installationer fra GitHub-udgivelser |
|
||||
| typescript | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts | `typescript` afhængighed i projekt |
|
||||
| vue | .vue | Autoinstallationer til Vue-projekter |
|
||||
| yaml-ls | .yaml,.yml | Autoinstallerer Red Hat yaml-language-server |
|
||||
| zls | .zig,.zon | `zig` kommando tilgængelig |
|
||||
|
||||
LSP-servere aktiveres automatisk, når en af ovenstående filtypenavne opdages, og kravene er opfyldt.
|
||||
|
||||
:::note
|
||||
Du kan deaktivere automatisk LSP-serverdownloads ved at indstille miljøvariablen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Sådan fungerer det
|
||||
|
||||
Når opencode åbner en fil, vil den:
|
||||
|
||||
1. Kontrollerer filtypenavnet mod alle aktiverede LSP-servere.
|
||||
2. Starter den relevante LSP-server, hvis den ikke allerede kører.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan tilpasse LSP-servere gennem sektionen `lsp` i din opencode-konfiguration.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
Hver LSP- server understøtter følgende:
|
||||
|
||||
| Egenskab | Type | Beskrivelse |
|
||||
| ---------------- | -------- | --------------------------------------------------------- |
|
||||
| `disabled` | boolean | Indstil dette til `true` for at deaktivere LSP-serveren |
|
||||
| `command` | string[] | Kommandoen til at starte LSP-serveren |
|
||||
| `extensions` | string[] | Filtypenavne, som denne LSP-server skal håndtere |
|
||||
| `env` | object | Miljøvariabler, der skal indstilles, når serveren starter |
|
||||
| `initialization` | object | Initialiseringsmuligheder for at sende til LSP-serveren |
|
||||
|
||||
Lad os se på nogle eksempler.
|
||||
|
||||
---
|
||||
|
||||
### Miljøvariabler
|
||||
|
||||
Brug egenskaben `env` til at indstille miljøvariabler, når du starter LSP-serveren:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Initialiseringsmuligheder
|
||||
|
||||
Brug egenskaben `initialization` til at videregive initialiseringsindstillinger til LSP-serveren. Disse er serverspecifikke indstillinger sendt under LSP `initialize` anmodningen:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
Initialiseringsmuligheder forskellige afhængige af LSP-serveren. Se din LSP-servers dokumentation for tilgængelige muligheder.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Deaktivering af LSP-servere
|
||||
|
||||
For at deaktivere **alle** LSP-servere globalt, skal du indstille `lsp` til `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
For at deaktivere en **specifik** LSP-server skal du indstille `disabled` til `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Brugerdefinerede LSP-servere
|
||||
|
||||
Du kan tilføje brugerdefinerede LSP-servere ved at angive kommandoen og filtypenavne:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Yderligere oplysninger
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
PHP Intelephense tilbyder premium funktioner gennem en licensnøgle. Du kan angive en licensnøgle ved at placere (kun) nøglen i en tekstfil på:
|
||||
|
||||
- På macOS/Linux: `$HOME/intelephense/license.txt`
|
||||
- På Windows: `%USERPROFILE%/intelephense/license.txt`
|
||||
|
||||
Filen bør kun indeholde licensnøglen uden yderligere indhold.
|
||||
511
qimingcode/packages/web/src/content/docs/da/mcp-servers.mdx
Normal file
511
qimingcode/packages/web/src/content/docs/da/mcp-servers.mdx
Normal file
@@ -0,0 +1,511 @@
|
||||
---
|
||||
title: MCP-servere
|
||||
description: Tilføj lokale og eksterne MCP værktøjer.
|
||||
---
|
||||
|
||||
Du kan tilføje eksterne værktøjer til OpenCode ved hjælp af _Model Context Protocol_ eller MCP. OpenCode understøtter både lokale og eksterne servere.
|
||||
|
||||
Når de er tilføjet, er MCP automatisk tilgængelig for LLM sammen med indbyggede værktøjer.
|
||||
|
||||
---
|
||||
|
||||
#### Forbehold
|
||||
|
||||
Når du bruger en MCP-server, føjes den til konteksten. Dette kan hurtigt stige, hvis du har mange værktøjer. Så vi anbefaler at være forsigtig med hvilke MCP-servere du bruger.
|
||||
|
||||
:::tip
|
||||
MCP-servere tilføjer til din kontekst, så du vil være forsigtig med, hvilke du aktiverer.
|
||||
:::
|
||||
|
||||
Visse MCP-servere, som GitHub MCP-servere, har en tendens til at tilføje mange tokens og kan nemt overskride kontekstgrænsen.
|
||||
|
||||
---
|
||||
|
||||
## Aktivering
|
||||
|
||||
Du kan definere MCP-servere i din [OpenCode Config](https://opencode.ai/docs/config/) under `mcp`. Tilføj hver MCP med et unikt navn. Du kan henvise til denne MCP ved navn, når du spørger LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"name-of-mcp-server": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"name-of-other-mcp-server": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også deaktivere en server ved at indstille `enabled` til `false`. Dette er nyttigt, hvis du midlertidigt vil deaktivere en server uden at fjerne den fra din konfiguration.
|
||||
|
||||
---
|
||||
|
||||
### Tilsidesættelse af eksterne standarder
|
||||
|
||||
Organisationer kan levere standard MCP-servere via deres `.well-known/opencode`-slutpunkt. Disse servere kan være deaktiveret som standard, hvilket giver brugerne mulighed for at tilmelde sig dem, de har brug for.
|
||||
|
||||
For at aktivere en specifik server fra din organisationers fjernkonfiguration skal du tilføje den til din lokale konfiguration med `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dine lokale konfigurationsværdier tilsidesætter fjernstandarderne. Se [config precedence](/docs/config#precedence-order) for flere detaljer.
|
||||
|
||||
---
|
||||
|
||||
## Lokal
|
||||
|
||||
Tilføj lokale MCP-servere ved hjælp af `type` til `"local"` i MCP-objektet.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-local-mcp-server": {
|
||||
"type": "local",
|
||||
// Or ["bun", "x", "my-mcp-command"]
|
||||
"command": ["npx", "-y", "my-mcp-command"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MY_ENV_VAR": "my_env_var_value",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Kommandoen er, hvordan den lokale MCP-server starter. Du kan også sende en liste over miljøvariabler ind.
|
||||
|
||||
For eksempel kan du tilføje test-MCP-serveren [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_everything": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Og for at bruge det kan jeg tilføje `use the mcp_everything tool` til mine prompter.
|
||||
|
||||
```txt "mcp_everything"
|
||||
use the mcp_everything tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Indstillinger
|
||||
|
||||
Her er alle muligheder for at konfigurere en lokal MCP-server.
|
||||
|
||||
| Mulighed | Skriv | Påkrævet | Beskrivelse |
|
||||
| ------------- | ------- | -------- | ------------------------------------------------------------------------------------ |
|
||||
| `type` | String | Y | Type MCP serverforbindelse, skal være `"local"`. |
|
||||
| `command` | Array | Y | Kommando og argumenter til at køre MCP-serveren. |
|
||||
| `environment` | Object | | Miljøvariabler, der skal indstilles, når serveren kører. |
|
||||
| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved opstart. |
|
||||
| `timeout` | Nummer | | Timeout i ms for at hente værktøjer fra MCP-serveren. Standard er 5000 (5 sekunder). |
|
||||
|
||||
---
|
||||
|
||||
## Ekstern
|
||||
|
||||
Tilføj ekstern MCP-server ved at indstille `type` til `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-remote-mcp": {
|
||||
"type": "remote",
|
||||
"url": "https://my-mcp-server.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MY_API_KEY"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`url` er URL for den eksterne MCP server, og med indstillingen `headers` kan du sende en liste over overskrifter ind.
|
||||
|
||||
---
|
||||
|
||||
#### Indstillinger
|
||||
|
||||
| Mulighed | Skriv | Påkrævet | Beskrivelse |
|
||||
| --------- | ------- | -------- | ------------------------------------------------------------------------------------ |
|
||||
| `type` | String | Y | Type MCP serverforbindelse, skal være `"remote"`. |
|
||||
| `url` | String | Y | URL af den eksterne MCP-server. |
|
||||
| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved opstart. |
|
||||
| `headers` | Object | | Overskrifter til at sende med anmodningen. |
|
||||
| `oauth` | Object | | OAuth-godkendelseskonfiguration. Se afsnittet [OAuth](#oauth) nedenfor. |
|
||||
| `timeout` | Nummer | | Timeout i ms for at hente værktøjer fra MCP-serveren. Standard er 5000 (5 sekunder). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
|
||||
OpenCode håndterer automatisk OAuth-godkendelse for eksterne MCP-servere. Når en server kræver godkendelse, vil OpenCode:
|
||||
|
||||
1. Registrer 401-svaret, og start OAuth-flowet
|
||||
2. Brug **Dynamic Client Registration (RFC 7591)**, hvis det understøtter af serveren
|
||||
3. Opbevar tokens sikkert til fremtidige anmodninger
|
||||
|
||||
---
|
||||
|
||||
### Automatisk
|
||||
|
||||
For de fleste OAuth-aktiverede MCP-servere kræver ingen speciel konfiguration. Bare konfigureret fjernserver:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis serveren kræver godkendelse, vil OpenCode bede dig om at godkende, når du prøver at bruge den første gang. Hvis ikke, kan du [manually trigger the flow](#authenticating) med `opencode mcp auth <server-name>`.
|
||||
|
||||
---
|
||||
|
||||
### Forhåndsregistreret
|
||||
|
||||
Hvis du har klientlegitimationsoplysninger fra MCP-serverudbyderen, kan du konfigurere dem:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MY_MCP_CLIENT_ID}",
|
||||
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Godkendelse
|
||||
|
||||
Du kan manuelt udløse godkendelse eller administrere legitimationsoplysninger.
|
||||
|
||||
Godkendt med en specifik MCP-server:
|
||||
|
||||
```bash
|
||||
opencode mcp auth my-oauth-server
|
||||
```
|
||||
|
||||
Liste over alle MCP-servere og deres godkendelsesstatus:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
Fjern gemte legitimationsoplysninger:
|
||||
|
||||
```bash
|
||||
opencode mcp logout my-oauth-server
|
||||
```
|
||||
|
||||
Kommandoen `mcp auth` åbner din browser for godkendelse. Når du har godkendt, vil OpenCode opbevare tokens sikkert i `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
---
|
||||
|
||||
#### Deaktivering af OAuth
|
||||
|
||||
Hvis du vil deaktivere automatisk OAuth for en server (f.eks. for servere, der bruger API-nøgler i stedet), skal du indstille `oauth` til `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-api-key-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MY_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### OAuth-indstillinger
|
||||
|
||||
| Mulighed | Skriv | Beskrivelse |
|
||||
| -------------- | --------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `oauth` | Object \| false | OAuth-konfigurationsobjekt eller `false` for at deaktivere OAuth-auto-detektion. |
|
||||
| `clientId` | String | OAuth-klient-id. Hvis det ikke er angivet, vil dynamisk klientregistrering blive forsøgt. |
|
||||
| `clientSecret` | String | OAuth-klienthemmelighed, hvis det kræves af autorisationsserveren. |
|
||||
| `scope` | String | OAuth-omfang at anmode om under godkendelse. |
|
||||
|
||||
#### Fejlfinding
|
||||
|
||||
Hvis en ekstern MCP-server ikke kan godkendes, kan du diagnosticere problemer med:
|
||||
|
||||
```bash
|
||||
# View auth status for all OAuth-capable servers
|
||||
opencode mcp auth list
|
||||
|
||||
# Debug connection and OAuth flow for a specific server
|
||||
opencode mcp debug my-oauth-server
|
||||
```
|
||||
|
||||
Kommandoen `mcp debug` viser den aktuelle godkendelsesstatus, tester HTTP-forbindelse og forsøger OAuth-opdagelsesflowet.
|
||||
|
||||
---
|
||||
|
||||
## Administration
|
||||
|
||||
Dine MCPs er tilgængelige som værktøjer i **TK\_** sammen med indbyggede værktøjer. Så du kan administrere dem gennem OpenCode-konfigurationen som ethvert andet værktøj.
|
||||
|
||||
---
|
||||
|
||||
### Global
|
||||
|
||||
Det betyder, at du kan aktivere eller deaktivere dem globalt.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vi kan også bruge et globmønster til at deaktivere alle matchende MCPs.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Her bruger vi globmønsteret `my-mcp*` til at deaktivere alle MCPs.
|
||||
|
||||
---
|
||||
|
||||
### Per agent
|
||||
|
||||
Hvis du har et stort antal MCP-servere, vil du måske kun aktivere dem pr. agent og deaktivere dem globalt. Sådan gør du:
|
||||
|
||||
1. Deaktiver det som et værktøj globalt.
|
||||
2. Aktiver MCP-serveren som et værktøj i din [agent config](/docs/agents#tools).
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"my-agent": {
|
||||
"tools": {
|
||||
"my-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Glob-mønstre
|
||||
|
||||
Glob-mønsteret bruger simple regex-globing-mønstre:
|
||||
|
||||
- `*` matcher nul eller flere af ethvert tegn (f.eks. `"my-mcp*"` matcher `my-mcp_search`, `my-mcp_list` osv.)
|
||||
- `?` matcher nøjagtigt ét tegn
|
||||
- Alle andre karakterer matcher bogstaveligt talt
|
||||
|
||||
:::note
|
||||
MCP serverværktøjer er registreret med servernavn som præfiks, så for at deaktivere alle værktøjer til en server skal du blot bruge:
|
||||
|
||||
```
|
||||
"mymcpservername_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Eksempler
|
||||
|
||||
Nedenfor er eksempler på nogle almindelige MCP-servere. Du kan indsende en PR, hvis du vil dokumentere andre servere.
|
||||
|
||||
---
|
||||
|
||||
### Sentry
|
||||
|
||||
Tilføj [Sentry MCP server](https://mcp.sentry.dev) for at interagere med dine Sentry-projekter og -problemer.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Efter tilføjelse af konfigurationen skal du godkende med Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
Dette åbner et browservindue for at fuldføre OAuth-flowet og forbinde OpenCode til din Sentry-konto.
|
||||
|
||||
Når du er godkendt, kan du bruge Sentry-værktøjer i dine prompter til at forespørge om problemer, projekter og fejldata.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
Tilføj [Context7 MCP server](https://github.com/upstash/context7) for at søge i dokumenter.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis du har tilmeldt dig en gratis konto, kan du bruge din API-nøgle og få højere satsgrænser.
|
||||
|
||||
```json title="opencode.json" {7-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Her antager vi, at du har sat miljøvariablen `CONTEXT7_API_KEY`.
|
||||
|
||||
Føj `use context7` til dine prompter for at bruge Context7 MCP server.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
Alternativt kan du tilføje noget som dette til din [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
Tilføj serveren [Grep by Vercel](https://grep.app) MCP for at søge gennem kodestykker på GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Da vi navngav vores MCP-server `gh_grep`, kan du tilføje `use the gh_grep tool` til dine prompter for at få agenten til at bruge den.
|
||||
|
||||
```txt "use the gh_grep tool"
|
||||
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
|
||||
```
|
||||
|
||||
Alternativt kan du tilføje noget som dette til din [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
|
||||
```
|
||||
223
qimingcode/packages/web/src/content/docs/da/models.mdx
Normal file
223
qimingcode/packages/web/src/content/docs/da/models.mdx
Normal file
@@ -0,0 +1,223 @@
|
||||
---
|
||||
title: Modeller
|
||||
description: Konfiguration af en LLM udbyder og model.
|
||||
---
|
||||
|
||||
OpenCode bruger [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) til at understøtte **75+ LLM udbydere** og det understøtter at køre lokale modeller.
|
||||
|
||||
---
|
||||
|
||||
## Udbydere
|
||||
|
||||
De fleste populære udbydere er forudindlæst som standard. Hvis du har tilføjet legitimationsoplysningerne for en udbyder gennem kommandoen `/connect`, vil de være tilgængelige, når du starter OpenCode.
|
||||
|
||||
Få mere at vide om [providers](/docs/providers).
|
||||
|
||||
---
|
||||
|
||||
## Vælg en model
|
||||
|
||||
Når du har konfigureret din udbyder, kan du vælge den ønskede model ved at indtaste:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anbefalede modeller
|
||||
|
||||
Der er mange modeller derude, og der kommer nye modeller hver uge.
|
||||
|
||||
:::tip
|
||||
Overvej at bruge en af de modeller, vi anbefaler.
|
||||
:::
|
||||
|
||||
Der er dog kun få af dem, der er gode til både at generere kode og værktøjsopkald.
|
||||
|
||||
Her er flere modeller, der fungerer godt med OpenCode, uden bestemt rækkefølge. (Dette er ikke en udtømmende liste og er heller ikke nødvendigvis opdateret):
|
||||
|
||||
- GPT 5.2
|
||||
- GPT 5.1 Codex
|
||||
- Claude Opus 4,5
|
||||
- Claude Sonnet 4,5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## Indstil en standard
|
||||
|
||||
For at indstille en af disse som standardmodellen kan du indstille `model`-nøglen i din
|
||||
OpenCode konfig.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
Her er det fulde ID `provider_id/model_id`. For eksempel, hvis du bruger [OpenCode Zen](/docs/zen), vil du bruge `opencode/gpt-5.1-codex` til GPT 5.1 Codex.
|
||||
|
||||
Hvis du har konfigureret en [custom provider](/docs/providers#custom), er `provider_id` nøglen fra `provider` delen af din konfiguration, og `model_id` er nøglen fra `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration af modeller
|
||||
|
||||
Du kan konfigurere en models muligheder globalt gennem konfigurationen.
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-12,19-24}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"options": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
"include": ["reasoning.encrypted_content"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"anthropic": {
|
||||
"models": {
|
||||
"claude-sonnet-4-5-20250929": {
|
||||
"options": {
|
||||
"thinking": {
|
||||
"type": "enabled",
|
||||
"budgetTokens": 16000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Her konfigurerer vi globale indstillinger for to indbyggede modeller: `gpt-5` når de tilgås via `openai` udbyderen og `claude-sonnet-4-20250514` når de tilgås via `anthropic` udbyderen.
|
||||
Den indbyggede udbyder og modelnavne kan findes på [Models.dev](https://models.dev).
|
||||
|
||||
Du kan også konfigurere disse indstillinger for alle agenter, du bruger. Agentkonfigurationen tilsidesætter alle globale muligheder her. [Learn more](/docs/agents/#additional).
|
||||
|
||||
Du kan også definere brugerdefinerede varianter, der udvider de indbyggede. Varianter giver dig mulighed for at konfigurere forskellige indstillinger for den samme model uden at oprette duplikerede poster:
|
||||
|
||||
```jsonc title="opencode.jsonc" {6-21}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"opencode": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"high": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
"low": {
|
||||
"reasoningEffort": "low",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Varianter
|
||||
|
||||
Mange modeller understøtter flere varianter med forskellige konfigurationer. OpenCode leveres med indbyggede standardvarianter til populære udbydere.
|
||||
|
||||
### Indbyggede varianter
|
||||
|
||||
OpenCode leveres med standardvarianter for mange udbydere:
|
||||
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - Højt tænkende budget (standard)
|
||||
- `max` - Maksimalt tænkebudget
|
||||
|
||||
**OpenAI**:
|
||||
|
||||
Varierer efter model, men nogenlunde:
|
||||
|
||||
- `none` - Ingen begrundelse
|
||||
- `minimal` - Minimal ræsonnement indsats
|
||||
- `low` - Lav ræsonnement indsats
|
||||
- `medium` - Middel ræsonnement indsats
|
||||
- `high` - Høj ræsonnement indsats
|
||||
- `xhigh` - Ekstra høj ræsonnement indsats
|
||||
|
||||
**Google**:
|
||||
|
||||
- `low` - Lavere effort/token budget
|
||||
- `high` - Højere effort/token budget
|
||||
|
||||
:::tip
|
||||
Denne liste er ikke udtømmende. Mange andre udbydere har også indbyggede standardindstillinger.
|
||||
:::
|
||||
|
||||
### Brugerdefinerede varianter
|
||||
|
||||
Du kan tilsidesætte eksisterende varianter eller tilføje dine egne:
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"thinking": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
},
|
||||
"fast": {
|
||||
"disabled": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Skift varianter
|
||||
|
||||
Brug tastebindingen `variant_cycle` til hurtigt at skifte mellem varianter. [Learn more](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
## Indlæsning af modeller
|
||||
|
||||
Når OpenCode starter op, søger den efter modeller i følgende prioriterede rækkefølge:
|
||||
|
||||
1. Kommandolinjeflaget `--model` eller `-m`. Formatet er det samme som i konfigurationsfilen: `provider_id/model_id`.
|
||||
|
||||
2. Modellisten i OpenCode-konfigurationen.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
Formatet her er `provider/model`.
|
||||
|
||||
3. Den sidst brugte model.
|
||||
|
||||
4. Den første model med en intern prioritet.
|
||||
329
qimingcode/packages/web/src/content/docs/da/modes.mdx
Normal file
329
qimingcode/packages/web/src/content/docs/da/modes.mdx
Normal file
@@ -0,0 +1,329 @@
|
||||
---
|
||||
title: Tilstande
|
||||
description: Forskellige tilstande til forskellige anvendelsestilfælde.
|
||||
---
|
||||
|
||||
:::caution
|
||||
Tilstande er nu konfigureret gennem indstillingen `agent` i opencode-konfigurationen. De
|
||||
`mode` mulighed er nu forældet. [Learn more](/docs/agents).
|
||||
:::
|
||||
|
||||
Tilstande i opencode giver dig mulighed for at tilpasse adfærd, værktøjer og prompter til forskellige brugstilfælde.
|
||||
|
||||
Den kommer med to indbyggede tilstande: **build** og **plan**. Du kan tilpasse
|
||||
disse eller konfigurer dine egne gennem opencode-konfigurationen.
|
||||
|
||||
Du kan skifte mellem tilstande under en session eller konfigurere dem i din konfigurationsfil.
|
||||
|
||||
---
|
||||
|
||||
## Indbyggede
|
||||
|
||||
opencode leveres med to indbyggede tilstande.
|
||||
|
||||
---
|
||||
|
||||
### Byg
|
||||
|
||||
Byg er **standard**-tilstanden med alle værktøjer aktiveret. Dette er standardtilstanden for udviklingsarbejde, hvor du har brug for fuld adgang til filhandlinger og systemkommandoer.
|
||||
|
||||
---
|
||||
|
||||
### Plan
|
||||
|
||||
En begrænset tilstand designet til planlægning og analyse. I plantilstand er følgende værktøjer deaktiveret som standard:
|
||||
|
||||
- `write` - Kan ikke oprette nye filer
|
||||
- `edit` - Kan ikke ændre eksisterende filer, undtagen filer placeret på `.opencode/plans/*.md` for at detaljere selve planen
|
||||
- `patch` - Kan ikke anvende patches
|
||||
- `bash` - Kan ikke udføre shell-kommandoer
|
||||
|
||||
Denne tilstand er nyttig, når du vil have AI til at analysere kode, foreslå ændringer eller oprette planer uden at foretage egentlige ændringer af din kodebase.
|
||||
|
||||
---
|
||||
|
||||
## Skift
|
||||
|
||||
Du kan skifte mellem tilstande under en session ved at bruge _Tab_-tasten. Eller din konfigurerede `switch_mode` nøglebinding.
|
||||
|
||||
Se også: [Formatters](/docs/formatters) for information om konfiguration af kodeformatering.
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan tilpasse de indbyggede tilstande eller oprette dine egne gennem konfiguration. Tilstande kan konfigureres på to måder:
|
||||
|
||||
### JSON-konfiguration
|
||||
|
||||
Konfigurer tilstande i din `opencode.json`-konfigurationsfil:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"build": {
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Markdown-konfiguration
|
||||
|
||||
Du kan også definere tilstande ved hjælp af markdown-filer. Placer dem i:
|
||||
|
||||
- Globalt: `~/.config/opencode/modes/`
|
||||
- Projekt: `.opencode/modes/`
|
||||
|
||||
```markdown title="~/.config/opencode/modes/review.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
Markdown-filnavnet bliver tilstandsnavnet (f.eks. opretter `review.md` en `review`-tilstand).
|
||||
|
||||
Lad os se nærmere på disse konfigurationsmuligheder.
|
||||
|
||||
---
|
||||
|
||||
### Model
|
||||
|
||||
Brug `model`-konfigurationen til at tilsidesætte standardmodellen for denne tilstand. Nyttigt til brug af forskellige modeller optimeret til forskellige opgaver. For eksempel en hurtigere model til planlægning, en mere dygtig model til implementering.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Temperatur
|
||||
|
||||
Styr tilfældigheden og kreativiteten af AI's svar med `temperature`-konfigurationen. Lavere værdier gør svar mere fokuserede og deterministiske, mens højere værdier øger kreativitet og variabilitet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Temperaturværdier varierer typisk fra 0,0 til 1,0:
|
||||
|
||||
- **0.0-0.2**: Meget fokuserede og deterministiske svar, ideel til kodeanalyse og planlægning
|
||||
- **0,3-0,5**: Afbalancerede svar med en vis kreativitet, god til generelle udviklingsopgaver
|
||||
- **0.6-1.0**: Mere kreative og varierede svar, nyttige til brainstorming og udforskning
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis der ikke er angivet nogen temperatur, bruger opencode modelspecifikke standarder (typisk 0 for de fleste modeller, 0,55 for Qwen-modeller).
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
Angiv en brugerdefineret systempromptfil for denne tilstand med `prompt`-konfigurationen. Promptfilen skal indeholde instruktioner, der er specifikke for tilstandens formål.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Denne sti er i forhold til, hvor konfigurationsfilen er placeret. Så dette virker for
|
||||
både den globale opencode-konfiguration og den projektspecifikke konfiguration.
|
||||
|
||||
---
|
||||
|
||||
### Værktøjer
|
||||
|
||||
Kontroller, hvilke værktøjer der er tilgængelige i denne tilstand med `tools`-konfigurationen. Du kan aktivere eller deaktivere specifikke værktøjer ved at indstille dem til `true` eller `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hvis der ikke er angivet nogen værktøjer, er alle værktøjer aktiveret som standard.
|
||||
|
||||
---
|
||||
|
||||
#### Tilgængelige værktøjer
|
||||
|
||||
Her er alle de værktøjer, der kan styres gennem tilstandskonfigurationen.
|
||||
|
||||
| Værktøj | Beskrivelse |
|
||||
| ----------- | -------------------------- |
|
||||
| `bash` | Udfør shell-kommandoer |
|
||||
| `edit` | Rediger eksisterende filer |
|
||||
| `write` | Opret nye filer |
|
||||
| `read` | Læs filindhold |
|
||||
| `grep` | Søg filindhold |
|
||||
| `glob` | Find filer efter mønster |
|
||||
| `patch` | Anvend patches til filer |
|
||||
| `todowrite` | Administrer todo-lister |
|
||||
| `webfetch` | Hent webindhold |
|
||||
|
||||
---
|
||||
|
||||
## Brugerdefinerede tilstande
|
||||
|
||||
Du kan oprette dine egne brugerdefinerede tilstande ved at tilføje dem til konfigurationen. Her er eksempler, der bruger begge tilgange:
|
||||
|
||||
### Brug af JSON-konfiguration
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"docs": {
|
||||
"prompt": "{file:./prompts/documentation.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Brug af markdown-filer
|
||||
|
||||
Opret tilstandsfiler i `.opencode/modes/` for projektspecifikke tilstande eller `~/.config/opencode/modes/` for globale tilstande:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Understanding the problem through careful analysis
|
||||
- Using bash commands to inspect system state
|
||||
- Reading relevant files and logs
|
||||
- Searching for patterns and anomalies
|
||||
- Providing clear explanations of findings
|
||||
|
||||
Do not make any changes to files. Only investigate and report.
|
||||
```
|
||||
|
||||
```markdown title="~/.config/opencode/modes/refactor.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.2
|
||||
tools:
|
||||
edit: true
|
||||
read: true
|
||||
grep: true
|
||||
glob: true
|
||||
---
|
||||
|
||||
You are in refactoring mode. Focus on improving code quality without changing functionality.
|
||||
|
||||
Priorities:
|
||||
|
||||
- Improve code readability and maintainability
|
||||
- Apply consistent naming conventions
|
||||
- Reduce code duplication
|
||||
- Optimize performance where appropriate
|
||||
- Ensure all tests continue to pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Brugsscenarier
|
||||
|
||||
Her er nogle almindelige brugstilfælde for forskellige tilstande.
|
||||
|
||||
- **Build mode**: Fuldt udviklingsarbejde med alle værktøjer aktiveret
|
||||
- **Plantilstand**: Analyse og planlægning uden at foretage ændringer
|
||||
- **Anmeldelsestilstand**: Kodegennemgang med skrivebeskyttet adgang plus dokumentationsværktøjer
|
||||
- **Fejlretningstilstand**: Fokuseret på undersøgelse med bash og læseværktøjer aktiveret
|
||||
- **Docs-tilstand**: Dokumentationsskrivning med filhandlinger, men ingen systemkommandoer
|
||||
|
||||
Du kan også finde ud af, at forskellige modeller er gode til forskellige brugssituationer.
|
||||
57
qimingcode/packages/web/src/content/docs/da/network.mdx
Normal file
57
qimingcode/packages/web/src/content/docs/da/network.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: Netværk
|
||||
description: Konfigurer proxyer og brugerdefinerede certifikater.
|
||||
---
|
||||
|
||||
OpenCode understøtter standard proxymiljøvariabler og brugerdefinerede certifikater til virksomhedsnetværksmiljøer.
|
||||
|
||||
---
|
||||
|
||||
## Proxy
|
||||
|
||||
OpenCode respekterer standard proxy-miljøvariabler.
|
||||
|
||||
```bash
|
||||
# HTTPS proxy (recommended)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# HTTP proxy (if HTTPS not available)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# Bypass proxy for local server (required)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
TUI kommunikerer med en lokal HTTP-server. Du skal omgå proxyen for denne forbindelse for at forhindre routingsløjfer.
|
||||
:::
|
||||
|
||||
Du kan konfigurere serverens port og værtsnavn ved hjælp af [CLI flags](/docs/cli#run).
|
||||
|
||||
---
|
||||
|
||||
### Godkendelse
|
||||
|
||||
Hvis din proxy kræver grundlæggende godkendelse, skal du inkludere legitimationsoplysninger i URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
Undgå hardkodning af adgangskoder. Brug miljøvariabler eller sikker lagring af legitimationsoplysninger.
|
||||
:::
|
||||
|
||||
For proxyer, der kræver avanceret godkendelse som NTLM eller Kerberos, kan du overveje at bruge en LLM Gateway, der understøtter din godkendelsesmetode.
|
||||
|
||||
---
|
||||
|
||||
## Brugerdefinerede certifikater
|
||||
|
||||
Hvis din virksomhed bruger tilpassede CA'er til HTTPS-forbindelser, skal du konfigurere OpenCode til at stole på dem.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
Dette virker for både proxy-forbindelser og direkte API-adgang.
|
||||
235
qimingcode/packages/web/src/content/docs/da/permissions.mdx
Normal file
235
qimingcode/packages/web/src/content/docs/da/permissions.mdx
Normal file
@@ -0,0 +1,235 @@
|
||||
---
|
||||
title: Tilladelser
|
||||
description: Kontroller, hvilke handlinger der kræver godkendelse for at køre.
|
||||
---
|
||||
|
||||
OpenCode bruger `permission`-konfigurationen til at bestemme, om en given handling skal køre automatisk, bede dig om eller blokeres.
|
||||
|
||||
Fra `v1.1.1` er den ældre `tools` booleske konfiguration forældet og er blevet flettet ind i `permission`. Den gamle `tools`-konfiguration er stadig understøttet for bagudkompatibilitet.
|
||||
|
||||
---
|
||||
|
||||
## Handlinger
|
||||
|
||||
Hver tilladelsesregel løses til en af:
|
||||
|
||||
- `"allow"` — køre uden godkendelse
|
||||
- `"ask"` — prompt om godkendelse
|
||||
- `"deny"` — bloker handlingen
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Du kan indstille tilladelser globalt (med `*`) og tilsidesætte specifikke værktøjer.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også indstille alle tilladelser på én gang:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Granulære regler (objektsyntaks)
|
||||
|
||||
For de fleste tilladelser kan du bruge et objekt til at anvende forskellige handlinger baseret på værktøjsinputtet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"npm *": "allow",
|
||||
"rm *": "deny",
|
||||
"grep *": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"*": "deny",
|
||||
"packages/web/src/content/docs/*.mdx": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Regler evalueres efter mønstermatch, hvor den **sidste matchende regel vinder**. Et almindeligt mønster er at sætte catch-all `"*"` reglen først og mere specifikke regler efter den.
|
||||
|
||||
### Jokertegn
|
||||
|
||||
Tilladelsesmønstre bruger simpel jokertegn-matchning:
|
||||
|
||||
- `*` matcher nul eller flere af et hvilket som helst tegn
|
||||
- `?` matcher nøjagtigt ét tegn
|
||||
- Alle andre karakterer matcher bogstaveligt talt
|
||||
|
||||
### Udvidelse af hjemmemappe
|
||||
|
||||
Du kan bruge `~` eller `$HOME` i starten af et mønster til at referere til din hjemmemappe. Dette er især nyttigt for [`external_directory`](#external-directories) regler.
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### Eksterne mapper
|
||||
|
||||
Brug `external_directory` til at tillade værktøjsopkald, der berører stier uden for den arbejdsmappe, hvor OpenCode blev startet. Dette gælder for ethvert værktøj, der tager en sti som input (for eksempel `read`, `edit`, `glob`, `grep` og mange `bash` kommandoer).
|
||||
|
||||
Hjemmeudvidelse (som `~/...`) påvirker kun, hvordan et mønster skrives. Det gør ikke en ekstern sti til en del af det aktuelle arbejdsområde, så stier uden for arbejdsbiblioteket skal stadig være tilladt via `external_directory`.
|
||||
|
||||
For eksempel giver dette adgang til alt under `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Enhver mappe, der er tilladt her, arver de samme standarder som det aktuelle arbejdsområde. Siden [`read` defaults to `allow`](#defaults), er læsninger også tilladt for poster under `external_directory`, medmindre de tilsidesættes. Tilføj eksplicitte regler, når et værktøj skal begrænses i disse stier, såsom blokering af redigeringer, mens læsninger bevares:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Hold listen fokuseret på betroede stier, og lag ekstra tillad eller afvis regler efter behov for andre værktøjer (for eksempel `bash`).
|
||||
|
||||
---
|
||||
|
||||
## Tilgængelige tilladelser
|
||||
|
||||
OpenCode tilladelser indtastes efter værktøjsnavn plus et par sikkerhedsafskærmninger:
|
||||
|
||||
- `read` — læser en fil (matcher filstien)
|
||||
- `edit` — alle filændringer (dækker `edit`, `write`, `patch`)
|
||||
- `glob` — fil-globing (matcher glob-mønsteret)
|
||||
- `grep` — indholdssøgning (matcher regex-mønsteret)
|
||||
- `bash` — kører shell-kommandoer (matcher parsede kommandoer som `git status --porcelain`)
|
||||
- `task` — lancering af underagenter (matcher underagenttypen)
|
||||
- `skill` — indlæsning af en færdighed (matcher færdighedsnavnet)
|
||||
- `lsp` — kører LSP forespørgsler (i øjeblikket ikke-granulære)
|
||||
- `webfetch` — henter en URL (matcher URL)
|
||||
- `websearch`, `codesearch` — web/code søgning (matcher forespørgslen)
|
||||
- `external_directory` — udløses, når et værktøj berører stier uden for projektets arbejdsmappe
|
||||
- `doom_loop` — udløses, når det samme værktøjskald gentages 3 gange med identisk input
|
||||
|
||||
---
|
||||
|
||||
## Standarder
|
||||
|
||||
Hvis du ikke angiver noget, starter OpenCode fra tilladelige standardindstillinger:
|
||||
|
||||
- De fleste tilladelser er som standard `"allow"`.
|
||||
- `doom_loop` og `external_directory` er som standard `"ask"`.
|
||||
- `read` er `"allow"`, men `.env` filer nægtes som standard:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Hvad "Spørg" gør
|
||||
|
||||
Når OpenCode beder om godkendelse, tilbyder brugergrænsefladen tre resultater:
|
||||
|
||||
- `once` — godkend netop denne anmodning
|
||||
- `always` — godkend fremtidige anmodninger, der matcher de foreslåede mønstre (for resten af den nuværende OpenCode session)
|
||||
- `reject` — afvis anmodningen
|
||||
|
||||
Sættet af mønstre, som `always` ville godkende, leveres af værktøjet (f.eks. hvidlister bash-godkendelser typisk et sikkert kommandopræfiks som `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## Agenter
|
||||
|
||||
Du kan tilsidesætte tilladelser pr. agent. Agenttilladelser flettes med den globale konfiguration, og agentregler har forrang. [Learn more](/docs/agents#permissions) om agenttilladelser.
|
||||
|
||||
:::note
|
||||
Se afsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mere detaljerede mønstermatchningseksempler.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "deny",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "ask",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også konfigurere agenttilladelser i Markdown:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
:::tip
|
||||
Brug mønstermatchning til kommandoer med argumenter. `"grep *"` tillader `grep pattern file.txt`, mens `"grep"` alene ville blokere det. Kommandoer som `git status` fungerer for standardadfærd, men kræver eksplicit tilladelse (som `"git status *"`), når argumenter sendes.
|
||||
:::
|
||||
389
qimingcode/packages/web/src/content/docs/da/plugins.mdx
Normal file
389
qimingcode/packages/web/src/content/docs/da/plugins.mdx
Normal file
@@ -0,0 +1,389 @@
|
||||
---
|
||||
title: Plugins
|
||||
description: Skriv dine egne plugins for at udvide OpenCode.
|
||||
---
|
||||
|
||||
Plugins giver dig mulighed for at udvide OpenCode ved at tilslutte sig forskellige begivenheder og tilpasse adfærd. Du kan oprette plugins for at tilføje nye funktioner, integrere med eksterne tjenester eller ændre OpenCodes standardadfærd.
|
||||
|
||||
For eksempler, tjek [plugins](/docs/ecosystem#plugins) oprettet af fællesskabet.
|
||||
|
||||
---
|
||||
|
||||
## Brug af plugin
|
||||
|
||||
Der er to måder at indlæse plugins på.
|
||||
|
||||
---
|
||||
|
||||
### Fra lokale filer
|
||||
|
||||
Placer JavaScript- eller TypeScript-filer i plugin-mappen.
|
||||
|
||||
- `.opencode/plugins/` - Plugins på projektniveau
|
||||
- `~/.config/opencode/plugins/` - Globale plugins
|
||||
|
||||
Filer i disse mapper indlæses automatisk ved opstart.
|
||||
|
||||
---
|
||||
|
||||
### Fra npm
|
||||
|
||||
Angiv npm-pakker i din konfigurationsfil.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
Både almindelige og omfangsrige npm-pakker understøttes.
|
||||
|
||||
Gennemse tilgængelige plugins i [ecosystem](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Installation af plugins
|
||||
|
||||
**npm plugins** installeres automatisk ved hjælp af Bun ved opstart. Pakker og deres afhængigheder cachelagres i `~/.cache/opencode/node_modules/`.
|
||||
|
||||
**Lokale plugins** indlæses direkte fra plugin-biblioteket. For at bruge eksterne pakker skal du oprette en `package.json` i din konfigurationsmappe (se [Dependencies](#dependencies)), eller udgive pluginnet til npm og [add it to your config](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### Indlæsningsrækkefølge
|
||||
|
||||
Plugins indlæses fra alle kilder, og alle hooks kører i rækkefølge. Indlæsningsrækkefølgen er:
|
||||
|
||||
1. Global konfiguration (`~/.config/opencode/opencode.json`)
|
||||
2. Projektkonfiguration (`opencode.json`)
|
||||
3. Global plugin-mappe (`~/.config/opencode/plugins/`)
|
||||
4. Projekt plugin bibliotek (`.opencode/plugins/`)
|
||||
|
||||
Dublerede npm-pakker med samme navn og version indlæses én gang. Et lokalt plugin og et npm plugin med lignende navne indlæses dog hver for sig.
|
||||
|
||||
---
|
||||
|
||||
## Oprettelse af plugin
|
||||
|
||||
Et plugin er et **JavaScript/TypeScript modul**, der eksporterer et eller flere plugin
|
||||
funktioner. Hver funktion modtager et kontekstobjekt og returnerer et hooks-objekt.
|
||||
|
||||
---
|
||||
|
||||
### Afhængigheder
|
||||
|
||||
Lokale plugins og brugerdefinerede værktøjer kan bruge eksterne npm-pakker. Tilføj en `package.json` til din konfigurationsmappe med de afhængigheder, du har brug for.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
OpenCode kører `bun install` ved opstart for at installere disse. Dine plugins og værktøjer kan derefter importere dem.
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
import { escape } from "shescape"
|
||||
|
||||
export const MyPlugin = async (ctx) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "bash") {
|
||||
output.args.command = escape(output.args.command)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grundlæggende struktur
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin initialized!")
|
||||
|
||||
return {
|
||||
// Hook implementations go here
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Plugin-funktionen modtager:
|
||||
|
||||
- `project`: Den aktuelle projektinformation.
|
||||
- `directory`: Den aktuelle arbejdsmappe.
|
||||
- `worktree`: Git worktree-stien.
|
||||
- `client`: En opencode SDK klient til interaktion med AI.
|
||||
- `$`: Buns [shell API](https://bun.com/docs/runtime/shell) til udførelse af kommandoer.
|
||||
|
||||
---
|
||||
|
||||
### TypeScript-understøttelse
|
||||
|
||||
For TypeScript-plugins kan du importere typer fra plugin-pakken:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Type-safe hook implementations
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Begivenheder
|
||||
|
||||
Plugins kan abonnere på begivenheder som vist nedenfor i afsnittet Eksempler. Her er en liste over de forskellige arrangementer.
|
||||
|
||||
#### Kommandohændelser
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### Filhændelser
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### Installationshændelser
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### LSP-hændelser
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### Beskedhændelser
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### Tilladelseshændelser
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### Serverhændelser
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### Sessionshændelser
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### Todo-hændelser
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### Shell-hændelser
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### Værktøjshændelser
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### TUI-hændelser
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## Eksempler
|
||||
|
||||
Her er nogle eksempler på plugins, du kan bruge til at udvide opencode.
|
||||
|
||||
---
|
||||
|
||||
### Send meddelelser
|
||||
|
||||
Send meddelelser, når visse hændelser indtræffer:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Send notification on session completion
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Vi bruger `osascript` til at køre AppleScript på macOS. Her bruger vi det til at sende notifikationer.
|
||||
|
||||
:::note
|
||||
Hvis du bruger OpenCode desktop-appen, kan den sende systemmeddelelser automatisk, når et svar er klar, eller når en session fejler.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### .env-beskyttelse
|
||||
|
||||
Undgå opencode i at læse `.env` filer:
|
||||
|
||||
```javascript title=".opencode/plugins/env-protection.js"
|
||||
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "read" && output.args.filePath.includes(".env")) {
|
||||
throw new Error("Do not read .env files")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Injicer miljøvariabler
|
||||
|
||||
Injicer miljøvariabler i al shell-udførelse (AI-værktøjer og brugerterminaler):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secret"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Brugerdefinerede værktøjer
|
||||
|
||||
Plugins kan også tilføje brugerdefinerede værktøjer til opencode:
|
||||
|
||||
```ts title=".opencode/plugins/custom-tools.ts"
|
||||
import { type Plugin, tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomToolsPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
tool: {
|
||||
mytool: tool({
|
||||
description: "This is a custom tool",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`tool`-hjælperen opretter et brugerdefineret værktøj, som opencode kan kalde. Det tager en Zod-skemafunktion og returnerer en værktøjsdefinition med:
|
||||
|
||||
- `description`: Hvad værktøjet gør
|
||||
- `args`: Zod-skema for værktøjets argumenter
|
||||
- `execute`: Funktion, der kører, når værktøjet kaldes
|
||||
|
||||
Dine tilpassede værktøjer vil være tilgængelige for opencode sammen med indbyggede værktøjer.
|
||||
|
||||
:::note
|
||||
Hvis et plugin-værktøj bruger samme navn som et indbygget værktøj, har plugin-værktøjet forrang.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Logning
|
||||
|
||||
Brug `client.app.log()` i stedet for `console.log` til struktureret logning:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin initialized",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Niveauer: `debug`, `info`, `warn`, `error`. Se [SDK documentation](https://opencode.ai/docs/sdk) for detaljer.
|
||||
|
||||
---
|
||||
|
||||
### Komprimerings-hooks
|
||||
|
||||
Tilpas konteksten inkluderet, når en session komprimeres:
|
||||
|
||||
```ts title=".opencode/plugins/compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Inject additional context into the compaction prompt
|
||||
output.context.push(`
|
||||
## Custom Context
|
||||
|
||||
Include any state that should persist across compaction:
|
||||
- Current task status
|
||||
- Important decisions made
|
||||
- Files being actively worked on
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`experimental.session.compacting` krogen affyres, før LLM genererer en fortsættelsesoversigt. Brug den til at injicere domænespecifik kontekst, som standardkomprimeringsprompten ville gå glip af.
|
||||
|
||||
Du kan også erstatte komprimeringsprompten helt ved at indstille `output.prompt`:
|
||||
|
||||
```ts title=".opencode/plugins/custom-compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomCompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Replace the entire compaction prompt
|
||||
output.prompt = `
|
||||
You are generating a continuation prompt for a multi-agent swarm session.
|
||||
|
||||
Summarize:
|
||||
1. The current task and its status
|
||||
2. Which files are being modified and by whom
|
||||
3. Any blockers or dependencies between agents
|
||||
4. The next steps to complete the work
|
||||
|
||||
Format as a structured prompt that a new agent can use to resume work.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Når `output.prompt` er indstillet, erstatter den standardkompressionsprompten fuldstændigt. `output.context`-arrayet ignoreres i dette tilfælde.
|
||||
1943
qimingcode/packages/web/src/content/docs/da/providers.mdx
Normal file
1943
qimingcode/packages/web/src/content/docs/da/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
qimingcode/packages/web/src/content/docs/da/rules.mdx
Normal file
180
qimingcode/packages/web/src/content/docs/da/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: Regler
|
||||
description: Angiv tilpassede instruktioner til opencode.
|
||||
---
|
||||
|
||||
Du kan gi tilpassede instruksjoner for at OpenCode ved at oprete en `AGENTS.md`-fil. Dette ligner på Cursors regler. Den inneholder instruksjoner som vil bli inkludert i LLMs kontekst for at tilpasse oppførselen til ditt spesifikke prosjekt.
|
||||
|
||||
---
|
||||
|
||||
## Initialisering
|
||||
|
||||
For at lage en ny `AGENTS.md` fil, kan du kjøre kommandoen `/init` i opencode.
|
||||
|
||||
:::tip
|
||||
Du bør overgi prosjektets `AGENTS.md`-fil til Git.
|
||||
:::
|
||||
|
||||
Dette vil skanne prosjektet og alt dets innhold for at forstå hva prosjektet handler om og generere en `AGENTS.md`-fil med det. Dette hjelper opencode at navigere i prosjektet bedre.
|
||||
|
||||
Hvis du har en eksisterende `AGENTS.md`-fil, vil denne prøve at tilføje til den.
|
||||
|
||||
---
|
||||
|
||||
## Eksempel
|
||||
|
||||
Du kan også bare lage denne filen manuelt. Her er et eksempel på nogle ting du kan tilføje inn i en `AGENTS.md`-fil.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# SST v3 Monorepo Project
|
||||
|
||||
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
|
||||
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Main SST configuration with dynamic imports
|
||||
|
||||
## Code Standards
|
||||
|
||||
- Use TypeScript with strict mode enabled
|
||||
- Shared code goes in `packages/core/` with proper exports configuration
|
||||
- Functions go in `packages/functions/`
|
||||
- Infrastructure should be split into logical files in `infra/`
|
||||
|
||||
## Monorepo Conventions
|
||||
|
||||
- Import shared modules using workspace names: `@my-app/core/example`
|
||||
```
|
||||
|
||||
Vi tilføjer til prosjektspesifikke instruksjoner her, og dette vil bli delt på tvers av teamet ditt.
|
||||
|
||||
---
|
||||
|
||||
## Typer
|
||||
|
||||
opencode støtter også lesing av `AGENTS.md`-filen fra flere steder. Og dette tjener forskjellige formål.
|
||||
|
||||
### Projekt
|
||||
|
||||
Plasser en `AGENTS.md` i prosjektroten for prosjektspesifikke regler. Disse gjelder kun når du arbeider i denne katalogen eller dens underkataloger.
|
||||
|
||||
### Globalt
|
||||
|
||||
Du kan også ha globale regler i en `~/.config/opencode/AGENTS.md`-fil. Dette blir brugt på alle opencode-sessioner.
|
||||
|
||||
Siden dette ikke er forpliktet til Git eller delt med teamet ditt, anbefaler vi at bruge dette til at spesifisere eventuelle personlige regler som LLM bør følge.
|
||||
|
||||
### Claude Code-kompatibilitet
|
||||
|
||||
For brugere som migrerer fra Claude Code, støtter OpenCode Claude Codes filkonvensjoner som fallbacks:
|
||||
|
||||
- **Prosjektregler**: `CLAUDE.md` i prosjektkatalogen din (bruges hvis ingen `AGENTS.md` eksisterer)
|
||||
- **Globale regler**: `~/.claude/CLAUDE.md` (bruges hvis ingen `~/.config/opencode/AGENTS.md` eksisterer)
|
||||
- **Skills**: `~/.claude/skills/` — se [Agent Skills](/docs/skills/) for detaljer
|
||||
|
||||
For at deaktivere Claude Code-kompatibilitet, sett en av disse miljøvariablene:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prioritet
|
||||
|
||||
Når opencode starter, ser den etter regelfiler i denne rekkefølgen:
|
||||
|
||||
1. **Lokale filer** ved at gå opp fra nuværende katalog (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **Global fil** på `~/.config/opencode/AGENTS.md`
|
||||
3. **Claude Code-fil** på `~/.claude/CLAUDE.md` (med mindre de er deaktivert)
|
||||
|
||||
Den første matchende filen vinner i hver kategori. For eksempel, hvis du har både `AGENTS.md` og `CLAUDE.md`, bruges bare `AGENTS.md`. På samme måte har `~/.config/opencode/AGENTS.md` forrang over `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## Brugerdefinerede instruktioner
|
||||
|
||||
Du kan spesifisere egendefinerte instruksjonsfiler i din `opencode.json` eller den globale `~/.config/opencode/opencode.json`. Dette lar deg og teamet ditt gjenbruge eksisterende regler i stedet for at måtte duplisere dem til AGENTS.md.
|
||||
|
||||
Eksempel:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Du kan også bruge eksterne URL-er for at laste instruksjoner fra nettet.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
Fjerninstruksjoner hentes med 5 sekunders tidsavbrudd.
|
||||
|
||||
Alle instruksjonsfilene er kombinert med `AGENTS.md`-filene dine.
|
||||
|
||||
---
|
||||
|
||||
## Reference til eksterne filer
|
||||
|
||||
Selv om opencode ikke automatisk analyserer filreferanser i `AGENTS.md`, kan du oppnå lignende funksjonalitet på to måter:
|
||||
|
||||
### Brug af opencode.json
|
||||
|
||||
Den anbefalte tilnærmingen er at bruge feltet `instructions` i `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### Manuelle instruktioner i AGENTS.md
|
||||
|
||||
Du kan lære opencode at lese eksterne filer ved at gi eksplisitte instruksjoner i `AGENTS.md`. Her er et praktisk eksempel:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# TypeScript Project Rules
|
||||
|
||||
## External File Loading
|
||||
|
||||
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
|
||||
|
||||
Instructions:
|
||||
|
||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
||||
- When loaded, treat content as mandatory instructions that override defaults
|
||||
- Follow references recursively when needed
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
For TypeScript code style and best practices: @docs/typescript-guidelines.md
|
||||
For React component architecture and hooks patterns: @docs/react-patterns.md
|
||||
For REST API design and error handling: @docs/api-standards.md
|
||||
For testing strategies and coverage requirements: @test/testing-guidelines.md
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
Denne tilnærmingen lar deg:
|
||||
|
||||
- Lag modulære, gjenbrugbare regelfiler
|
||||
- Del regler på tvers av prosjekter via symbolkoblinger eller git-undermoduler
|
||||
- Hold AGENTS.md kortfattet mens du refererer til detaljerte retningslinjer
|
||||
- Sørg for at opencode laster filer kun når det er nødvendig for den spesifikke oppgaven
|
||||
|
||||
:::tip
|
||||
For monorepos eller prosjekter med delte standarder er brug av `opencode.json` med glob-mønstre (som `packages/*/AGENTS.md`) mer vedlikeholdbart enn manuelle instruksjoner.
|
||||
:::
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user